diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/Cufflinks Tutorial - Chart Gallery.ipynb b/Cufflinks Tutorial - Chart Gallery.ipynb index ba3af15..795d4d1 100644 --- a/Cufflinks Tutorial - Chart Gallery.ipynb +++ b/Cufflinks Tutorial - Chart Gallery.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Cufflinks\n", + "## Cufflinks\n", "\n", "This library binds the power of [plotly](http://www.plot.ly) with the flexibility of [pandas](http://pandas.pydata.org/) for easy plotting.\n", "\n", @@ -16,20 +16,362 @@ { "cell_type": "code", "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "import cufflinks as cf" + "import cufflinks as cf\n", + "cf.go_offline()" ] }, { "cell_type": "code", "execution_count": 2, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", @@ -39,13 +381,195 @@ { "cell_type": "code", "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "#We set the all charts as public\n", - "cf.set_config_file(sharing='public',theme='pearl',offline=False)" + "cf.set_config_file(sharing='public',theme='pearl',offline=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#Set the numpy random seed\n", + "from numpy.random import seed\n", + "seed(seed=999)" ] }, { @@ -57,23 +581,1142 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, + "execution_count": 5, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "line": { + "color": "rgba(255, 153, 51, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "VYC.UT", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 0.12715784398970825, + -0.5217428656173067, + -0.9219440594693218, + -0.10892041041867428, + -0.2955697503428819, + 1.834485226588194, + 2.3937953975173993, + 2.4004640809702447, + 2.398054329297583, + 1.899448893835976, + 2.454054815839334, + 2.251831474538161, + 4.083481276487905, + 3.63411425361922, + 2.619462714599787, + 3.65143216260973, + 3.592485823928958, + 5.035226157414344, + 4.557467493359933, + 4.812528479974956, + 6.9480602558967774, + 6.234451069921138, + 6.67261838702224, + 6.244911654029981, + 6.619901913882348, + 6.107400586667763, + 8.165325372786405, + 9.364499317779657, + 8.083721982789688, + 7.376892749401305, + 8.7189286789453, + 8.02663873295801, + 7.643892921950717, + 8.124023594213414, + 8.147474172326461, + 7.011181294446239, + 6.432798735107609, + 5.948080956128618, + 6.720737404497719, + 7.294561669695243, + 4.1228011588272695, + 3.3195925834069433, + 2.3656455851541245, + 1.4797016093770978, + 2.047453017055545, + 2.707422526738747, + 2.0579472864918475, + 0.9467537297370003, + 2.5807146998835258, + 3.7958789755546984, + 4.287719611534165, + 4.288384372767232, + 3.6382307143740507, + 3.4462578345165555, + 3.840038906085076, + 4.058180208939314, + 4.037894927133898, + 5.241111385794518, + 4.591543304735921, + 4.127789253068081, + 2.8101114772655964, + 2.2266979412406163, + 3.3854456467584084, + 3.8640791204596807, + 2.9115639730648564, + 1.815049463748097, + 2.4504819462405334, + -1.05711968887424, + -0.172050173794434, + -0.4875552518415856, + -0.9501000128727775, + -1.4026924721118204, + -1.5271440297485674, + -0.960633276921925, + -2.8490155335782585, + -2.153938238678699, + -2.1232713237738636, + -1.3952703086830804, + -1.1475391216678719, + -0.01487461447696381, + -1.4622452377235788, + -1.2512657756934045, + -3.228709066364634, + -3.9346940550867213, + -5.836913161367994, + -5.6729335965393135, + -4.168668158362891, + -4.239456766534638, + -5.36355457080105, + -6.719737551687857, + -8.183780278186044, + -8.40501181041417, + -6.586897822083459, + -8.271964665841647, + -8.465169526005628, + -9.07322144642767, + -8.134141530108186, + -9.172702415006844, + -9.174088648540506, + -10.098881234150715 + ] + }, + { + "line": { + "color": "rgba(55, 128, 191, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "NDZ.CW", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 1.4018908824849983, + 2.968158451423148, + 3.2833857554609764, + 3.122081039045977, + 2.2640139654479485, + 2.3351681889219194, + 2.809181286284847, + 2.338498009297564, + 2.4077428546303112, + 3.0126185799000496, + 3.1122486072743105, + 1.5474355567545204, + 2.4305670673181816, + 2.018627684000199, + 2.9033601233622255, + 3.0552440052859753, + 1.5915346620707116, + 2.9174367239253107, + 4.733722419614555, + 4.842651778469581, + 4.61267568673694, + 4.594965389874004, + 4.783112146983475, + 5.263372835738888, + 4.551248581075621, + 5.216900049570885, + 4.711004422875521, + 4.4038052915701105, + 7.474388907910206, + 5.4048066729718185, + 4.6723861971226, + 3.9336647240724516, + 3.7335471315777555, + 3.4248359391448533, + 4.165542694286384, + 3.669869881357666, + 2.8785594318123384, + 2.9651582566321886, + 3.2630208751174217, + 3.5393349098698925, + 4.673206618747681, + 4.820090093434667, + 5.073878658823347, + 3.605979161173156, + 2.7355381962342413, + 4.681404025321187, + 4.312410503395212, + 3.115894647266426, + 3.1112266286137746, + 4.487053350202208, + 4.744719707579121, + 3.739148382720777, + 3.993826037693275, + 5.359515531428377, + 5.298972179994415, + 5.506670496680113, + 6.333628129555452, + 5.050007936215155, + 6.212250237832199, + 3.899615958846319, + 4.893909860488198, + 5.6548594359209865, + 4.950358714075253, + 4.918695634649415, + 4.359385169742262, + 3.9783071518190387, + 4.504896843269515, + 4.563600128256592, + 5.482589894481806, + 4.445580817587278, + 4.784894096570656, + 5.105250730038214, + 5.885072819372683, + 3.411746350795577, + 4.1743318259979745, + 4.692263660086056, + 4.769244618128532, + 3.55691616193939, + 3.586633827973236, + 5.697459308782506, + 6.110115020813976, + 8.458990529696722, + 8.327990119423319, + 7.416074638057407, + 5.725504922524225, + 3.7096237671821064, + 3.1652366584848686, + 1.725814730530319, + 1.8076814560066152, + 0.474155958781568, + 0.6647847576227967, + 0.3001582114290628, + 0.023380828205332438, + -1.0394380933413978, + -1.177391166396503, + -1.7082781013642196, + -1.4070661099709145, + -2.3366596124019585, + -2.254973204138618, + -1.7550707484923262 + ] + }, + { + "line": { + "color": "rgba(50, 171, 96, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "MBN.FI", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 0.31481498673474084, + -1.776555203876645, + -2.886616037947549, + -1.285744487249294, + -2.045522646279949, + -3.8871648880455574, + -5.589798256469667, + -5.10927609463745, + -4.262252027063557, + -3.961708895269011, + -4.749381304263603, + -2.916218359043336, + -3.4032567066421713, + -2.9701061925645034, + -1.7561628615048845, + -0.6728797434842455, + 0.3357393539290172, + 1.415993341101147, + 0.5178277149610017, + 0.4787005512662782, + 0.5517048039974659, + 2.253548246991235, + 0.6897038056355125, + -0.3955478886993229, + -0.3504499957005341, + 0.7282077456305267, + 1.3298153518240525, + 1.8539601837536415, + 1.868029980025164, + 2.9120070281361174, + 2.713242469038912, + 3.6647110664965385, + 3.49638216987972, + 2.9780781231756706, + 3.8130570547668836, + 4.4078336614081035, + 5.476386589799182, + 4.9723855393625325, + 5.736125274327428, + 5.733325327778307, + 5.8689503352322, + 5.200132362701325, + 5.374135849497561, + 6.608287081926522, + 6.6366386309040095, + 5.926562401013449, + 5.284496823576295, + 4.241670236276533, + 3.7166063179891298, + 3.99093777491108, + 3.1409994645044703, + 2.6052112222770614, + 2.0683560701386883, + 1.3876963085001663, + 2.078962400203687, + 1.285490104534333, + 0.6517355907554994, + 1.4813042545421644, + 1.101147960333136, + 0.8392972836875119, + 0.2512197277924064, + 1.1656443533697016, + 3.7788750793787838, + 3.773820956631108, + 3.9746421787478923, + 4.1062431531361625, + 4.103061578565079, + 5.657659983844636, + 6.370628511380133, + 7.192386547307228, + 6.275950715028516, + 5.801305527741325, + 4.193156489329798, + 1.520489590970131, + 1.9838203443547089, + 1.7691663804891011, + 1.2946277425281252, + 1.725209931009418, + 3.034514366045969, + 3.0364188524177687, + 2.335518218871031, + 1.622258206557384, + 1.9278663579274014, + 1.6556473877543154, + 1.9638830837835104, + 1.0054569693959312, + 0.5458426860351193, + 0.3418330478603806, + -0.9257470237025232, + -0.4339686125166586, + -0.17485007947050946, + 0.6567561248160659, + 0.8257374289010873, + -0.266624843483803, + -0.596286403550776, + -0.3025073801155635, + 0.7483053677925797, + -0.26184914856328256, + 1.856359409686127, + 1.584381835984598 + ] + }, + { + "line": { + "color": "rgba(128, 0, 128, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "JZH.BN", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + -0.8584491643464739, + 0.5978788993902137, + 0.0130573741330835, + 0.9973999492417452, + -0.5146542902926047, + -0.8672449878714501, + -2.1755315346620083, + -1.109345231911678, + -0.44766087991955006, + -0.6988895486373323, + -0.06788020889121427, + -0.19992629856416305, + 0.7113641885232356, + 0.6172151159564466, + 2.124356670617231, + 2.428573510327676, + 2.6757081830373974, + 4.744896682370859, + 4.798923739574784, + 3.71970145569907, + 4.454631176865413, + 3.2663949174658593, + 2.0544009471777542, + 2.266898930106316, + 3.125985230238663, + 4.346336328929833, + 4.368397933063604, + 2.7327178108323293, + 3.1551514349183116, + 3.1573556854567966, + 3.2371667837864573, + 2.1794422186375986, + 2.193439807037021, + 2.4046296940230865, + 1.678770427520396, + 1.253775239441359, + 0.7532256537876529, + 2.3915348677375903, + 0.4890592945338397, + 1.3882673315251735, + 0.8343892868355453, + 1.2383296783950184, + 1.5950863778313464, + 0.45412930249334926, + -0.14851588410961059, + -1.3939884157250106, + -1.4229558047305153, + -2.4319134768412813, + -2.196054379911584, + -2.5358596374343723, + -2.991927062563247, + -2.4751529921743005, + -1.584881332206217, + -1.1947055362187697, + -1.0235637018502468, + -0.8965916839568253, + -0.9259214693842475, + 0.3261745244878196, + -0.07684690756295837, + -2.446165197488396, + -1.327274998725267, + -1.364174196504465, + -2.5506452661165255, + -2.4772214357262015, + -1.6678693608771438, + -2.6781755061753425, + 0.4343908468321689, + 1.7184799111630604, + -0.32704215487807664, + 1.8296095666324987, + 0.4874958815054393, + 0.7259318450726377, + 0.24587943825965086, + -0.34244037527706384, + -1.4515529074551758, + -2.5098636310853495, + -4.096870335451277, + -5.092723044261352, + -6.717448576761005, + -5.959865861851019, + -6.183098050695021, + -6.909779709675305, + -7.936256156532473, + -7.653311689942261, + -7.381973426523355, + -5.692528119793057, + -5.232939909622513, + -5.322306899048772, + -4.654152777294414, + -4.641783559357311, + -5.547993808600476, + -6.379199847259018, + -5.1588371021233055, + -4.04945622984215, + -4.137611048923517, + -4.552174988700174, + -5.139456874813371, + -4.83053841854468, + -4.948079607868118, + -5.620302545774217 + ] + }, + { + "line": { + "color": "rgba(219, 64, 82, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "JXZ.QQ", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + -0.2661344367670474, + 0.6791589786315557, + 0.49074941456401644, + -0.34469795827966376, + 1.4030767858473738, + 0.9941729910315875, + 1.419004728931869, + 2.575323142120828, + 1.867089381848858, + 2.423199462374681, + 3.707689914488647, + 4.646484073406601, + 3.497503346860912, + 5.988630045165799, + 5.55027660122412, + 6.030426134034937, + 4.604755898894289, + 4.3027036300010275, + 4.915455916301937, + 5.107294291178235, + 4.179617470754457, + 2.4952890341238456, + 1.3938365139168156, + 1.146791044671723, + 2.527381846648353, + 2.885475891643352, + 2.508044397078371, + 2.7889899197677313, + 1.7821746593972896, + 0.9088643590971957, + 1.135225661729514, + 0.2083698858003582, + 0.8921293017022561, + -0.3124636788172591, + -1.6107654344102231, + -2.1912463267008073, + -1.2955056622994232, + 0.33552845447104485, + 1.1277435476129072, + 0.8752162437463706, + 0.7218812374309402, + 1.5248505502781229, + 0.12464624139662095, + -2.7179897225920735, + -1.9589808254107934, + -3.6327271637336445, + -5.012851956408874, + -6.4261424592188785, + -4.583916167536819, + -4.731425042459571, + -5.710732079870172, + -8.080436303340159, + -8.933868916634028, + -8.72321245141596, + -9.076607887701062, + -9.293079161807983, + -9.892834110786193, + -10.11137404088778, + -9.563562490267415, + -9.50958257393372, + -10.657846264290672, + -12.03871660045399, + -13.936280006776844, + -13.54209548667252, + -13.126052766972881, + -13.29400984638599, + -12.662028812860324, + -14.005109782063599, + -13.484766960106121, + -11.874505479989118, + -11.343100075888678, + -11.581427464414855, + -14.120569475584944, + -15.176428827220672, + -16.272105084128967, + -17.912360656772076, + -16.13605189956492, + -15.133069708566335, + -16.48904972402388, + -16.186544714503288, + -14.451391069220819, + -14.884616187511721, + -14.058512185465165, + -14.533741339329303, + -15.70233893029998, + -18.812209620933515, + -19.814860360864078, + -18.68647989098274, + -17.84927758179862, + -17.54701196006957, + -20.006910400507348, + -18.930690175196005, + -18.01834984262138, + -18.384729230935275, + -18.80239929105016, + -18.593295807327202, + -18.177344757144745, + -18.853833386424665, + -19.598273481249727, + -20.49652075685165 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Line Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Returns", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 4, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -82,23 +1725,716 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, + "execution_count": 6, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "fill": "tozeroy", + "fillcolor": "rgba(49, 130, 189, 0.3)", + "line": { + "color": "rgba(49, 130, 189, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "TBF.OJ", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 0.4781581932697218, + -0.1617456920767681, + 1.741322492610351, + 1.5540301561463037, + 2.3969945144732456, + 1.9748843582233768, + 1.0761248892581112, + 1.432701916448904, + 1.7483463160419102, + 0.23810770258537817, + 0.5976524931820568, + 2.288109556531774, + 3.261503581923937, + 3.9133811580348836, + 3.898934289602209, + 2.9721879222986956, + 2.522205899007426, + 2.6232882793582015, + 3.96449537513827, + 4.182623351243388, + 3.663953814600218, + 3.4369738636595604, + 3.122872338196789, + 4.050615030651095, + 4.853531052762492, + 7.355293589064002, + 7.672983639694554, + 7.930738163959116, + 7.795810428619605, + 8.694183357307434, + 8.151103433740378, + 8.930617072589936, + 9.73238370665987, + 9.455935543675183, + 9.536783749967759, + 9.515114002674554, + 9.897254243541937, + 8.840622080121024, + 7.755939589228701, + 8.358501365405708, + 7.392589008356065, + 6.454175816466551, + 6.378147965247396, + 6.643918968851095, + 7.42874190363118, + 5.9932298035079725, + 6.61694214443149, + 8.244641317017823, + 8.312212128125505, + 8.36000454440286, + 8.272827693438675, + 10.516512726696222, + 9.884983653047616, + 9.9899810179395, + 11.374465429610797, + 9.726703147144626, + 8.860592014257094, + 10.914927027522882, + 11.252396040018292, + 12.102584985202675, + 12.78120783375094, + 13.725896798118576, + 13.584169069647535, + 15.741868417515164, + 15.984425880579346, + 17.88986438977488, + 17.41186561807714, + 16.856498266848945, + 17.88821541179768, + 16.286061487938753, + 15.7839118809262, + 17.7158839878123, + 18.512767872136074, + 19.195458774347053, + 19.391093715382066, + 20.642992856631217, + 22.595202803091336, + 22.64551970670854, + 22.694875138677563, + 20.595607657702427, + 20.96919384326459, + 21.611694507402632, + 21.10844987313741, + 21.400370203972916, + 20.731454468699145, + 20.994828343242933, + 17.54965042662873, + 17.61564332108272, + 17.58707240143661, + 18.768854087496962, + 17.553830072058116, + 16.784713536728088, + 16.441570707054066, + 16.63221462790447, + 14.916212155723066, + 14.638344179846424, + 15.713553102455167, + 16.099881064633788, + 13.634218618535158, + 15.16594781837209 + ] + }, + { + "fill": "tozeroy", + "fillcolor": "rgba(158, 202, 225, 0.3)", + "line": { + "color": "rgba(158, 202, 225, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "HXV.BJ", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 0.17223311677269607, + -1.0957715727647253, + 1.0837172846648524, + -0.731474375113893, + 0.061935666145660484, + 0.658087020501076, + 2.0211547930881224, + 1.5658541938742552, + 0.8372418701596813, + 0.9681022773556602, + 1.272423915227438, + 1.4293170429699493, + 1.5887490457007778, + 1.2668317103798254, + -0.06015062392249759, + -0.8016506632494006, + -0.17079228625263188, + -0.07369181478487885, + -1.4376958570150011, + -3.0838761087835658, + -3.1034958217754522, + -2.626781423343153, + -4.235670437914731, + -2.7054946552226973, + -3.6176863867149267, + -3.6903404839496754, + -4.4598010949387366, + -4.758306081829265, + -4.900620333068731, + -3.5998293686295466, + -2.374795796559846, + -1.6788836969549492, + -2.2487485168193526, + -0.8666326514479086, + -1.755905368826173, + -1.8456419407432538, + -0.784682401785467, + -0.3657098902498876, + -1.0189826292056616, + -1.49282238935052, + -2.0464021638167695, + -0.8930548302886889, + -1.9340420607021414, + -2.165830465320676, + -2.691761181556111, + -1.4724730757058164, + -1.0300988816744554, + -1.4799184433346355, + -0.6669279905058518, + 0.2695390729905921, + 0.5562232265582867, + 1.4936068983930721, + 1.892762369957902, + 0.5504195758865991, + 1.1052880369507716, + 0.6369314099364877, + 0.5211504756709877, + 1.0246537891478047, + 0.47477085259504137, + -0.9048593695665836, + -1.270401922705887, + -1.7902694593933288, + -1.778465078431963, + -2.339220220435994, + -4.236271682543352, + -5.156306330935356, + -4.742913900803437, + -5.58095634761524, + -5.111237954196198, + -4.272490330453461, + -4.89342703085545, + -4.899412459140523, + -4.569465803955159, + -5.202157968291454, + -4.587864706072658, + -3.99693534450211, + -4.399519192110645, + -5.112706079854985, + -4.8594197528504175, + -3.787167477258465, + -4.076966364544347, + -4.087530707881056, + -4.307848353161079, + -3.2609993629995775, + -2.8273614475329674, + -3.274768329248279, + -3.5378888394180388, + -3.698858120392034, + -3.6244535540187277, + -3.170375873290606, + -2.02333442361072, + -1.1701678956314483, + -1.1776455583713765, + -1.0835321538001381, + -2.6210301978346946, + -1.3620800820082375, + -0.33431643896276575, + 0.09306426920065797, + 0.039323098977071105, + 0.32141350022724247 + ] + }, + { + "fill": "tozeroy", + "fillcolor": "rgba(222, 235, 247, 0.3)", + "line": { + "color": "rgba(222, 235, 247, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "YWV.KR", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 0.16851927326373417, + -1.4550183577048978, + -1.0952138690111746, + -1.4341012374123, + -1.3848016584119611, + 0.5249992291377956, + 2.647844938728787, + 2.7637838109840955, + 1.1139642173866093, + -0.6050533359526853, + -0.8142788229405618, + -1.06649008569289, + -2.0572191366147696, + -3.585183962441471, + -2.206561397122249, + -0.630525265971073, + -0.8920033496163007, + -0.578492151756751, + -2.6192523765618425, + -2.5588590576454786, + -2.5448611049758423, + -3.024166474381273, + -2.354453785934181, + -1.1748841058828168, + 0.37449736417836355, + 1.252842951966468, + 0.7015353262310569, + 1.8665628406847836, + 2.534125122045651, + 3.83439688867774, + 3.679127757026501, + 4.002951432925502, + 5.557350285863629, + 4.318596651728987, + 4.490269757773173, + 3.681422277332578, + 4.027806786968375, + 5.446973453186317, + 5.840756772034037, + 6.888885657733349, + 7.778513426095999, + 6.550092755861331, + 8.104883024136385, + 9.192317526169436, + 8.71699947879935, + 11.520246861092739, + 11.360337500277657, + 11.676370517108943, + 12.450381084809244, + 12.115658643631559, + 13.179218501449895, + 13.491072481629427, + 13.636077447159895, + 14.638412635445839, + 15.745089879079398, + 13.881470952901974, + 13.772356418666577, + 14.440843014545216, + 13.689859107560775, + 15.162059337715599, + 14.518690128143179, + 14.565272152089262, + 14.162979962837232, + 11.984524951507302, + 12.043189162756585, + 14.36905191780198, + 13.742964499657559, + 14.212593108722142, + 13.858274460519752, + 12.017026248601574, + 11.982287711676516, + 10.556062860215327, + 10.839779016177546, + 11.602388196812994, + 12.318481881352726, + 12.519878981500026, + 12.10159136471862, + 10.605897300402608, + 11.331668930840392, + 10.67011714844168, + 9.642662023919998, + 10.204283204102918, + 10.6357695045749, + 10.024546417377737, + 10.695558705744318, + 10.01351147976879, + 8.920290330574783, + 10.281038294739293, + 10.651931565066, + 11.669646540746776, + 12.384089831007342, + 13.226936963690514, + 12.806387687699416, + 13.367923417335863, + 12.765654588644171, + 14.636444984223676, + 15.983085905719298, + 18.137779174636677, + 19.490479577911085, + 20.517558231317253 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Filled Line Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Returns", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 7, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -108,23 +2444,503 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, + "execution_count": 7, + "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jpoles1/.local/lib/python3.5/site-packages/statsmodels/compat/pandas.py:56: FutureWarning:\n", + "\n", + "The pandas.core.datetools module is deprecated and will be removed in a future version. Please use the pandas.tseries module instead.\n", + "\n" + ] + }, { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "line": { + "color": "rgba(55, 128, 191, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "ICR.OA", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + -0.6549806550194063, + 1.0216392231339184, + 0.8591536120687462, + -0.5383428878084067, + -0.2432964596095082, + -0.05066587435115577, + -0.036707809196679694, + -0.6192224885669234, + -0.6440074500647979, + 0.4858519326822952, + 0.601075280584492, + -1.7533511464048588, + -1.317949680559944, + -1.3989642555933026, + -1.1730435867160844, + -2.3272317942258858, + -1.2245848366579215, + -1.52640154694748, + -1.4409753684789335, + -0.03201260696929653, + 0.8704020908224331, + 1.575009487318182, + 1.9701861126367568, + 4.293326782058164, + 3.9523139473035886, + 2.893335288450196, + 2.510289862271918, + 3.7853538969827243, + 4.375395700694073, + 5.605110120030707, + 6.065202119192605, + 5.041015048850168, + 4.773033125397135, + 4.592763712203716, + 6.439102868787739, + 6.173641045518255, + 6.056437841693864, + 6.210578979165343, + 5.010724223265251, + 4.920716158847169, + 6.744419436420518, + 5.080843017962602, + 4.532911594115758, + 7.162546702657121, + 9.051648675588556, + 8.201380952006238, + 7.735093351018082, + 7.227343788043789, + 6.660372393074319, + 8.657440590650738, + 8.148887201434517, + 8.929707001924216, + 9.658654476386412, + 9.307221822483577, + 9.700533263783736, + 10.363012996665056, + 10.20741953215206, + 9.587007899351226, + 10.646012167032131, + 10.56202832360421, + 10.299574594679553, + 10.4309355475869, + 9.482438315463046, + 9.953822416422893, + 8.307701403326256, + 8.091763049251895, + 8.40780166124564, + 8.763230350647623, + 8.770680693375056, + 8.286213119393103, + 5.931294049857626, + 5.340520066191595, + 5.990892211786143, + 5.2214551435429915, + 4.512477252167272, + 3.400131069574857, + 2.1643603853671634, + 1.8754627395178765, + 2.4058906851973036, + 3.560255787277277, + 2.553987791107506, + 2.1876993064391144, + 3.501083604745324, + 1.4411872049665218, + 0.6713942425532116, + 0.9527872857138578, + 1.1060472194438244, + 1.5739926962576272, + 1.5774626177312527, + 1.5237601744119362, + 2.5601998901342027, + 2.679118229338171, + 2.889692315733962, + 1.0397019142257584, + 1.2079450694069707, + 0.24632741201781716, + 1.0419474925080627, + 2.7039605066457337, + 2.4020006571388883, + 2.8465906923564313 + ] + }, + { + "line": { + "color": "rgba(255, 0, 136, 1.0)", + "dash": "dash", + "shape": "linear", + "width": 3 + }, + "mode": "lines", + "name": "2.43*x+0.03", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 2.4594843422033654, + 2.4928620710606495, + 2.526239799917933, + 2.559617528775217, + 2.5929952576325013, + 2.626372986489785, + 2.659750715347069, + 2.693128444204353, + 2.726506173061637, + 2.759883901918921, + 2.793261630776205, + 2.826639359633489, + 2.860017088490773, + 2.8933948173480566, + 2.9267725462053407, + 2.9601502750626247, + 2.993528003919909, + 3.026905732777193, + 3.0602834616344765, + 3.0936611904917606, + 3.1270389193490447, + 3.1604166482063283, + 3.1937943770636124, + 3.2271721059208964, + 3.2605498347781805, + 3.2939275636354646, + 3.327305292492748, + 3.3606830213500323, + 3.3940607502073163, + 3.4274384790646, + 3.460816207921884, + 3.494193936779168, + 3.527571665636452, + 3.5609493944937363, + 3.59432712335102, + 3.627704852208304, + 3.661082581065588, + 3.6944603099228717, + 3.7278380387801557, + 3.76121576763744, + 3.794593496494724, + 3.827971225352008, + 3.8613489542092916, + 3.8947266830665757, + 3.9281044119238597, + 3.9614821407811434, + 3.9948598696384274, + 4.0282375984957115, + 4.061615327352996, + 4.09499305621028, + 4.128370785067563, + 4.161748513924847, + 4.195126242782131, + 4.228503971639415, + 4.2618817004967, + 4.295259429353983, + 4.328637158211267, + 4.362014887068551, + 4.395392615925835, + 4.4287703447831195, + 4.462148073640403, + 4.495525802497687, + 4.52890353135497, + 4.562281260212255, + 4.595658989069539, + 4.629036717926823, + 4.662414446784107, + 4.69579217564139, + 4.729169904498675, + 4.762547633355958, + 4.795925362213243, + 4.829303091070527, + 4.86268081992781, + 4.896058548785095, + 4.929436277642378, + 4.962814006499663, + 4.9961917353569465, + 5.02956946421423, + 5.062947193071514, + 5.096324921928798, + 5.129702650786083, + 5.163080379643366, + 5.19645810850065, + 5.229835837357934, + 5.263213566215218, + 5.296591295072502, + 5.329969023929786, + 5.36334675278707, + 5.396724481644354, + 5.430102210501638, + 5.463479939358922, + 5.496857668216206, + 5.53023539707349, + 5.5636131259307735, + 5.596990854788057, + 5.630368583645342, + 5.663746312502626, + 5.69712404135991, + 5.730501770217193, + 5.763879499074477 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Besfit Line Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Returns", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 8, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -142,23 +2958,502 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, + "execution_count": 8, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "line": { + "color": "rgba(166, 206, 227, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "marker": { + "size": 10, + "symbol": "x" + }, + "mode": "markers", + "name": "MUE.UO", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + -1.2726046869738195, + -1.093156256195892, + 1.1572342194284806, + 2.573564687814108, + 2.008548127170329, + 2.231225953633359, + 0.24064456695430714, + 0.7792297588756344, + 0.5383735054869944, + 1.6893723579290247, + 0.8884080555611188, + 0.8052271870806416, + 1.6339315295592785, + 1.9550940707385118, + 2.836421958066804, + 2.1616341120578486, + 1.6685607543621765, + 3.004596706767167, + 3.232856013379836, + 3.811563852821479, + 3.6357150324286986, + 2.613231364462785, + 3.433198111034953, + 3.7549047423208126, + 2.328709005941305, + 3.486744408413922, + 3.594284822900889, + 2.837658750146049, + 1.9911455196153378, + 3.2600680763665206, + 2.4598830181530356, + 0.7684791604820049, + 2.236673429557025, + 1.44325652823719, + 1.2292853816938063, + 1.4353687954706509, + 1.9511304660304833, + 1.5043123632410733, + 0.6126409222233107, + -0.7901941678297684, + -1.350816941619891, + -3.027537995036406, + -3.2437887617143706, + -3.253573009153555, + -4.523342498348438, + -3.5054338923172064, + -4.039398140694175, + -5.231905345679871, + -5.728786857088577, + -5.84327079589166, + -3.5481909453808975, + -2.572278893099089, + -3.9779476760400034, + -3.9795243399247817, + -2.4287895322522934, + -3.5261304045005755, + -4.380377460604569, + -3.4128858263313155, + -2.448023617195389, + -2.4760957982661087, + -2.912505481007584, + -2.297445060494874, + -2.6310534790125963, + -2.2354116778513897, + -2.3886851176434436, + -2.081783135221801, + -2.8551540733489267, + -1.9587081244487776, + -4.367676267217922, + -5.270095390226586, + -5.262778246252261, + -4.731394527909925, + -4.210576531471645, + -5.527882405772016, + -7.282548741748896, + -4.472745135034468, + -2.9590040275137586, + -2.86991744938115, + -5.497389630026696, + -4.171266438528852, + -4.981775991165017, + -5.667649875234057, + -6.310672612299122, + -5.354896181892396, + -5.826128654918743, + -5.520460667465202, + -5.885306052477051, + -4.885146349378655, + -2.52039089312548, + -3.2307912721275125, + -4.890237391804401, + -4.768956830668196, + -5.1619848048720645, + -5.673774243383981, + -5.188275487766187, + -5.7693242393674975, + -8.945841966326253, + -9.988241630098788, + -9.409549066735922, + -9.621903142386053 + ] + }, + { + "line": { + "color": "rgba(31, 120, 180, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "marker": { + "size": 10, + "symbol": "x" + }, + "mode": "markers", + "name": "NYC.ST", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 0.9962778176327128, + -0.7570342262887627, + 0.5924613028013969, + -1.8179724544286664, + -2.6656084081740525, + -3.963857462049412, + -3.8496402795328835, + -3.0478097774403046, + -3.540920662032632, + -1.4280206738668748, + -1.8778297239078956, + -1.1233159951887057, + -1.3866752143433363, + -2.9906453166445965, + -5.028108056216807, + -5.08703678734332, + -5.336724308588668, + -5.834998605747658, + -6.497301841160113, + -8.323897060080071, + -7.22672192073402, + -8.410604688428947, + -9.117287509244147, + -8.15420746100648, + -8.905018412379226, + -8.002305551986133, + -8.745911355106756, + -8.3266461267441, + -9.662898768075904, + -9.317548106395355, + -8.435874225474498, + -8.9477066495543, + -7.883387080390451, + -8.33377201896621, + -8.174893129562545, + -6.443043671924479, + -5.770825879871577, + -4.466163759981726, + -4.358484943059203, + -5.111491643466017, + -4.8851339224794055, + -4.415214029146493, + -4.679578668805365, + -3.5130246162880887, + -2.1452704932546798, + -2.006065605418808, + -0.5823594321097849, + -0.533238322610807, + -1.1813917277216475, + -3.0104468356161824, + -2.4235108352478383, + -3.5370140031850545, + -3.9232110481898737, + -5.422396936617485, + -4.244507703171463, + -3.119831959312151, + -3.597334811177861, + -2.6975483362368546, + -2.916224546215948, + -1.2018658609017012, + -1.6757790798047338, + -1.6669577310792147, + -2.2313509843511117, + -0.42953406597035615, + -0.03154734415812249, + -0.08679976117676355, + -1.1393185228015568, + 0.8844007655511985, + 1.8992495594542305, + 3.365846976302679, + 3.1888394360799075, + 4.224970618268549, + 4.372267395284132, + 5.282727353376738, + 4.907550184245342, + 4.54410988247762, + 2.940235890972681, + 1.9103955406201558, + 0.6072728757273493, + 1.4223559576886273, + 0.8082844175339382, + 0.6764486326540393, + 0.6921322828389357, + -0.13726417416274128, + -0.33239155218953154, + 0.47390799858504007, + 0.9376478268942209, + -1.8937154537670122, + -1.3410451376621293, + -0.44954964340185577, + -1.3205187074218843, + -1.1189273975511906, + -2.6971710042282036, + -3.799367167996464, + -5.310724510137085, + -5.023707469213593, + -7.440465200709306, + -8.37066016881584, + -9.09644513279326, + -6.718385862646416 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Scatter Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "EPS Growth", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 9, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -175,23 +3470,969 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, + "execution_count": 9, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "line": { + "color": "rgba(255, 153, 51, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "GGA.XA", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + 2.6025444370153368, + 0.5754622957755848, + -0.9228638381946119, + -1.4658517658511685, + -0.969219885209327, + -0.1873720505520765, + -0.5851920100862271, + -1.4765669864668571, + -1.2507620718293138, + -0.8744125421551032, + 0.20358380129357467, + -1.7562670172650876, + -2.0068161187628433, + -2.5370724090607606, + -2.5313788372176282, + -2.752950451491168, + -3.930164241998286, + -5.747035388753307, + -7.034118179592107, + -7.407533359489849, + -5.1425151979336245, + -6.877520108603063, + -6.817716058013991, + -5.611255315485833, + -5.914781896128199, + -5.984912259230443, + -4.910857400092554, + -5.523611610169098, + -5.203966165260978, + -4.0125140259979535, + -2.1930081740473395, + -3.0404199972556363, + -2.6919319798294494, + -2.260658581922581, + -3.538492535343301, + -4.819351225020949, + -7.675735275275471, + -7.1791400673309065, + -5.2890205815439755, + -5.8285946472370735, + -7.965067363916953, + -7.503064361805919, + -4.785568271500786, + -4.544720509059493, + -4.6872546849235635, + -5.501895298593071, + -4.635599066250624, + -4.3312210794313195, + -5.300271146968847, + -8.32006138944623, + -7.143852144888139, + -4.9486636259905215, + -4.9097825733447005, + -4.828701446256292, + -3.3106180052370986, + -4.059555201676229, + -4.644392603750349, + -5.110317448778758, + -5.150735936878203, + -4.588683955714554, + -4.9296872146318504, + -5.357582562997804, + -5.721220907414696, + -4.830401493937937, + -7.128911178186085, + -5.33233976205887, + -5.412804217539031, + -5.376107168027778, + -5.233946618191038, + -3.6050103970795053, + -3.5527566753358446, + -5.407309818569123, + -5.6166191784556485, + -4.657321703416399, + -3.262856344712288, + -4.357611389418505, + -3.1480165216763902, + -1.6290688647228624, + -1.4329591150797518, + -2.717373022524413, + -4.143477050044425, + -3.5981236796535176, + -2.425021974915243, + -4.381070309774038, + -3.6134917102224566, + -1.9287873781598397, + -3.8104426645891856, + -5.457896183077457, + -3.887790327322249, + -4.934344129756172, + -4.033278454221963, + -1.3578191900290508, + -2.4314023837169927, + -3.184004916239593, + -3.476300626497615, + -4.308928274173736, + -5.397123149577807, + -5.990904585098808, + -5.583117188696175, + -5.374106069670176 + ] + }, + { + "line": { + "color": "rgba(55, 128, 191, 1.0)", + "dash": "solid", + "shape": "linear", + "width": 1.3 + }, + "mode": "lines", + "name": "ZBH.MA", + "text": "", + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "y": [ + -0.38618057285336055, + -0.1938026488408098, + 1.8890194454887008, + 1.4909133807121617, + 1.8915023423521546, + 0.8150283766444884, + -0.593928539353632, + -0.8401159138656236, + -1.484557499935182, + -1.4988398356374237, + -1.1930509165024872, + -0.9564225435053327, + -1.167552021479314, + -0.03220153980722107, + 1.2146843967168879, + 2.39543412711142, + 3.079266918748076, + 0.8253832893150537, + 1.9415816026964068, + 2.356571747735739, + 1.7617226095041052, + 1.7305920334291447, + 1.4379074050315699, + 0.27856590911352597, + 0.5206746896827139, + 1.4659870870343368, + 1.6914957340388757, + -0.05176716758219779, + -1.055769847073275, + 0.7270448816364208, + 0.6622921382407091, + 0.7118161624130189, + 1.7148248741097007, + 1.4447996636147438, + 0.5356682279459765, + -0.07404566081191744, + 0.13128375723235872, + 0.9501657724125191, + 2.4449340265844937, + 2.2225508026791863, + 2.4536014803147497, + 2.1132220063351213, + 3.022842171661554, + 4.593016046696896, + 5.722886834442838, + 5.555432427576722, + 5.148747907201679, + 4.454119802654543, + 6.261252573970804, + 5.035183308516832, + 6.939627126254755, + 6.165343091057084, + 5.7649939336770535, + 5.555696308195352, + 6.2860532047647455, + 7.307631181645656, + 6.616550657309291, + 6.992765226253508, + 8.56218269409154, + 7.625662703266941, + 8.184163081475264, + 9.099095857047622, + 8.638860143430135, + 9.867318590499352, + 9.601371048558885, + 8.265051857021591, + 7.824655120903726, + 8.081170086739666, + 7.752593967259553, + 7.270913456105726, + 8.296170293660033, + 7.718933781257662, + 6.642211119848063, + 7.622066507811925, + 7.518351221522795, + 8.045562511867026, + 8.471619530938003, + 7.853183178102254, + 7.449462854980566, + 8.524878928715893, + 8.815999540592777, + 8.708185008936917, + 11.268406051868208, + 8.504797649038363, + 10.15380728665972, + 8.789841174791615, + 6.657935257187733, + 6.106412062185401, + 5.487472869030617, + 5.175920186246981, + 3.6263064211374716, + 3.7786593620435367, + 4.108316847677268, + 3.033383880724034, + 2.96665810362315, + 1.8997848752654725, + 2.367595130911288, + 1.593943681425353, + -0.09437926705178112, + -1.3768085520399223 + ] + }, + { + "connectgaps": false, + "fill": "tozeroy", + "line": { + "color": "red", + "dash": "solid", + "shape": "linear", + "width": 0.5 + }, + "mode": "lines", + "name": "Spread", + "showlegend": false, + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "xaxis": "x2", + "y": [ + "", + "", + -2.8118832836833128, + -2.9567651465633302, + -2.8607222275614816, + -1.002400427196565, + "", + -0.6364510726012336, + "", + "", + "", + -0.7998444737597549, + -0.8392640972835292, + -2.5048708692535397, + -3.746063233934516, + -5.148384578602588, + -7.009431160746361, + -6.572418678068361, + -8.975699782288514, + -9.764105107225589, + -6.904237807437729, + -8.608112142032208, + -8.255623463045561, + -5.889821224599359, + -6.435456585810913, + -7.45089934626478, + -6.602353134131429, + -5.4718444425869, + -4.148196318187702, + -4.7395589076343745, + -2.8553003122880485, + -3.752236159668655, + -4.40675685393915, + -3.705458245537325, + -4.074160763289277, + -4.745305564209032, + -7.80701903250783, + -8.129305839743425, + -7.733954608128469, + -8.051145449916259, + -10.418668844231703, + -9.61628636814104, + -7.80841044316234, + -9.137736555756389, + -10.410141519366402, + -11.057327726169794, + -9.784346973452303, + -8.785340882085862, + -11.56152372093965, + -13.355244697963062, + -14.083479271142894, + -11.114006717047605, + -10.674776507021754, + -10.384397754451644, + -9.596671210001844, + -11.367186383321885, + -11.26094326105964, + -12.103082675032265, + -13.712918630969742, + -12.214346658981494, + -13.113850296107113, + -14.456678420045426, + -14.36008105084483, + -14.69772008443729, + -16.73028222674497, + -13.597391619080462, + -13.237459338442758, + -13.457277254767444, + -12.98654058545059, + -10.875923853185231, + -11.848926968995878, + -13.126243599826786, + -12.25883029830371, + -12.279388211228325, + -10.781207566235082, + -12.40317390128553, + -11.619636052614393, + -9.482252042825117, + -8.882421970060317, + -11.242251951240306, + -12.959476590637202, + -12.306308688590434, + -13.693428026783451, + -12.885867958812401, + -13.767298996882177, + -10.718628552951454, + -10.468377921776918, + -11.564308245262858, + -9.375263196352865, + -10.110264316003153, + -7.659584875359435, + -5.136478552072587, + -6.539719231394261, + -6.217388796963627, + -6.442958730120765, + -6.208713149439209, + -7.764718280489095, + -7.584848266524161, + -5.488737921644393, + -3.9972975176302534 + ], + "yaxis": "y2" + }, + { + "connectgaps": false, + "fill": "tozeroy", + "line": { + "color": "green", + "dash": "solid", + "shape": "linear", + "width": 0.5 + }, + "mode": "lines", + "name": "Spread", + "showlegend": false, + "type": "scatter", + "x": [ + "2015-01-01", + "2015-01-02", + "2015-01-03", + "2015-01-04", + "2015-01-05", + "2015-01-06", + "2015-01-07", + "2015-01-08", + "2015-01-09", + "2015-01-10", + "2015-01-11", + "2015-01-12", + "2015-01-13", + "2015-01-14", + "2015-01-15", + "2015-01-16", + "2015-01-17", + "2015-01-18", + "2015-01-19", + "2015-01-20", + "2015-01-21", + "2015-01-22", + "2015-01-23", + "2015-01-24", + "2015-01-25", + "2015-01-26", + "2015-01-27", + "2015-01-28", + "2015-01-29", + "2015-01-30", + "2015-01-31", + "2015-02-01", + "2015-02-02", + "2015-02-03", + "2015-02-04", + "2015-02-05", + "2015-02-06", + "2015-02-07", + "2015-02-08", + "2015-02-09", + "2015-02-10", + "2015-02-11", + "2015-02-12", + "2015-02-13", + "2015-02-14", + "2015-02-15", + "2015-02-16", + "2015-02-17", + "2015-02-18", + "2015-02-19", + "2015-02-20", + "2015-02-21", + "2015-02-22", + "2015-02-23", + "2015-02-24", + "2015-02-25", + "2015-02-26", + "2015-02-27", + "2015-02-28", + "2015-03-01", + "2015-03-02", + "2015-03-03", + "2015-03-04", + "2015-03-05", + "2015-03-06", + "2015-03-07", + "2015-03-08", + "2015-03-09", + "2015-03-10", + "2015-03-11", + "2015-03-12", + "2015-03-13", + "2015-03-14", + "2015-03-15", + "2015-03-16", + "2015-03-17", + "2015-03-18", + "2015-03-19", + "2015-03-20", + "2015-03-21", + "2015-03-22", + "2015-03-23", + "2015-03-24", + "2015-03-25", + "2015-03-26", + "2015-03-27", + "2015-03-28", + "2015-03-29", + "2015-03-30", + "2015-03-31", + "2015-04-01", + "2015-04-02", + "2015-04-03", + "2015-04-04", + "2015-04-05", + "2015-04-06", + "2015-04-07", + "2015-04-08", + "2015-04-09", + "2015-04-10" + ], + "xaxis": "x2", + "y": [ + 2.9887250098686975, + 0.7692649446163946, + "", + "", + "", + "", + 0.008736529267404869, + "", + 0.23379542810586829, + 0.6244272934823205, + 1.3966347177960619, + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "yaxis": "y2" + } + ], + "layout": { + "hovermode": "x", + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Spread Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "xaxis2": { + "anchor": "y2", + "gridcolor": "#E1E5ED", + "showgrid": true, + "showticklabels": false, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "domain": [ + 0.3, + 1 + ], + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Return", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis2": { + "domain": [ + 0, + 0.25 + ], + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Spread", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 10, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -207,52 +4448,382 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, + "execution_count": 10, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "marker": { + "color": "rgba(255, 153, 51, 0.6)", + "line": { + "color": "rgba(255, 153, 51, 1.0)", + "width": 1 + } + }, + "name": "GLS.WU", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + 1.4978958331928256, + -6.520880807679585, + -6.351816358504938, + -3.756306101228519 + ] + }, + { + "marker": { + "color": "rgba(55, 128, 191, 0.6)", + "line": { + "color": "rgba(55, 128, 191, 1.0)", + "width": 1 + } + }, + "name": "XDD.NK", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + -2.976854688117165, + -7.491108361179653, + -14.571861840601214, + -18.3818267237662 + ] + }, + { + "marker": { + "color": "rgba(50, 171, 96, 0.6)", + "line": { + "color": "rgba(50, 171, 96, 1.0)", + "width": 1 + } + }, + "name": "NFT.ZO", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + -2.9330860300388895, + -5.247950157446646, + 0.8346616066910366, + 2.6528201671389686 + ] + }, + { + "marker": { + "color": "rgba(128, 0, 128, 0.6)", + "line": { + "color": "rgba(128, 0, 128, 1.0)", + "width": 1 + } + }, + "name": "YFU.QL", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + -0.7632467220035936, + -5.064628999385275, + -12.050380633008727, + -14.290273873944708 + ] + }, + { + "marker": { + "color": "rgba(219, 64, 82, 0.6)", + "line": { + "color": "rgba(219, 64, 82, 1.0)", + "width": 1 + } + }, + "name": "ISS.RN", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + -2.962426881771697, + -2.7944963530676583, + 0.17312779122448865, + 0.6558014684061491 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Bar Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Return", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 11, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "cf.datagen.lines(5).resample('M').iplot(kind='bar',xTitle='Dates',yTitle='Return',title='Cufflinks - Bar Chart')" + "cf.datagen.lines(5).resample('M').mean().iplot(kind='bar',xTitle='Dates',yTitle='Return',title='Cufflinks - Bar Chart')" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, + "execution_count": 11, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "marker": { + "color": "rgba(255, 153, 51, 0.6)", + "line": { + "color": "rgba(255, 153, 51, 1.0)", + "width": 1 + } + }, + "name": "ZNU.IB", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + -1.0340272879234353, + 2.260233039903324, + -4.991865074691336, + -4.2753621538562765 + ] + }, + { + "marker": { + "color": "rgba(55, 128, 191, 0.6)", + "line": { + "color": "rgba(55, 128, 191, 1.0)", + "width": 1 + } + }, + "name": "UHS.IO", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + -0.13984853299408317, + -5.434755734224875, + -2.494289760588742, + -1.9675274349689587 + ] + }, + { + "marker": { + "color": "rgba(50, 171, 96, 0.6)", + "line": { + "color": "rgba(50, 171, 96, 1.0)", + "width": 1 + } + }, + "name": "TFM.MC", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + -0.6413839757077023, + -8.620014237338362, + -5.504576148973353, + -7.5036026073421995 + ] + }, + { + "marker": { + "color": "rgba(128, 0, 128, 0.6)", + "line": { + "color": "rgba(128, 0, 128, 1.0)", + "width": 1 + } + }, + "name": "SYH.OL", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + 0.2376369197394226, + 0.19249871891003725, + 4.335005607757709, + 11.420482271870119 + ] + }, + { + "marker": { + "color": "rgba(219, 64, 82, 0.6)", + "line": { + "color": "rgba(219, 64, 82, 1.0)", + "width": 1 + } + }, + "name": "FFO.WX", + "orientation": "v", + "text": "", + "type": "bar", + "x": [ + "2015-01-31", + "2015-02-28", + "2015-03-31", + "2015-04-30" + ], + "y": [ + 1.7811567358447158, + 7.824234628309095, + 14.212081938877862, + 15.886769468986367 + ] + } + ], + "layout": { + "barmode": "stack", + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + }, + "traceorder": "normal" + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Grouped Bar Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Dates", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Return", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 12, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "cf.datagen.lines(5).resample('M').iplot(kind='bar',xTitle='Dates',yTitle='Return',title='Cufflinks - Grouped Bar Chart',\n", + "cf.datagen.lines(5).resample('M').mean().iplot(kind='bar',xTitle='Dates',yTitle='Return',title='Cufflinks - Grouped Bar Chart',\n", " barmode='stack')" ] }, @@ -265,23 +4836,740 @@ }, { "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, + "execution_count": 12, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "boxpoints": false, + "line": { + "width": 1.3 + }, + "marker": { + "color": "rgba(255, 153, 51, 1.0)" + }, + "name": "NTV.DS", + "type": "box", + "y": [ + 2.6188387733979464, + 3.381561295221175, + 2.6482999369888414, + 6.131741672605856, + 8.353936868560211, + 13.476641572159062, + 0.9764552806849103, + 4.825290818880937, + 0.4248910930101752, + 0.41914442448742756, + 9.620380181046249, + 9.397367657267095, + 6.584652867405576, + 7.324649839405432, + 0.39021002049801445, + 3.0015974143969424, + 0.6069853739259359, + 2.9401992887496884, + 0.06322596105677146, + 11.94794386703933, + 5.001226049241543, + 6.591080703039766, + 4.0583681373299685, + 12.333508791284558, + 1.5934088691722184, + 9.428194476803412, + 5.991124160234761, + 6.204067759344925, + 12.523291660655785, + 3.621133054889598, + 4.574746744563626, + 13.012239498485018, + 3.60651812796445, + 7.666862499199166, + 6.307098179927724, + 16.432796891057222, + 2.0401749311494908, + 1.7020321816450878, + 7.250897607845836, + 8.364010627713862, + 7.413252503781244, + 17.630826520678333, + 6.420377149185072, + 14.171887309181189, + 9.42820891468005, + 2.585271090590911, + 7.068013679179596, + 12.58605430986098, + 5.56088338372261, + 16.301184018682417, + 6.099721531748671, + 2.0658082547205976, + 7.185275693686886, + 0.2716583230133432, + 2.6308333995352133, + 3.7596258861266096, + 5.728033029005409, + 8.015600796312674, + 1.1091152049953956, + 2.1508821902695408, + 3.6801510051640838, + 1.3847244309892421, + 3.057335903427158, + 9.210524659259491, + 20.071800728460055, + 5.10013193492144, + 12.225882393824609, + 0.19949729304752492, + 4.175166474735961, + 3.3422027429724968, + 19.43518539563659, + 7.786497234864056, + 0.6754386972693737, + 8.333555160189, + 9.265177970650543, + 7.863480539660181, + 4.52519541525869, + 0.004662636130594216, + 1.4142861675260625, + 5.89429178801833, + 3.6123890644407073, + 3.5705228432739746, + 8.050214628021607, + 5.244550748366144, + 4.952466246871211, + 0.5272070514666723, + 1.9426829354457527, + 1.3394564673917513, + 0.5934750745513884, + 1.569975744631816, + 11.840703194958271, + 0.9529197754570321, + 7.727638291757709, + 7.240005321657884, + 3.5694698342416666, + 2.435487683350211, + 1.3268882560092783, + 5.475918045598531, + 5.374457083792793, + 0.9019250905593615 + ] + }, + { + "boxpoints": false, + "line": { + "width": 1.3 + }, + "marker": { + "color": "rgba(55, 128, 191, 1.0)" + }, + "name": "KFQ.NC", + "type": "box", + "y": [ + 3.920037479698701, + 9.596168128400057, + 2.7813648357106437, + 2.2693784167889097, + 6.300985595106254, + 15.953122493587195, + 3.879104023809643, + 4.119414703170163, + 0.33992128548701467, + 0.4620682969402006, + 8.491587726386843, + 4.450016383139338, + 3.5002974001142673, + 8.521370027946084, + 0.14910641259629892, + 0.48523864981388354, + 0.7643774976694478, + 5.011232264184811, + 0.7764330998217902, + 7.190734825569148, + 0.7812176439540408, + 10.813020172470733, + 10.43787980055085, + 9.755507809584078, + 4.325991728037947, + 4.012268375287405, + 6.03140850732749, + 1.7864978944654206, + 11.410797388331835, + 2.314977464871195, + 1.1657936999886997, + 7.074580821982901, + 4.9353949590887645, + 7.672839261401144, + 7.5502666465038155, + 6.255327259005725, + 1.092101452177451, + 5.164522682638465, + 3.1300112484805265, + 27.244677440628024, + 11.700477378864573, + 8.303641350984838, + 5.728531343469038, + 2.7674537908921093, + 4.855071373199093, + 12.068851140179659, + 9.048869235949738, + 4.1869431974189535, + 6.711657998489249, + 6.658466237036078, + 9.465925797777187, + 0.4133261760345616, + 3.662386069857439, + 5.988610119638251, + 2.271489748117393, + 12.889142218089185, + 9.362085950213524, + 6.660733333132441, + 0.2058662300742579, + 11.39503740819813, + 1.2742964350181463, + 3.033478123725357, + 8.514584702393687, + 4.584405068583409, + 3.0421249816500215, + 4.116523890448919, + 6.304243011533927, + 1.0007831417266562, + 4.693845679697745, + 9.208746815460302, + 5.976935270632992, + 17.294291222035266, + 0.7922295482237027, + 1.6210111282241495, + 4.770359122494683, + 7.897532017120522, + 5.573135751843424, + 1.524011527582317, + 1.1019441164685222, + 7.432803401325148, + 0.34344404646545484, + 11.197688955634016, + 11.133171284471702, + 15.538640982125058, + 5.434707523841442, + 0.4475841432657592, + 0.3867700362280206, + 2.050003999860385, + 1.136379467179543, + 7.5155351338377585, + 3.3207138243119902, + 4.017695693137644, + 2.9564397141968595, + 2.1454927962136248, + 5.596009736887466, + 5.2673475768430364, + 8.881129564439581, + 6.936878347143547, + 6.32112998248228, + 4.584993633339955 + ] + }, + { + "boxpoints": false, + "line": { + "width": 1.3 + }, + "marker": { + "color": "rgba(50, 171, 96, 1.0)" + }, + "name": "RSN.FW", + "type": "box", + "y": [ + 8.162365267956357, + 7.282882641049497, + 3.6477252096519606, + 5.294287377705399, + 10.765582943989276, + 4.319289019815417, + 2.610282573337516, + 0.7654360316768212, + 7.076959334171014, + 0.03392803483186373, + 6.624951803823374, + 7.591894753149434, + 0.836270274100866, + 7.096197724391927, + 3.681747612853772, + 1.5360891636544407, + 4.104077156647127, + 9.595642798668916, + 3.4722962704129987, + 4.342905797684277, + 7.391335025199207, + 2.753505233070432, + 5.97393011332155, + 7.124703707352076, + 0.30127823049304336, + 2.9552032737204286, + 1.363164590346292, + 4.405972492495206, + 7.851838750891958, + 6.991446509460044, + 1.6794369598789292, + 14.552535597852973, + 5.384480684004917, + 8.690948468579023, + 11.104274457972542, + 5.469739525694354, + 0.622997177856384, + 5.964859613186249, + 10.780956003921995, + 7.987513750530058, + 4.653252619352213, + 17.17734237611279, + 11.203534038288, + 4.704919329847327, + 1.1141848644259922, + 14.198319306011298, + 7.35233116877829, + 8.622149673113826, + 10.967507521591006, + 2.305922944456098, + 4.933726061980956, + 1.264688665076335, + 1.8444594330585606, + 1.5829270721381532, + 13.731005304895126, + 6.262863365217979, + 10.52782606273656, + 5.2451630333299795, + 3.6705564963619035, + 0.29955847169597716, + 3.510601409186413, + 1.4025239419083262, + 14.762727147101968, + 9.391811236575796, + 5.62969209793962, + 3.467872004138255, + 4.341729702144562, + 3.5385396557655318, + 3.1517038129666095, + 2.2884287535855696, + 9.416481358630318, + 17.434836894663757, + 0.014162111191732944, + 9.554374270183857, + 9.352336549280688, + 8.75048559031655, + 0.5529223280640331, + 1.5286280077601793, + 0.9224754721556372, + 2.8635648159760247, + 3.420218665973058, + 16.493991959872606, + 8.693835760512458, + 8.83142671824228, + 9.848772300961938, + 2.3742115406544033, + 3.734245249526083, + 1.737635910377056, + 2.3042787416470305, + 9.624333359756246, + 15.291259065637009, + 0.9525359063574995, + 3.2726778375160173, + 4.917600707398549, + 2.5364651384078427, + 3.0144252433852055, + 4.925248124942288, + 13.566951309426035, + 3.074717272943335, + 10.260896780684803 + ] + }, + { + "boxpoints": false, + "line": { + "width": 1.3 + }, + "marker": { + "color": "rgba(128, 0, 128, 1.0)" + }, + "name": "IBP.DE", + "type": "box", + "y": [ + 14.762925328845075, + 2.0460439709520686, + 3.0445342355386873, + 2.5870293723405706, + 3.215369645733324, + 4.466133925063559, + 1.7913936641004677, + 3.144765939141109, + 4.1879679329480615, + 3.228038748886003, + 8.418403811493729, + 0.9812462132746648, + 1.2330263336301746, + 5.084984085857424, + 0.3887189172439391, + 0.5300240298738337, + 6.233896305966231, + 2.826171500581475, + 1.4971074472281227, + 6.152824463872881, + 3.152468598727876, + 13.43964202076601, + 9.319357679362119, + 4.044329685894482, + 4.995025649124218, + 2.6555584292167698, + 12.313611897349835, + 4.716327619088924, + 16.494915300444713, + 2.4765944928266967, + 3.4088930870886425, + 8.79100469085921, + 7.155537076340092, + 7.9307303000306115, + 4.89089417820105, + 7.815353130523895, + 7.634455157409144, + 4.701099367407979, + 4.743704226006436, + 3.3758993657844147, + 4.6103050335521205, + 8.528079722682447, + 5.583810395370423, + 4.090867401944804, + 2.068030058895142, + 8.840421107863468, + 9.077663122460141, + 3.969966741271613, + 11.667476530545787, + 5.282960633605844, + 6.494372509067227, + 2.4418311381058277, + 3.271413342638931, + 3.9157865140850117, + 1.0120309333228763, + 2.8867733546090637, + 4.816421715410121, + 8.711522563590544, + 3.784586529431646, + 3.546346335197711, + 6.693869509508142, + 0.0339535268294868, + 8.909980905042579, + 6.800899021709829, + 11.20096053496582, + 5.527893606004153, + 5.097921407414891, + 0.43545256001849875, + 6.85197980419981, + 6.775463757380153, + 3.3444604196306074, + 4.054162278932105, + 1.956984288511184, + 4.45405606270477, + 12.472344331171586, + 8.318269931937952, + 1.4833049151821112, + 4.302094614956442, + 1.5877433307162794, + 4.387087967708836, + 4.4412583112567265, + 7.437874397398127, + 7.850097225236065, + 5.295332707577285, + 9.2051305945959, + 0.001468831927921587, + 1.2114660285151224, + 0.6053272106303366, + 0.9207522710536465, + 5.861833607837806, + 10.626786647842508, + 0.14266352914018487, + 0.6378104204762213, + 8.795889911158593, + 1.7129046848426701, + 0.8749431731218046, + 0.7594311419536482, + 4.247694045558492, + 10.993496695431446, + 5.994185104668445 + ] + }, + { + "boxpoints": false, + "line": { + "width": 1.3 + }, + "marker": { + "color": "rgba(219, 64, 82, 1.0)" + }, + "name": "MKO.ZU", + "type": "box", + "y": [ + 6.947682262739825, + 3.1055501057751074, + 2.2764712562000056, + 0.3414153565494042, + 5.2614694937608055, + 10.884425165751335, + 2.9149922652061226, + 7.528969707414462, + 0.6088086186025806, + 1.1876311658711534, + 17.104524692964688, + 2.9868232294254096, + 5.995594358247614, + 10.151109943744569, + 2.6058421001759324, + 4.345097408428355, + 0.7353575155951944, + 6.775195207983937, + 7.299115473392743, + 12.46946680795296, + 5.471967381793617, + 5.8031580419434565, + 14.902823820735966, + 1.8039240833050643, + 7.120851974854004, + 5.996912749864835, + 6.630193828093617, + 1.52071007471787, + 10.050049732007068, + 1.6959074089201647, + 5.194617235795845, + 8.148438282411078, + 4.419963097944322, + 5.5199587091173825, + 13.705168389944587, + 9.237789697062972, + 0.7050895053345119, + 3.756219209811439, + 16.10943804200269, + 5.242783453375953, + 10.673037554675618, + 9.366123235316683, + 13.598927278889745, + 7.679514572590916, + 1.7007709052725837, + 6.557058589233982, + 5.477791083007252, + 12.889169922617322, + 14.264913843461468, + 4.186963094519424, + 6.455530921367157, + 5.038892178555961, + 1.5114638744769378, + 0.7299608516218069, + 3.6101702215404483, + 2.652591621299866, + 10.827107142655835, + 4.377738380994623, + 7.987922292448283, + 1.985047526327466, + 2.210326291305804, + 1.1596110394831403, + 13.689233221776265, + 2.817970568405427, + 4.385362268626597, + 2.4491329417409125, + 15.863463081499754, + 2.407378002102045, + 7.21146712061288, + 8.28542287637032, + 9.681812623821907, + 5.740193661773882, + 1.6216079904556489, + 2.0270836387356757, + 5.511538399325615, + 11.64671399158058, + 5.206943770742412, + 3.93861833534801, + 1.1358927645537447, + 1.1324188376027222, + 0.44930096740210623, + 10.111685675484834, + 6.152787062228904, + 11.476396998690575, + 9.513173843488783, + 0.40637772050280274, + 0.9096955120757662, + 2.6765685971408817, + 0.6956060920490573, + 2.6348026341931674, + 12.125244898960174, + 3.7954331947750743, + 9.648354901778085, + 6.120984661758546, + 0.16896124980518154, + 1.8637562486380221, + 1.6245694627706064, + 8.071226190521664, + 8.470972743742054, + 9.113112287091687 + ] + }, + { + "boxpoints": false, + "line": { + "width": 1.3 + }, + "marker": { + "color": "rgba(0, 128, 128, 1.0)" + }, + "name": "RHO.GF", + "type": "box", + "y": [ + 10.948285635326497, + 9.73592706205157, + 3.3756539219751978, + 18.852201475776862, + 6.238848074124985, + 10.036882333182689, + 12.266037403147177, + 2.276953911217198, + 0.38155931005641147, + 0.007806793224398037, + 5.957148305623973, + 3.9096847454640664, + 3.8904625195691476, + 3.523787051948241, + 1.7077457709377721, + 2.9492204064605967, + 1.6173466222558655, + 7.034563312269593, + 1.152392431648657, + 8.569455558769882, + 3.208422237746677, + 10.530796487450662, + 5.046199896029795, + 6.597904609868298, + 0.7492936775892973, + 2.6477423908658353, + 7.391071489407445, + 2.2258007378886857, + 6.341641449243008, + 4.718565621192609, + 4.339235651812498, + 12.067619405859848, + 1.5667769338684487, + 3.4396618913556622, + 10.83415254048773, + 10.094105353749775, + 0.2880522150962791, + 4.424010440854721, + 17.47474366833367, + 11.702671463818229, + 13.573527153109053, + 6.45404351329952, + 5.46534782086235, + 4.577830870516267, + 1.4609873346448732, + 10.322167771889632, + 1.577459343449576, + 4.81162945441893, + 6.456840276370102, + 12.386237016915427, + 2.1355611106152708, + 0.6700470922911019, + 3.092149886253763, + 5.4844637133912, + 0.5972324405255028, + 14.004417323493646, + 6.28611988640808, + 5.284910344355131, + 3.1283811264489176, + 2.8031667497171635, + 2.0125002591851056, + 2.0990014447007614, + 10.835394495932505, + 7.690248417214966, + 10.220622536981, + 7.357945110098779, + 3.9187900413706704, + 0.14553913635735408, + 2.126258040269707, + 3.315976878006757, + 7.578412132806715, + 9.297533703807234, + 4.918204270359174, + 0.4433319215441844, + 11.998603340257171, + 6.643152619662924, + 2.8772595071964715, + 6.68108885084697, + 0.45754777669527436, + 1.325474367301677, + 9.11676085681822, + 15.851401430245291, + 12.704645553324795, + 8.90656098162706, + 9.618045585496303, + 5.571124077714383, + 0.21567394251667726, + 2.735018097524949, + 2.948581820872688, + 10.148540152691355, + 5.325187097626318, + 2.5349192844475024, + 6.990171607461981, + 4.637297199102951, + 1.6644537601866527, + 2.623571204037307, + 2.7965184135368126, + 4.6311892955092775, + 2.564156038343073, + 6.322101470076705 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Box Plot", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Stocks", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Returns Distribution", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 13, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -292,28 +5580,1102 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Historgram" + "## Histogram" ] }, { "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, + "execution_count": 13, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "histfunc": "count", + "histnorm": "", + "marker": { + "color": "rgba(255, 153, 51, 1.0)", + "line": { + "color": "#4D5663", + "width": 1.3 + } + }, + "name": "OJP.VH", + "opacity": 0.75, + "orientation": "v", + "type": "histogram", + "x": [ + -2.1756889534931707, + -1.2341046056088751, + -2.141600510670138, + -1.756850284005995, + -2.9682703509488526, + 0.6677352609884681, + -2.922539837222079, + -1.1795312895601213, + -1.8754703307271292, + -1.7070657426465992, + -2.222946615617092, + -2.38797494934537, + -1.2431029220480903, + -1.3336062300422458, + -0.6495055956094191, + -1.0088803786852163, + -1.7161851872571008, + -2.0585338967934006, + -1.8389194796125554, + -1.4786504977060515, + -2.6352973356994998, + -1.5529331697504314, + -2.812223776173191, + -3.997778911243591, + -1.211077382888059, + -1.5160012887444116, + -2.014829304798885, + -1.3996263185259776, + -3.0815205162569512, + -2.1304590629130846, + -0.6356713469420774, + -5.480247381307443, + -3.993357132008062, + -2.0425758464709616, + -3.5295184049573765, + -2.6590999232910737, + -3.3805190466948973, + -1.9344875062302613, + -1.868871734456109, + -2.262228634301354, + -0.04939090969204396, + -3.2507044861460175, + -2.5112286997960447, + -1.5232985613083867, + -3.5067798596775512, + -2.5784261748851773, + -2.211736493561916, + -1.0791232691243668, + -2.46042576329447, + -2.786230095054055, + -0.6282254560886595, + -3.689839395552828, + 0.2917173028072977, + -2.0910083526881533, + -2.9332347524868623, + -1.3599637673234812, + -1.105825786065967, + -0.8774053532250787, + -2.6584481883956137, + -1.8022590731597639, + -2.4753368620767673, + -2.9721997450118187, + -2.3117203423505153, + -2.8160867629285296, + -1.3741886516493822, + -2.2683645581024527, + -1.777895140469151, + -2.8942835729785417, + -2.9719220198029146, + -1.1155041952328815, + -0.6444701950010838, + -0.5025895860934533, + -2.031817192469006, + -2.3484169941963544, + -1.6167076635733846, + -2.400748195625856, + -2.3864842571652014, + -0.5435135162453206, + -3.053206789298074, + -1.9848988351112882, + -1.9530985084532169, + -3.326947236427668, + -3.0424121803009143, + -2.7401548272142344, + -1.3554867848532197, + -1.506953483398112, + -3.8134044703216894, + -2.171633645350518, + -0.7118904597346949, + -1.5943510730602348, + -1.0486231190741329, + -0.5931793044858504, + -3.754052729704161, + -4.202921176819711, + -1.9940117065877108, + -1.211669036967718, + -1.8990403683374493, + -2.984871736332607, + -0.10994054827327915, + -1.274373521686421, + -2.766838912971856, + -4.049646633438877, + -1.6559406115315056, + -2.1573173872123, + -2.687457533642533, + -1.9071247451703295, + -3.4862136886746415, + -1.6365720662304701, + -1.2471058616248856, + -3.507158503511114, + -1.9174194700526308, + -2.952164107792498, + -2.157155214937521, + -0.012811048782063184, + -2.3543095800525573, + -1.8020135777941684, + -1.375425004676949, + -2.081776705101933, + -2.074638979492526, + -1.7584850300184, + -2.1873866427907154, + -0.708716300894489, + -2.247029337480899, + -1.9250139277173057, + -1.4993482158923288, + -2.3266438302931673, + -2.039325491109475, + -2.0516474499488124, + -2.4190013539293433, + -2.050734346779194, + -1.1265014132394413, + -1.871926250124936, + -2.4094696903267705, + -0.5814487492084879, + -2.2034251992551073, + -1.0707560876078612, + -1.8709507696463528, + -2.683868368156272, + -1.7748430330873026, + -2.6763961765608784, + -0.43731649009825846, + -2.6268252001032972, + -0.3883715635606819, + -1.5370165320624367, + -1.4263487113879956, + -4.159981666059112, + -1.9668995399195701, + -2.877234762221601, + -1.9197114309489482, + -1.08910575015157, + -2.424106656749256, + -3.482672330034317, + -2.202988517533952, + -1.109473025922005, + -1.3443004607390667, + -0.8749004891840528, + -0.3523322923279566, + -1.2128353585896046, + -1.682713293539678, + -1.0922089567369, + -2.5228962900215914, + -1.9875192731661426, + -1.5491858769618116, + -1.789172614203642, + -1.5016812966974924, + -2.918941094269332, + -1.862129823144528, + -1.9432830502053706, + -2.548616904429058, + -2.4542859542176996, + -0.7847008060771712, + -3.5899324515376416, + -2.1222860883819865, + -0.5720160857174208, + -0.8149617203276938, + -2.422965700604174, + -2.2660518009069253, + -3.3930207941145705, + -2.216113295336693, + -1.6938111685468151, + -2.0121902362856923, + -1.188724830466707, + -0.49250938871898775, + -2.457460534927801, + -2.688919489316016, + -2.372448422766114, + -1.1520876656311185, + -1.0762864912782535, + -2.281012562861981, + 0.28427712124789295, + -0.8419812220558271, + -2.8926005006626916, + -1.956291287752817, + -2.6999177362151063, + -2.209580893097745, + -1.370302499311045, + 0.08262147520071395, + -2.4249298020210475, + -0.2929983537113612, + -1.3401306876183305, + -3.0938008910456416, + -2.658591442423284, + -2.7562898914114196, + -2.3243038595726437, + -1.6972149388609372, + -2.071143219112065, + -2.5410189080220915, + -1.8772639572100327, + -2.2794534898883483, + -4.17401008183668, + -2.6097365185629533, + -0.8083969478477417, + -1.556203587834414, + -2.7822949024081316, + -0.33656078543604884, + -2.695859704946575, + -2.919273364234753, + -2.571691067166243, + -2.0710857874662914, + -3.586565300521843, + -0.5260641211524368, + -3.1712812724852997, + -1.9346924356572122, + -2.1738248440933323, + -2.880047677505601, + -2.921689403576219, + -1.8932991911601613, + -2.1894845866815293, + -2.2267890722603503, + -0.775090703804856, + -0.11686465728381434, + -2.9165544146381643, + -3.6808608677616155, + -2.2251960062620832, + -3.830181313373958, + 0.155171636231207, + -1.9088675251793528, + -2.7317987456158455, + -2.877755461549092, + -2.067319356292096, + 0.18903743006449325, + -2.534330739969762, + -1.850677305623314, + -0.8007332085277823, + -2.8848132968850253, + -3.118907338702821, + -2.65662871472686, + -1.4925882818544305, + -1.3819919914125025, + -0.7219806683838721, + -2.1448779937868307, + -1.5150729649720593, + -2.7163171748655097, + -2.2661345416296954, + -0.8408289493573988, + -2.4939650046921336, + -2.4844496098215645, + -3.5482944521663446, + -2.46511185018659, + -2.4610013914649027, + -1.1772480967558598, + -3.288867237262882, + -1.0198793008174292, + -4.0682565692859285, + -2.9923645870122453, + -1.7755474197162282, + -1.5273795761509352, + -2.2562350817237484, + -1.6650699015768857, + -1.1746453467436506, + 0.6562438415702778, + -1.866700307172234, + -1.3054303587151934, + -1.4181377822696084, + -2.5399989849481246, + -3.4228722550643798, + -3.3882222416491574, + -0.4452596394968029, + -2.210067319535629, + -2.5430284133097274, + -1.6485164607363019, + -2.617854360154596, + -1.4539672365979093, + -0.8806836540803085, + -1.5914911632060438, + -3.0338839703297857, + -1.919281629494709, + -2.8804122459867285, + -2.3046215165623605, + -1.3963194776488845, + -2.831873544905734, + -1.6541579304015928, + -1.7626476011371037, + -2.2623381719982896, + -1.9282403667559485, + -4.130084801621816, + -2.2784827358503477, + -2.587575067091017, + -2.162072138696733, + -2.35720197004048, + -1.5818955445854308, + -1.351362819448561, + -0.5872011646574717, + -1.8108652719626765, + -3.8450963004629637, + -2.974695894824292, + -2.981906655704333, + -2.6643979115881473, + -2.380822326617844, + -2.9290838260880103, + -1.7073743857856707, + -0.9059058949414158, + -2.0650479506803356, + -2.8286178139182665, + -1.1499413405880539, + -1.3731635432413172, + -0.9856141703735535, + -2.0558653698437777, + -2.6269923693377013, + -1.3729220658916588, + -0.8803413454929678, + -2.181190105079693, + -2.745646819827556, + -2.1774038271736256, + -2.693369792129377, + -1.7701616791027683, + -3.323172672268278, + -2.3529424251917357, + -2.2113051143846865, + -2.703421979020154, + -1.802859767622491, + -1.718727821113407, + -1.4576075801451664, + -1.2106638081378969, + -3.1161756080613805, + -3.326145168435035, + -3.5014393681284393, + -0.8380844133449588, + 0.0932809565121051, + -0.7683630715899865, + -1.106250704279618, + -2.0396879164892376, + -1.5581456588713554, + -2.4850024609459935, + -3.1938897776619157, + -0.7258069131362703, + -2.9705845695297457, + -2.794355096395968, + -0.8891761902608435, + -3.069718649165061, + -2.8938489810818555, + -1.0689303263478545, + -0.7265152197645901, + -2.7464895812999197, + -1.0339959128004503, + -2.6594574775167863, + -3.6075555924342244, + -2.004177724002244, + -2.0073012364009024, + -2.866611181303023, + -3.4972098035799815, + -2.692660501967433, + -1.6076577608214295, + -2.2372141206369225, + -2.19953567961092, + -1.714056290822883, + -2.901964077319844, + -2.7353136094156216, + -1.9335040522193596, + -0.8784935729046772, + -1.8933364485542434, + -1.7661549945595527, + -2.2670748011969675, + -1.9564765646807867, + -2.9303286920557197, + -2.1300502099123033, + -3.187898806043048, + -1.4011427496039826, + -1.9363859603982443, + -2.2282370157907194, + -2.1839090760364757, + -1.9778376038838854, + -2.8434775092847278, + -2.055896396180002, + -1.4891886948591195, + -1.8420723692579006, + -1.112678068002592, + -2.542695092122838, + -2.580612588120536, + -1.3398563760158404, + -2.4786301680119482, + -3.08413678695843, + -2.4515343692827445, + -2.0080887390658626, + -2.8626522370659093, + -1.4954795010830715, + 0.07224653218940214, + -2.971582211403553, + -1.193992847435208, + -1.6604145568994366, + -3.3402410926192045, + -2.5984022182105666, + -2.6813911600441007, + -0.19692125922861248, + -2.5370066997292144, + -0.9723145391615551, + -1.1046533402893828, + -1.2605399960444426, + -2.3479208206971918, + -1.3890097034919973, + -1.788149602401188, + -2.4147016049453454, + -2.4491653556960102, + -3.340027190661588, + -1.6559111891956282, + -2.9894800664864505, + -2.3571969539339808, + -1.7406455469563638, + -1.5977627399872778, + -0.8870722793715802, + -2.172211452820033, + -1.830210454285017, + -1.3126966610032482, + -2.4259821788068603, + -1.6963487447539591, + 0.9465688671745176, + -0.2648622912801788, + -1.4908705879996207, + -2.4945107538897715, + -0.7289808765970536, + -1.849283719105618, + -1.021011135885399, + -1.3842954444654132, + -1.4427416780288156, + -2.6048723928531805, + -2.191531263571762, + -2.2489993876548895, + -0.575250745361402, + -2.9664441684005873, + -1.1718822677653247, + -4.79631357742819, + -4.211509182236158, + -1.5872364647821846, + -2.248736898601999, + -1.6008024257491753, + -1.6803550746752414, + -1.8575415149738048, + 0.6350671853374839, + -2.793772588946295, + -2.6565097239378956, + -2.135516907334359, + -0.3802458667276043, + -1.574718202477895, + -0.752475514997152, + -2.439268567877333, + -4.36687646140139, + -0.7155260688552614, + -1.7824317955791487, + -1.4810937167865932, + -1.3400662857805636, + -3.7080700455085647, + 0.13998593384308533, + -2.295362249641389, + -1.491656447348121, + -4.233601013336112, + -1.4093202784278305, + -0.726063897762796, + -0.7067902069354881, + -2.001203382010208, + -2.055462557634184, + -1.6815656551607119, + -2.413841794315552, + -1.8425546098080585, + -1.6726072890339585, + -2.382077054478862, + -2.5411964211886855, + -3.8425223916250175, + -2.7628997483250632, + -2.2747500063578934, + -1.366983815858036, + -3.1650790745344066, + -1.5644562041566845, + -1.9048009452841363, + 0.2182931123568861, + -2.014997446798373, + -1.5461051586268102, + -2.498595242465741, + -3.7829746434374507, + -2.1082665529437685, + -0.719967859053378, + -3.1234857990278244, + -1.0992571309489214, + -2.4427816523636, + -2.0512183575086373, + -2.2609182620736816, + -3.7320792931592712, + -0.9228570428212539, + -2.8131656620739323, + -1.9068151232071324, + -3.6910549803830612 + ] + }, + { + "histfunc": "count", + "histnorm": "", + "marker": { + "color": "rgba(55, 128, 191, 1.0)", + "line": { + "color": "#4D5663", + "width": 1.3 + } + }, + "name": "LTP.US", + "opacity": 0.75, + "orientation": "v", + "type": "histogram", + "x": [ + -0.8417754066066385, + -1.2413249997526299, + -1.8679631698256163, + 1.2173269091598917, + 0.591124893872623, + -0.35917748935481963, + -2.8273656646294554, + -0.2538225679331336, + -1.3015458357830139, + -0.7072236078263228, + -0.6980840223150189, + -0.192651144724873, + -1.9143379721379419, + -1.2237972058918234, + -0.6185173923828982, + -1.9443183874651264, + 1.1263605022265293, + -1.0505858792434357, + 1.3815795472454502, + -3.1577711399181014, + -1.0608287675581323, + -0.6912969086996426, + -1.6426619794793917, + -0.2999189938424589, + -0.7396469511081933, + -2.045117128933323, + -1.6227451110364401, + -0.9406510736101531, + -0.8603019679310443, + -0.4498271412279444, + -0.6288224078865146, + -0.5098666724245609, + 0.14443177855870237, + -0.24472625490670552, + -1.306265590744593, + -0.0562046132845877, + -1.5004579867534722, + -0.41385342759818544, + -1.4914397926287015, + -0.053853245384084536, + -0.6037376673950476, + -0.5787283099206717, + -0.9816573612891597, + -0.34647628245140494, + -1.3267782590349844, + -2.3383131735511626, + -1.1292216417957393, + -1.1272030612751052, + -0.8999598700984356, + -1.750297204349117, + -2.3930938196684517, + 0.24532604615835862, + -0.33968075302420686, + -0.3009342660663181, + -1.5390057361187455, + -1.4511076307374862, + -2.3597075612981526, + -0.5584485433966024, + 0.0276874884961007, + -0.9939428095090098, + -3.0324553388101103, + -1.4938565447038734, + -0.9635323208427196, + -1.2643074200240654, + -0.15258520472848058, + -1.1582967567387348, + -0.9285183551935001, + -1.5931422017765415, + -1.5844846033331454, + -0.4617623693188043, + -0.8137133053526165, + 0.24586150192400602, + -0.45020903395389056, + -2.3581878729684145, + -1.7941973747785447, + -1.1238032679948888, + -0.057630672288708995, + 0.2782261829517656, + -1.0154077152008567, + -1.465056697556574, + -1.9612109923534775, + -1.914173034571211, + -1.175738291625334, + -1.0432596021860652, + -0.8974320831320004, + -0.8094776215268072, + -1.0911938462542825, + -1.5424197937841944, + -0.5326664422138416, + -1.6042697784033937, + -0.40048588225328874, + -1.072022178139564, + -0.3195132019121534, + -1.3111116472770943, + -0.9088253623329015, + -1.8888362496052604, + -1.24641209412529, + -0.43108561972264403, + -1.381866672719962, + -0.2115542062357907, + -0.3574245042927501, + -1.2297137066372352, + -0.4294523497434213, + 1.2993129064715863, + -0.30319483363024125, + -0.3935639564013905, + -0.47697163622875305, + -0.2689304440270175, + 0.22016055967927128, + -0.46979189072506367, + -1.7888236311855814, + -0.8884009060773692, + -1.8706330107851197, + -2.446202307137467, + -0.5044341433161967, + -1.4697132124366115, + 0.6892588828434725, + -0.41685652000051454, + -2.1310393330034656, + -0.7365019992459332, + -1.802492384919426, + -1.0571189518616018, + -1.3859674073768764, + -2.07854850625269, + 1.3918496201696136, + -1.664548183095652, + -0.5209615843492876, + 0.9878773902146525, + -0.26991731318812084, + -3.398982803146444, + -1.7765458311924751, + -1.238299454807006, + -1.4782635010863046, + -0.5505797284666016, + -0.9698172735404139, + -0.10779857006098137, + -0.4906671465725465, + -1.1955331288578077, + 1.4901675515364197, + -0.4278688532583015, + -1.3778844984871341, + -0.7394032186478685, + -2.393974444313732, + -0.23954564482498253, + -1.0985916356991983, + -1.7015632201477837, + -0.4401872843724546, + -1.659735257635142, + -1.259486705839124, + -1.2428140784404547, + -1.57227146852669, + -1.7684242754911026, + -1.0809194365691315, + -2.0520966474969877, + -1.0114082618208486, + -1.1734373804667166, + -0.4979112169894364, + 0.013605116200177347, + 0.23544881453045918, + -1.2263886886882298, + -3.2093269751276003, + -0.4716278673214822, + 0.11436676467856621, + -1.7042250000754864, + -1.2487552920272917, + 0.4440019296799209, + -1.2826570173445866, + -2.5878746960101346, + 0.16317363058388867, + -0.3109607813192734, + -2.8943138094869933, + 0.5748801764543661, + -1.9238556568176928, + -2.3906227883422013, + 1.0795281057944077, + -0.5079392180642939, + -2.8971383749731787, + -0.8257751565822321, + -1.3268835414228657, + -1.1336050469330015, + -1.0819508834283182, + -2.6457544152735646, + -1.984846589425385, + -0.8221764783661538, + -0.5808972218132606, + -0.8974327786299515, + -0.48530610239526195, + -2.684038651149842, + -0.8315549348058027, + -1.5328895045936395, + -0.861072314038001, + -0.6956935484545966, + -0.3061081618696744, + -0.8638573424366531, + -0.24622654280643774, + -0.36404014432105936, + -2.620271147820267, + -1.1719239537553676, + -2.2324509299129547, + -1.0628587878425129, + 0.7718859983820208, + -0.4554241861412405, + -1.3711466902636384, + 0.5742061134235463, + -2.595490432478184, + -1.062311895245827, + -0.5327616417956311, + 0.49367440619427905, + -1.1789244343200995, + -1.3440843419609696, + -2.502387392025317, + 0.8210680250171889, + -1.1168129918006158, + -0.5564818232850044, + -1.296633487108745, + -1.59628218733967, + 0.7273006584109558, + -0.5034750776843349, + 0.8760177764715165, + 0.7640943953190569, + -1.1624317357240685, + -0.9021672538256358, + -1.484315049506923, + -0.3913300724007719, + 0.8112162404003915, + -2.4790574859457513, + 0.06600766809504166, + -1.9132378252990716, + -0.6592646554728644, + -0.898811686236176, + -1.0672409664363067, + -1.5998070808241192, + -1.0383543671475683, + 0.7520653340527146, + -1.3786826214896983, + -0.04675776277332799, + -1.347703730839628, + -1.0995790809785009, + -1.4094273035376856, + -0.38148764042040484, + -3.919045028758786, + -1.4295055999587905, + -0.6494035975945764, + 0.1697579558230311, + -1.7902868281057676, + -1.4234518156593747, + -2.0064315018583585, + -3.1016444549082336, + -1.6807907635523764, + -1.1282801683724237, + -0.6249339816875101, + 1.1815978830405252, + -1.8323448128597164, + -0.08012964967258784, + -1.5246439928815327, + -0.8273443986275337, + -1.5739549902904595, + -1.8703676839626127, + -1.9097782438182171, + -1.2871861336885488, + -1.6334597098433556, + -1.3909588499264907, + -2.229149895870774, + -1.189009402414496, + -1.258548806236766, + -0.34453573848774544, + -0.7348062351516568, + -0.9668124605572916, + -2.232625331039687, + -0.0036713434980384374, + -1.8553968860683576, + 1.7445805184128886, + -1.8821044568280505, + -0.181345439871759, + -0.27907837892405307, + -1.8706649928387258, + -0.937498725415359, + -2.8804238912349884, + -1.2246590537373911, + -2.9007513057881456, + -2.182586282556459, + -0.7863201703519962, + -1.2765693104425102, + 0.7607910436230962, + -0.8112172247072305, + -0.463349224491133, + -3.2266608364520644, + -0.6710411672532915, + 0.29120434229574244, + -1.6849529550211655, + -1.2319454244702166, + -0.6833412337941037, + -1.4476031663711761, + -1.4557013796953098, + -2.2497810622547165, + -1.45380015920148, + -0.6212930272597532, + -2.263944779506887, + -0.9863289992677575, + -2.802413846829634, + -2.0545933217613213, + -0.6679878134342707, + -0.06926799924019744, + -1.1189732287052958, + -3.0547068386106586, + -0.3416699858472102, + -1.958234737572763, + -1.503176250909799, + -0.5126035518225767, + -1.8919256268491098, + -1.1803472603394136, + 0.7604803221547058, + -4.15613506681548, + 0.5271345329567776, + -1.0733995486332586, + 0.1937291808384709, + -1.2329725109967502, + -1.7519379372012707, + -1.01316263855178, + -0.33367890905918784, + -0.3202610526973012, + -1.8263077013959326, + -0.8481844797164086, + -1.8366868397643614, + 0.28898679189556487, + -0.5595921708269819, + -0.6688551070865592, + -0.8333302803234287, + -1.3648480473095317, + -2.968195022645888, + 0.0028792635641861075, + -1.502052288333529, + -0.9513090082232986, + -2.9485139465476946, + -1.0604305520531867, + -1.6902487238079593, + -1.4822339351833695, + -1.532699553831477, + -1.7924122337876218, + -1.2200556950590944, + 0.2735576871837797, + 0.21158690521079304, + 0.7940098654609193, + -0.7235927522990024, + -1.4956500291691215, + -0.45117666601272943, + -2.0731911884716387, + -0.18607734470114956, + 1.0653042040785299, + -2.2693013388267467, + -0.6077774145127381, + -1.1134015545679683, + -1.400344330871139, + -0.8102418963227511, + -0.2626205975862401, + 1.1281326140067423, + -2.0876128383399664, + -0.46538562938835404, + -1.2908284321120078, + -0.010109505598683177, + -2.396488870605313, + -1.724919144557071, + -1.878461493732499, + -1.174821683906547, + -0.7608277603256264, + -0.39395067949209095, + 0.2244288751546546, + -2.2156404257256836, + -1.0699501411409693, + -1.0070120098770883, + -2.02421493406663, + -0.04055646865812268, + -1.2903863756695741, + -0.6013797193693403, + -0.6614639209524852, + -1.3564006339163828, + -2.556684524367266, + -2.5099310374324526, + -2.169419476402792, + -1.6518457420387738, + -1.3660768470324447, + -0.7285513390704075, + -1.6249604245717229, + 0.14652803165988804, + 0.02485881512908339, + -0.897373201297588, + 1.26640020738673, + -1.0809697280627328, + -0.24359170266591013, + 0.3766215387407801, + -1.725063087912868, + -1.2985820118706146, + -0.16412843594356974, + -1.2446239495297429, + -2.035610471038468, + -0.569959079203511, + 0.4039950174163338, + -0.5109360607922899, + 0.05366116260856901, + -2.3361659463667115, + -1.6051982402748934, + 0.24164990120672436, + -1.0824512343036452, + -1.7216932453596854, + -0.7184215231566178, + -1.341447904608974, + -0.9838908509977838, + 0.5959833437135935, + -2.5013084348840495, + 1.1017515225658299, + 1.3896778447494942, + 1.8549347528475075, + -1.4114561294702, + -1.2610935777115642, + -0.6498537227586163, + 0.6258481212143214, + -2.6700714682600744, + -0.6946215295060134, + -1.026857076366261, + 1.0260288046586674, + -0.8231842053154558, + 0.4723301470392267, + -0.4527073898689653, + -0.12209193127859608, + 0.4960818078972764, + -1.784823595539836, + -0.284152104648593, + -0.5950643590151696, + 1.6413257487537707, + -1.7086054781046291, + -0.6070891592947858, + -1.653361110381041, + -2.5461384333915626, + -1.2510172293781952, + -0.7262905725534525, + -0.8271792940744445, + -1.0856424595675878, + -1.6493576551938554, + -0.5923262957601169, + -0.7068585062345629, + -1.130388183145459, + -1.342890503299328, + -2.115166250005669, + -2.1497096736788386, + 0.26961648556469275, + -0.23610435028895027, + -1.9276658789194414, + -1.591712850664802, + -1.2739354716089484, + -1.772129352637331, + 0.5574014006428054, + -0.586839724017498, + -0.05112263536230455, + 0.08335055456767204, + -2.120180784403378, + -0.9481312451398638, + 0.1875975617706851, + -1.2807702444042137, + -0.6364749854041614, + 0.7508765399572792, + -2.1089941543058375, + -1.5579629617848787, + -2.074519431072084, + -0.8478085302216862, + 0.7425987508123588, + -1.4596547283138768, + 0.08873565065710687, + -1.5733591069753436, + -1.0487058502905406, + -0.7587937797857044, + -0.7101706402518975, + 0.6911812101111701, + -0.02948281956664267, + -2.7284364858393357, + -0.19561169797414157, + -0.3513550161380593, + -0.13915711891974614, + -1.7524822579436132, + -1.5970005567270975, + -1.0484360859527293, + 0.2146806424536054, + -1.1979443269527892, + -1.8527796260469622, + -1.6901649976748754, + -1.4945314428361205, + -1.8461020848706866, + -0.9882821894176866, + -1.5375929114521951, + 1.718328692666669, + -0.5404036282368434, + -3.2022799893127583, + -2.145296713774279, + -0.6866421999415027, + -1.016401974259824, + 0.34802186622678155, + -0.18312572243779635, + 0.6062358897763578, + 0.3122363522982363, + 0.4502600644620416, + 1.0649140694179566 + ] + } + ], + "layout": { + "barmode": "overlay", + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Histogram", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 14, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -324,28 +6686,5885 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Heatmap Plot" + "## Violin Plot" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "fill": "tonextx", + "fillcolor": "rgb(31, 119, 180)", + "hoverinfo": "text", + "line": { + "color": "rgb(0, 0, 0)", + "shape": "spline", + "width": 0.5 + }, + "mode": "lines", + "name": "", + "opacity": 0.5, + "text": [ + "(pdf(y), y)=(-0.01, -1.80)", + "(pdf(y), y)=(-0.01, -1.74)", + "(pdf(y), y)=(-0.02, -1.69)", + "(pdf(y), y)=(-0.02, -1.63)", + "(pdf(y), y)=(-0.02, -1.57)", + "(pdf(y), y)=(-0.03, -1.51)", + "(pdf(y), y)=(-0.03, -1.45)", + "(pdf(y), y)=(-0.03, -1.39)", + "(pdf(y), y)=(-0.04, -1.34)", + "(pdf(y), y)=(-0.04, -1.28)", + "(pdf(y), y)=(-0.05, -1.22)", + "(pdf(y), y)=(-0.05, -1.16)", + "(pdf(y), y)=(-0.06, -1.10)", + "(pdf(y), y)=(-0.06, -1.05)", + "(pdf(y), y)=(-0.07, -0.99)", + "(pdf(y), y)=(-0.07, -0.93)", + "(pdf(y), y)=(-0.08, -0.87)", + "(pdf(y), y)=(-0.09, -0.81)", + "(pdf(y), y)=(-0.10, -0.76)", + "(pdf(y), y)=(-0.11, -0.70)", + "(pdf(y), y)=(-0.12, -0.64)", + "(pdf(y), y)=(-0.13, -0.58)", + "(pdf(y), y)=(-0.14, -0.52)", + "(pdf(y), y)=(-0.15, -0.47)", + "(pdf(y), y)=(-0.16, -0.41)", + "(pdf(y), y)=(-0.17, -0.35)", + "(pdf(y), y)=(-0.18, -0.29)", + "(pdf(y), y)=(-0.19, -0.23)", + "(pdf(y), y)=(-0.20, -0.18)", + "(pdf(y), y)=(-0.21, -0.12)", + "(pdf(y), y)=(-0.23, -0.06)", + "(pdf(y), y)=(-0.24, -0.00)", + "(pdf(y), y)=(-0.25, 0.06)", + "(pdf(y), y)=(-0.26, 0.11)", + "(pdf(y), y)=(-0.27, 0.17)", + "(pdf(y), y)=(-0.28, 0.23)", + "(pdf(y), y)=(-0.29, 0.29)", + "(pdf(y), y)=(-0.30, 0.35)", + "(pdf(y), y)=(-0.31, 0.41)", + "(pdf(y), y)=(-0.32, 0.46)", + "(pdf(y), y)=(-0.33, 0.52)", + "(pdf(y), y)=(-0.34, 0.58)", + "(pdf(y), y)=(-0.35, 0.64)", + "(pdf(y), y)=(-0.36, 0.70)", + "(pdf(y), y)=(-0.36, 0.75)", + "(pdf(y), y)=(-0.37, 0.81)", + "(pdf(y), y)=(-0.37, 0.87)", + "(pdf(y), y)=(-0.38, 0.93)", + "(pdf(y), y)=(-0.38, 0.99)", + "(pdf(y), y)=(-0.38, 1.04)", + "(pdf(y), y)=(-0.38, 1.10)", + "(pdf(y), y)=(-0.38, 1.16)", + "(pdf(y), y)=(-0.38, 1.22)", + "(pdf(y), y)=(-0.38, 1.28)", + "(pdf(y), y)=(-0.38, 1.33)", + "(pdf(y), y)=(-0.37, 1.39)", + "(pdf(y), y)=(-0.37, 1.45)", + "(pdf(y), y)=(-0.36, 1.51)", + "(pdf(y), y)=(-0.35, 1.57)", + "(pdf(y), y)=(-0.34, 1.62)", + "(pdf(y), y)=(-0.33, 1.68)", + "(pdf(y), y)=(-0.31, 1.74)", + "(pdf(y), y)=(-0.30, 1.80)", + "(pdf(y), y)=(-0.28, 1.86)", + "(pdf(y), y)=(-0.26, 1.91)", + "(pdf(y), y)=(-0.25, 1.97)", + "(pdf(y), y)=(-0.23, 2.03)", + "(pdf(y), y)=(-0.21, 2.09)", + "(pdf(y), y)=(-0.20, 2.15)", + "(pdf(y), y)=(-0.19, 2.21)", + "(pdf(y), y)=(-0.17, 2.26)", + "(pdf(y), y)=(-0.16, 2.32)", + "(pdf(y), y)=(-0.15, 2.38)", + "(pdf(y), y)=(-0.14, 2.44)", + "(pdf(y), y)=(-0.13, 2.50)", + "(pdf(y), y)=(-0.12, 2.55)", + "(pdf(y), y)=(-0.11, 2.61)", + "(pdf(y), y)=(-0.10, 2.67)", + "(pdf(y), y)=(-0.09, 2.73)", + "(pdf(y), y)=(-0.08, 2.79)", + "(pdf(y), y)=(-0.08, 2.84)", + "(pdf(y), y)=(-0.07, 2.90)", + "(pdf(y), y)=(-0.06, 2.96)", + "(pdf(y), y)=(-0.06, 3.02)", + "(pdf(y), y)=(-0.05, 3.08)", + "(pdf(y), y)=(-0.04, 3.13)", + "(pdf(y), y)=(-0.04, 3.19)", + "(pdf(y), y)=(-0.04, 3.25)", + "(pdf(y), y)=(-0.03, 3.31)", + "(pdf(y), y)=(-0.03, 3.37)", + "(pdf(y), y)=(-0.02, 3.42)", + "(pdf(y), y)=(-0.02, 3.48)", + "(pdf(y), y)=(-0.02, 3.54)", + "(pdf(y), y)=(-0.02, 3.60)", + "(pdf(y), y)=(-0.01, 3.66)", + "(pdf(y), y)=(-0.01, 3.71)", + "(pdf(y), y)=(-0.01, 3.77)", + "(pdf(y), y)=(-0.01, 3.83)", + "(pdf(y), y)=(-0.01, 3.89)", + "(pdf(y), y)=(-0.01, 3.95)" + ], + "type": "scatter", + "x": [ + -0.010629807995709145, + -0.013169043207929445, + -0.016040139678762732, + -0.019210231751799388, + -0.022630167990742682, + -0.026242646753708788, + -0.02999380464956362, + -0.033845842290453544, + -0.037787761810442466, + -0.04184172343914205, + -0.04606373581632911, + -0.05053888489972917, + -0.0553724933546625, + -0.06067907640622848, + -0.06657066927634292, + -0.07314536482454348, + -0.08047625049831941, + -0.08860085249767892, + -0.09751184853790779, + -0.10715090752753087, + -0.11740837658523146, + -0.1281313947753629, + -0.13914143020944253, + -0.15025944306583103, + -0.16133381776608552, + -0.17226421037844045, + -0.18301463008583443, + -0.19361172288096248, + -0.2041286025337113, + -0.21465910376077002, + -0.22529024696056807, + -0.23608079537950682, + -0.24705095348267397, + -0.258183605952707, + -0.26943294359130615, + -0.28073382266692776, + -0.2920059137180765, + -0.30315038661814614, + -0.31404191175627805, + -0.32452270925413734, + -0.33440612852827456, + -0.34349404686259877, + -0.351606382768798, + -0.3586148588875694, + -0.3644697371630602, + -0.36920935780262687, + -0.372947655617949, + -0.3758421672869055, + -0.3780512929327493, + -0.37969229194388776, + -0.3808099837023024, + -0.3813616103134052, + -0.3812181409638974, + -0.3801786557760934, + -0.3779933653235666, + -0.37439183971405643, + -0.369114677195119, + -0.3619476109505641, + -0.3527562027927368, + -0.3415172196288007, + -0.3283408126065853, + -0.3134771433561588, + -0.2973029356474736, + -0.28028735203040717, + -0.2629414505021946, + -0.2457596967748828, + -0.22916424787630765, + -0.21346232549647373, + -0.19882412927879686, + -0.18528423087332102, + -0.17276441759099886, + -0.1611117162984247, + -0.1501427614500003, + -0.1396852571036418, + -0.12960895085918325, + -0.11984170680745578, + -0.11037002948996247, + -0.10122679928018546, + -0.09247129536707471, + -0.08416743880560758, + -0.07636560159729314, + -0.06909161694475957, + -0.06234429987335353, + -0.05610044168005279, + -0.05032445133397765, + -0.04497901097567623, + -0.0400334444095966, + -0.035467771037801576, + -0.03127213316034735, + -0.027442815312153635, + -0.023976912423289563, + -0.020867660102494905, + -0.018101699455360346, + -0.01565854890348305, + -0.01351176061849516, + -0.011630922304883832, + -0.009983811647506145, + -0.008538382075313851, + -0.007264562936656707, + -0.006135922754424271 + ], + "xaxis": "x1", + "y": [ + -1.8012289572801286, + -1.7431655548181237, + -1.685102152356119, + -1.6270387498941141, + -1.568975347432109, + -1.5109119449701043, + -1.4528485425080995, + -1.3947851400460947, + -1.3367217375840896, + -1.2786583351220848, + -1.22059493266008, + -1.1625315301980752, + -1.1044681277360704, + -1.0464047252740656, + -0.9883413228120607, + -0.9302779203500557, + -0.8722145178880509, + -0.8141511154260461, + -0.7560877129640413, + -0.6980243105020363, + -0.6399609080400315, + -0.5818975055780267, + -0.5238341031160219, + -0.46577070065401704, + -0.40770729819201224, + -0.3496438957300072, + -0.2915804932680024, + -0.23351709080599758, + -0.17545368834399278, + -0.11739028588198797, + -0.059326883419982934, + -0.0012634809579781248, + 0.056799921504026685, + 0.1148633239660315, + 0.1729267264280363, + 0.2309901288900411, + 0.2890535313520459, + 0.34711693381405073, + 0.405180336276056, + 0.4632437387380608, + 0.5213071412000656, + 0.5793705436620704, + 0.6374339461240752, + 0.69549734858608, + 0.7535607510480848, + 0.8116241535100897, + 0.8696875559720945, + 0.9277509584340993, + 0.9858143608961041, + 1.0438777633581093, + 1.1019411658201141, + 1.160004568282119, + 1.2180679707441238, + 1.2761313732061286, + 1.3341947756681334, + 1.3922581781301382, + 1.450321580592143, + 1.5083849830541478, + 1.5664483855161526, + 1.6245117879781579, + 1.6825751904401627, + 1.7406385929021675, + 1.7987019953641723, + 1.856765397826177, + 1.914828800288182, + 1.9728922027501867, + 2.0309556052121915, + 2.0890190076741963, + 2.147082410136201, + 2.205145812598206, + 2.2632092150602108, + 2.3212726175222156, + 2.3793360199842204, + 2.437399422446225, + 2.49546282490823, + 2.5535262273702357, + 2.6115896298322405, + 2.6696530322942453, + 2.72771643475625, + 2.785779837218255, + 2.8438432396802598, + 2.9019066421422646, + 2.9599700446042694, + 3.018033447066274, + 3.076096849528279, + 3.134160251990284, + 3.1922236544522886, + 3.2502870569142934, + 3.3083504593762982, + 3.366413861838303, + 3.424477264300308, + 3.4825406667623127, + 3.5406040692243175, + 3.5986674716863223, + 3.656730874148327, + 3.714794276610332, + 3.7728576790723367, + 3.8309210815343424, + 3.888984483996347, + 3.947047886458352 + ], + "yaxis": "y1" + }, + { + "fill": "tonextx", + "fillcolor": "rgb(31, 119, 180)", + "hoverinfo": "text", + "line": { + "color": "rgb(0, 0, 0)", + "shape": "spline", + "width": 0.5 + }, + "mode": "lines", + "name": "", + "opacity": 0.5, + "text": [ + "(pdf(y), y)=(0.01, -1.80)", + "(pdf(y), y)=(0.01, -1.74)", + "(pdf(y), y)=(0.02, -1.69)", + "(pdf(y), y)=(0.02, -1.63)", + "(pdf(y), y)=(0.02, -1.57)", + "(pdf(y), y)=(0.03, -1.51)", + "(pdf(y), y)=(0.03, -1.45)", + "(pdf(y), y)=(0.03, -1.39)", + "(pdf(y), y)=(0.04, -1.34)", + "(pdf(y), y)=(0.04, -1.28)", + "(pdf(y), y)=(0.05, -1.22)", + "(pdf(y), y)=(0.05, -1.16)", + "(pdf(y), y)=(0.06, -1.10)", + "(pdf(y), y)=(0.06, -1.05)", + "(pdf(y), y)=(0.07, -0.99)", + "(pdf(y), y)=(0.07, -0.93)", + "(pdf(y), y)=(0.08, -0.87)", + "(pdf(y), y)=(0.09, -0.81)", + "(pdf(y), y)=(0.10, -0.76)", + "(pdf(y), y)=(0.11, -0.70)", + "(pdf(y), y)=(0.12, -0.64)", + "(pdf(y), y)=(0.13, -0.58)", + "(pdf(y), y)=(0.14, -0.52)", + "(pdf(y), y)=(0.15, -0.47)", + "(pdf(y), y)=(0.16, -0.41)", + "(pdf(y), y)=(0.17, -0.35)", + "(pdf(y), y)=(0.18, -0.29)", + "(pdf(y), y)=(0.19, -0.23)", + "(pdf(y), y)=(0.20, -0.18)", + "(pdf(y), y)=(0.21, -0.12)", + "(pdf(y), y)=(0.23, -0.06)", + "(pdf(y), y)=(0.24, -0.00)", + "(pdf(y), y)=(0.25, 0.06)", + "(pdf(y), y)=(0.26, 0.11)", + "(pdf(y), y)=(0.27, 0.17)", + "(pdf(y), y)=(0.28, 0.23)", + "(pdf(y), y)=(0.29, 0.29)", + "(pdf(y), y)=(0.30, 0.35)", + "(pdf(y), y)=(0.31, 0.41)", + "(pdf(y), y)=(0.32, 0.46)", + "(pdf(y), y)=(0.33, 0.52)", + "(pdf(y), y)=(0.34, 0.58)", + "(pdf(y), y)=(0.35, 0.64)", + "(pdf(y), y)=(0.36, 0.70)", + "(pdf(y), y)=(0.36, 0.75)", + "(pdf(y), y)=(0.37, 0.81)", + "(pdf(y), y)=(0.37, 0.87)", + "(pdf(y), y)=(0.38, 0.93)", + "(pdf(y), y)=(0.38, 0.99)", + "(pdf(y), y)=(0.38, 1.04)", + "(pdf(y), y)=(0.38, 1.10)", + "(pdf(y), y)=(0.38, 1.16)", + "(pdf(y), y)=(0.38, 1.22)", + "(pdf(y), y)=(0.38, 1.28)", + "(pdf(y), y)=(0.38, 1.33)", + "(pdf(y), y)=(0.37, 1.39)", + "(pdf(y), y)=(0.37, 1.45)", + "(pdf(y), y)=(0.36, 1.51)", + "(pdf(y), y)=(0.35, 1.57)", + "(pdf(y), y)=(0.34, 1.62)", + "(pdf(y), y)=(0.33, 1.68)", + "(pdf(y), y)=(0.31, 1.74)", + "(pdf(y), y)=(0.30, 1.80)", + "(pdf(y), y)=(0.28, 1.86)", + "(pdf(y), y)=(0.26, 1.91)", + "(pdf(y), y)=(0.25, 1.97)", + "(pdf(y), y)=(0.23, 2.03)", + "(pdf(y), y)=(0.21, 2.09)", + "(pdf(y), y)=(0.20, 2.15)", + "(pdf(y), y)=(0.19, 2.21)", + "(pdf(y), y)=(0.17, 2.26)", + "(pdf(y), y)=(0.16, 2.32)", + "(pdf(y), y)=(0.15, 2.38)", + "(pdf(y), y)=(0.14, 2.44)", + "(pdf(y), y)=(0.13, 2.50)", + "(pdf(y), y)=(0.12, 2.55)", + "(pdf(y), y)=(0.11, 2.61)", + "(pdf(y), y)=(0.10, 2.67)", + "(pdf(y), y)=(0.09, 2.73)", + "(pdf(y), y)=(0.08, 2.79)", + "(pdf(y), y)=(0.08, 2.84)", + "(pdf(y), y)=(0.07, 2.90)", + "(pdf(y), y)=(0.06, 2.96)", + "(pdf(y), y)=(0.06, 3.02)", + "(pdf(y), y)=(0.05, 3.08)", + "(pdf(y), y)=(0.04, 3.13)", + "(pdf(y), y)=(0.04, 3.19)", + "(pdf(y), y)=(0.04, 3.25)", + "(pdf(y), y)=(0.03, 3.31)", + "(pdf(y), y)=(0.03, 3.37)", + "(pdf(y), y)=(0.02, 3.42)", + "(pdf(y), y)=(0.02, 3.48)", + "(pdf(y), y)=(0.02, 3.54)", + "(pdf(y), y)=(0.02, 3.60)", + "(pdf(y), y)=(0.01, 3.66)", + "(pdf(y), y)=(0.01, 3.71)", + "(pdf(y), y)=(0.01, 3.77)", + "(pdf(y), y)=(0.01, 3.83)", + "(pdf(y), y)=(0.01, 3.89)", + "(pdf(y), y)=(0.01, 3.95)" + ], + "type": "scatter", + "x": [ + 0.010629807995709145, + 0.013169043207929445, + 0.016040139678762732, + 0.019210231751799388, + 0.022630167990742682, + 0.026242646753708788, + 0.02999380464956362, + 0.033845842290453544, + 0.037787761810442466, + 0.04184172343914205, + 0.04606373581632911, + 0.05053888489972917, + 0.0553724933546625, + 0.06067907640622848, + 0.06657066927634292, + 0.07314536482454348, + 0.08047625049831941, + 0.08860085249767892, + 0.09751184853790779, + 0.10715090752753087, + 0.11740837658523146, + 0.1281313947753629, + 0.13914143020944253, + 0.15025944306583103, + 0.16133381776608552, + 0.17226421037844045, + 0.18301463008583443, + 0.19361172288096248, + 0.2041286025337113, + 0.21465910376077002, + 0.22529024696056807, + 0.23608079537950682, + 0.24705095348267397, + 0.258183605952707, + 0.26943294359130615, + 0.28073382266692776, + 0.2920059137180765, + 0.30315038661814614, + 0.31404191175627805, + 0.32452270925413734, + 0.33440612852827456, + 0.34349404686259877, + 0.351606382768798, + 0.3586148588875694, + 0.3644697371630602, + 0.36920935780262687, + 0.372947655617949, + 0.3758421672869055, + 0.3780512929327493, + 0.37969229194388776, + 0.3808099837023024, + 0.3813616103134052, + 0.3812181409638974, + 0.3801786557760934, + 0.3779933653235666, + 0.37439183971405643, + 0.369114677195119, + 0.3619476109505641, + 0.3527562027927368, + 0.3415172196288007, + 0.3283408126065853, + 0.3134771433561588, + 0.2973029356474736, + 0.28028735203040717, + 0.2629414505021946, + 0.2457596967748828, + 0.22916424787630765, + 0.21346232549647373, + 0.19882412927879686, + 0.18528423087332102, + 0.17276441759099886, + 0.1611117162984247, + 0.1501427614500003, + 0.1396852571036418, + 0.12960895085918325, + 0.11984170680745578, + 0.11037002948996247, + 0.10122679928018546, + 0.09247129536707471, + 0.08416743880560758, + 0.07636560159729314, + 0.06909161694475957, + 0.06234429987335353, + 0.05610044168005279, + 0.05032445133397765, + 0.04497901097567623, + 0.0400334444095966, + 0.035467771037801576, + 0.03127213316034735, + 0.027442815312153635, + 0.023976912423289563, + 0.020867660102494905, + 0.018101699455360346, + 0.01565854890348305, + 0.01351176061849516, + 0.011630922304883832, + 0.009983811647506145, + 0.008538382075313851, + 0.007264562936656707, + 0.006135922754424271 + ], + "xaxis": "x1", + "y": [ + -1.8012289572801286, + -1.7431655548181237, + -1.685102152356119, + -1.6270387498941141, + -1.568975347432109, + -1.5109119449701043, + -1.4528485425080995, + -1.3947851400460947, + -1.3367217375840896, + -1.2786583351220848, + -1.22059493266008, + -1.1625315301980752, + -1.1044681277360704, + -1.0464047252740656, + -0.9883413228120607, + -0.9302779203500557, + -0.8722145178880509, + -0.8141511154260461, + -0.7560877129640413, + -0.6980243105020363, + -0.6399609080400315, + -0.5818975055780267, + -0.5238341031160219, + -0.46577070065401704, + -0.40770729819201224, + -0.3496438957300072, + -0.2915804932680024, + -0.23351709080599758, + -0.17545368834399278, + -0.11739028588198797, + -0.059326883419982934, + -0.0012634809579781248, + 0.056799921504026685, + 0.1148633239660315, + 0.1729267264280363, + 0.2309901288900411, + 0.2890535313520459, + 0.34711693381405073, + 0.405180336276056, + 0.4632437387380608, + 0.5213071412000656, + 0.5793705436620704, + 0.6374339461240752, + 0.69549734858608, + 0.7535607510480848, + 0.8116241535100897, + 0.8696875559720945, + 0.9277509584340993, + 0.9858143608961041, + 1.0438777633581093, + 1.1019411658201141, + 1.160004568282119, + 1.2180679707441238, + 1.2761313732061286, + 1.3341947756681334, + 1.3922581781301382, + 1.450321580592143, + 1.5083849830541478, + 1.5664483855161526, + 1.6245117879781579, + 1.6825751904401627, + 1.7406385929021675, + 1.7987019953641723, + 1.856765397826177, + 1.914828800288182, + 1.9728922027501867, + 2.0309556052121915, + 2.0890190076741963, + 2.147082410136201, + 2.205145812598206, + 2.2632092150602108, + 2.3212726175222156, + 2.3793360199842204, + 2.437399422446225, + 2.49546282490823, + 2.5535262273702357, + 2.6115896298322405, + 2.6696530322942453, + 2.72771643475625, + 2.785779837218255, + 2.8438432396802598, + 2.9019066421422646, + 2.9599700446042694, + 3.018033447066274, + 3.076096849528279, + 3.134160251990284, + 3.1922236544522886, + 3.2502870569142934, + 3.3083504593762982, + 3.366413861838303, + 3.424477264300308, + 3.4825406667623127, + 3.5406040692243175, + 3.5986674716863223, + 3.656730874148327, + 3.714794276610332, + 3.7728576790723367, + 3.8309210815343424, + 3.888984483996347, + 3.947047886458352 + ], + "yaxis": "y1" + }, + { + "line": { + "color": "rgb(0,0,0)", + "width": 1.5 + }, + "mode": "lines", + "name": "", + "type": "scatter", + "x": [ + 0, + 0 + ], + "xaxis": "x1", + "y": [ + -1.4910291042601131, + 3.5811157547374997 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "text", + "line": { + "color": "rgb(0,0,0)", + "width": 4 + }, + "mode": "lines", + "text": [ + "lower-quartile: 0.31", + "upper-quartile: 1.66" + ], + "type": "scatter", + "x": [ + 0, + 0 + ], + "xaxis": "x1", + "y": [ + 0.3092452888725433, + 1.6600697271697062 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,255,255)", + "symbol": "square" + }, + "mode": "markers", + "text": [ + "median: 1.02" + ], + "type": "scatter", + "x": [ + 0 + ], + "xaxis": "x1", + "y": [ + 1.0204873881990948 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "y", + "marker": { + "color": "rgb(31, 119, 180)", + "symbol": "line-ew-open" + }, + "mode": "markers", + "name": "", + "showlegend": false, + "type": "scatter", + "x": [ + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624, + -0.45763393237608624 + ], + "xaxis": "x1", + "y": [ + 2.055048116803689, + 0.3792209655431724, + 1.23089176239894, + 1.4022480811813371, + -1.414851054424393, + -0.36615010829607897, + 0.7449606587018727, + 0.6073496982118798, + -0.41955039348592504, + 1.6600697271697062, + 0.8146541539973623, + -1.0433926636317299, + 1.2456810306900412, + 0.06835059660958653, + 1.4589573250108119, + 1.6580285805600457, + 1.0667714036880964, + -0.7019240539068077, + 1.6969908845147836, + -0.813250344790283, + 1.7338508852430166, + 2.8421756982820967, + 1.7242310391422284, + 1.0407620626753695, + 0.7090868828155565, + 1.556534064922461, + 0.8760255996008965, + 0.08763777901362124, + 1.1710613087132702, + 0.4392640846575, + 0.17779566938238667, + 1.4981172010955461, + -1.4910291042601131, + 1.500236364821316, + 0.728786094628714, + 1.2582866232866068, + 0.337882425688503, + -0.7482165761025215, + 0.035461045666403956, + 1.5555642447494196, + 0.9916187625949378, + -1.8012289572801286, + 0.6173445809907414, + 1.72273452595963, + -0.34074889533145347, + 1.6345048627453844, + 1.3385404474917026, + 1.4383115900530656, + 1.6470995038137966, + -0.7226711202373688, + 0.09069149572601798, + 0.048296571461937665, + 0.1613819430075224, + 1.1312052784741171, + 2.0019744785694353, + 1.0662525171231654, + 0.8037376646611778, + 2.701376781068901, + 1.68516125218593, + 2.847991358847753, + 1.2082661679514297, + 0.31176504432799057, + 0.5537267785060976, + 1.0962707188816394, + 0.19288908312304442, + 1.440692460581654, + 0.1528597632943418, + -0.15006325883090632, + 0.6618859520142475, + 0.6266124536462748, + 0.796245926851641, + 1.502625047282201, + 3.2543325570225208, + 2.730081637255413, + 0.47194561515192224, + -0.18254458126719753, + 0.3092452888725433, + 1.9110077439720166, + 2.4979417347797366, + 0.462275382072429, + 3.5778972374273956, + 2.368533539077707, + 2.5327162164587103, + -1.0815654392813956, + 2.550284699028204, + 2.308105734438647, + 2.0231167639063683, + 0.5776319518004871, + -0.44687012530173176, + 1.9264817347821377, + 0.3406280776820859, + 0.28413562015163385, + 2.413913911772564, + 0.07921327702482495, + 1.4311616008620536, + -0.8515558366174765, + 0.4935455981874962, + 0.9393039734806247, + 1.135817075359564, + 1.8465543857236755, + 2.2457685232246707, + 0.6787246896040553, + 2.409016984122683, + 1.6699675869372461, + 2.9922345057187947, + 0.567175341918455, + -0.10380377542356967, + 0.3860982655784846, + 1.7055398908239296, + -0.19932910759721856, + 2.1255478064327495, + 0.8340948225274134, + 1.0726715578207129, + 2.2389733728991175, + 2.1507697371673817, + 1.944495376984322, + 0.7839134434573072, + 1.2841336637665057, + 0.22803743439150415, + -0.8154213199511064, + 1.7981317030049309, + 0.7945445968295807, + 0.7339978470143397, + 2.7489533866253186, + -0.01125543841208132, + -1.1318501261900837, + -0.4372084146507973, + 1.7049224096929994, + 2.3873536373423043, + 0.9206212353648212, + 0.2778533333546548, + 1.5567594989338258, + -1.2876502557249845, + 0.6435816978592368, + 1.1736401825848537, + 1.574293194187142, + 1.0889979568377355, + 0.658047500149619, + 1.0260543913990652, + 0.293793996480306, + 2.2043063869558814, + 1.717962191379649, + 1.383283387373282, + 1.7697989690692504, + -0.1701722744346854, + 2.212680751712038, + -0.22037057097024015, + 1.356355799595426, + 0.12900789455694683, + 1.494346360601012, + 3.382348461969256, + 0.8199104816886162, + -1.447753031193816, + -0.462344693178365, + 0.21823713639300968, + 0.26672604727553306, + -1.1986885268971683, + -0.32063023399378454, + 2.182581893822652, + 2.3093215962865363, + 1.6295063332656174, + 1.6744370249358695, + -0.4971982588629147, + 0.12855118373263064, + -0.19382559578483693, + 0.9071626769652236, + 1.1198844562443973, + 1.7998633606133496, + 2.6486849729621635, + 2.643875706377848, + 0.9401115369369694, + 0.8223994915554118, + 1.6962204141096, + 1.2642391009334455, + 0.10202932122865982, + 1.6426769835251018, + 2.3284382256916114, + 2.3194969077015424, + 1.6621359022065074, + 1.3866927907357527, + 1.4432748570667298, + -0.4286540469970219, + 1.3507950726424582, + 0.6064712356822903, + 1.7050468333108697, + 3.135440612892472, + -0.20333753921871023, + 0.41823524892303143, + 1.4494884735420572, + 0.4676749814195921, + -0.16636417966601624, + 1.5905057862375602, + 0.09090668649899236, + -1.0590924306177478, + -0.2656199756545068, + 0.21224361505037093, + 0.5923657346908761, + 0.6345187463091124, + 0.8202488704201789, + 1.2576067635473493, + 1.2615266084047367, + 2.386248711933754, + 0.8804155130928405, + 1.0852246498931273, + 0.6909852700912225, + 1.711170164152704, + 1.426347664164703, + 2.6566716604139775, + 1.9573373865127897, + 1.5148648322665341, + -0.26997885324860227, + 1.6290991980837628, + 1.4427956459018179, + 0.25133442842264186, + 0.674516753307266, + 1.443021232016589, + 1.2480256812985073, + 0.39529910423672, + 2.8478963079492585, + 0.3678673751274536, + 1.3766284734375098, + 2.2995446589705395, + 1.4419047465486905, + 1.0129241837701548, + 1.7978138063806108, + 2.2260512790011235, + 0.06773574868062737, + 1.0665292775444872, + -0.6835451954257497, + 0.5172430260201998, + 2.047371343084315, + 1.9878053172361247, + -0.015257320881730374, + 0.5557285157046017, + 0.38705528867433703, + 3.5811157547374997, + 1.2874755659288262, + 1.4363264395799793, + 2.1232277662574894, + 1.084357297811057, + 1.5461342234277864, + 2.2936165375231257, + -0.056069335389404396, + -0.15184913797999222, + 0.71999211114846, + 0.707321221403701, + 0.5999296407520608, + -0.3749573389734424, + -0.43539183352934296, + 0.9718176586810262, + 0.8125511786346253, + 1.356380744095275, + -1.369077086057065, + 0.6395555176713106, + 2.1372418588753987, + -0.3623019353140575, + 0.0028848883708640916, + 0.5116063781060671, + 0.9209178988097779, + 1.0021195019398308, + 2.0599523189420506, + 1.3595393192188934, + 0.756050259371745, + 2.8684410315081434, + 2.340963930211701, + 1.3762042812673294, + -0.6717383808464676, + 0.9536544369494123, + -0.6387501546658549, + 1.0334866848687785, + -0.09090491334583817, + -0.025550908075568257, + 1.889574605042844, + -0.10843691533224842, + 2.6830010653907683, + -0.5214361934089162, + 1.818355417810247, + 2.427786437027436, + -0.36944267289928545, + 0.5774317350918727, + 1.2201126713076569, + 1.1558358777196027, + 0.7554629706570466, + 0.7804096812867475, + 1.2058867554379065, + 1.2640027537948197, + 2.1668208824965003, + 0.1508737490468608, + 0.7144726204754809, + 1.108094474599378, + 1.3155459889872025, + 1.9101216494657633, + 1.8364646383152952, + 0.8991695649465802, + 1.1058440927496398, + 2.2813201389243147, + 2.235462112243993, + 1.915498794620667, + 0.7533162462148819, + 1.8924150675430096, + 1.4384708809734548, + 0.35084098850477463, + 1.3508665197024177, + 2.608812338322715, + -1.190521773812149, + 0.7209445579257932, + -0.593077970491696, + -0.5633688966902166, + 1.7139723289099646, + 0.9390205064148195, + 1.2082763942580417, + 0.41598675140100816, + 1.600994973987592, + 0.22146761420398808, + 0.20754609290321535, + 0.9781573248936476, + 1.2339003373509358, + 3.947047886458352, + 0.24726412521798213, + -0.3642163189419003, + 0.1967056440720889, + 2.5051189142420522, + -0.44216916922430305, + 0.9213959297327267, + 2.010273797301052, + 1.1574163684691847, + 1.4446072957907627, + 0.2117809807461527, + -0.07765180486165302, + 2.511527334453052, + 1.8036751809320775, + 1.6358132948511086, + 1.2827514254473118, + 0.25956528414472657, + 1.6446455057326375, + 1.4144041434893406, + 0.6190438960137643, + 0.8076034936439969, + 0.6204721604187355, + 2.560901636733597, + 1.6622925784845135, + 2.561933395940313, + 1.380490313975761, + 1.4337080091681729, + 0.6354622588099963, + 0.047592945270387266, + 1.1051368502943404, + 1.3960850445806938, + 1.080737192330808, + 1.3197543470268707, + 0.3708636418085869, + 1.0149203849991242, + 0.7369857575642168, + 0.34277687466211204, + 1.6394606861995404, + 0.7919038101560875, + 1.718835434680333, + 3.1428826011151436, + 0.7702306191758534, + 1.7738306708765896, + 3.0390059435834034, + 0.9849663799090749, + 0.904458712167905, + 1.909107451796554, + -0.3519239376778287, + 0.033543622509439874, + -0.14145238878657285, + -0.09115475933809081, + 0.17626550020295595, + 1.351021897473121, + 0.31647516379970764, + 1.141837725513815, + 0.9289376177573497, + 1.0930270301406946, + 1.2252893602189554, + -0.9444159764226681, + 1.7413054766414775, + 1.6842701784524006, + 1.4336946400542208, + 1.6215765384322451, + -0.44654131688964793, + -0.4457866163492239, + 0.4624958577012498, + 2.6866649424887425, + -0.3628587101897054, + 2.9985255517588394, + 0.06515267760848709, + 0.6619497758673868, + 1.983404162691865, + 1.9341355220788785, + 0.6340519896056691, + 1.7378827291505927, + 2.2669503891098883, + -0.7860802674920118, + 1.9212239671932176, + 1.9094951435874457, + 3.048184421399919, + 0.5703592234283328, + 0.67185339965201, + 0.5968101487432522, + 1.6133893720954209, + 2.5108946208697054, + 1.0449334849228025, + 3.0161282967534824, + -1.4192831210032844, + -0.5265754775785076, + 1.679691007189403, + 1.62685002395879, + 1.7404091017888432, + 0.8566741188263576, + 2.10540830080641, + -0.3479850062325869, + 2.0187477008593926, + 1.1324359865041098, + 0.3339085532408548, + 0.0015041068010703817, + 1.0581847383352987, + 0.28459132564666434, + 1.9949882354100281, + 0.6971694509392121, + 1.3604939880562024, + 2.404872106497978, + 1.491409079243847, + 1.6281166990643525, + 0.6692428082234037, + 0.9287014998526959, + 0.37981667489913273, + 0.8525501315053126, + 0.9703335679579542, + 0.4668787669088791, + -0.06596503775337648, + 1.5792496392762494, + 1.1325834952074163, + -0.8463974481314447, + 1.2439664931692525, + 0.5577642962423104, + 1.3907804763166045, + -0.8945631032293764, + 2.3950545998932635, + 1.1408982480455383, + 0.7631533627202, + 3.262303654139497, + 0.24880741062777656, + -0.23007610773848364, + 1.097906330465572, + 1.3050313252812482, + 0.6295178009103416, + 1.0589902886115392, + 1.989875330843427, + 0.37037476838760564, + 0.34226833413873603, + 1.2034678601893953, + 0.7777089443649872, + -0.2407081843599972, + 0.12329116003906249, + 1.0469774983126663, + 2.001346173065053, + -0.04683061646626996, + 1.3787068179327986, + 1.887043795675313, + 1.9625034876340555, + -0.3130943031079212, + -0.6301523883116251, + 0.9033931697857251, + 1.260674843974245, + 1.1982352285054219, + 0.5965763999983573, + 0.41814688641641307, + 1.5992746620571483, + 0.9875059062440994, + 0.6499980120267349, + 1.1704968990777829, + 1.5804669077207367, + -0.2533667123574441, + 0.22045025087987313, + 1.4824001125016224, + 0.529232128639084, + 1.9167696698879593, + 0.8110174113740133, + 1.119929253759989, + 0.5096418526547366, + -1.0292627743613485, + 0.8605236419013544, + 1.5271001815442415, + 1.9427624804589838, + 0.6599867523239589, + 0.7730841730139526, + 0.8627789943216646, + 0.1604467772244107, + 0.42578253385341136, + 1.2429456459279966, + 1.5168035503862738, + -0.08226506404485634, + -0.45299727101128995, + 1.7272905032156636, + -0.12098060981020642, + 1.262290143254386, + -0.7601032351051904, + 0.5219192196165597, + 0.33089583301078773 + ], + "yaxis": "y1" + }, + { + "fill": "tonextx", + "fillcolor": "rgb(255, 127, 14)", + "hoverinfo": "text", + "line": { + "color": "rgb(0, 0, 0)", + "shape": "spline", + "width": 0.5 + }, + "mode": "lines", + "name": "", + "opacity": 0.5, + "text": [ + "(pdf(y), y)=(-0.01, -4.59)", + "(pdf(y), y)=(-0.01, -4.54)", + "(pdf(y), y)=(-0.02, -4.48)", + "(pdf(y), y)=(-0.02, -4.43)", + "(pdf(y), y)=(-0.03, -4.37)", + "(pdf(y), y)=(-0.03, -4.32)", + "(pdf(y), y)=(-0.04, -4.26)", + "(pdf(y), y)=(-0.04, -4.21)", + "(pdf(y), y)=(-0.05, -4.16)", + "(pdf(y), y)=(-0.06, -4.10)", + "(pdf(y), y)=(-0.07, -4.05)", + "(pdf(y), y)=(-0.08, -3.99)", + "(pdf(y), y)=(-0.09, -3.94)", + "(pdf(y), y)=(-0.10, -3.88)", + "(pdf(y), y)=(-0.11, -3.83)", + "(pdf(y), y)=(-0.12, -3.77)", + "(pdf(y), y)=(-0.13, -3.72)", + "(pdf(y), y)=(-0.14, -3.66)", + "(pdf(y), y)=(-0.15, -3.61)", + "(pdf(y), y)=(-0.16, -3.55)", + "(pdf(y), y)=(-0.16, -3.50)", + "(pdf(y), y)=(-0.17, -3.45)", + "(pdf(y), y)=(-0.18, -3.39)", + "(pdf(y), y)=(-0.18, -3.34)", + "(pdf(y), y)=(-0.19, -3.28)", + "(pdf(y), y)=(-0.20, -3.23)", + "(pdf(y), y)=(-0.20, -3.17)", + "(pdf(y), y)=(-0.21, -3.12)", + "(pdf(y), y)=(-0.22, -3.06)", + "(pdf(y), y)=(-0.22, -3.01)", + "(pdf(y), y)=(-0.23, -2.95)", + "(pdf(y), y)=(-0.24, -2.90)", + "(pdf(y), y)=(-0.25, -2.84)", + "(pdf(y), y)=(-0.26, -2.79)", + "(pdf(y), y)=(-0.27, -2.74)", + "(pdf(y), y)=(-0.28, -2.68)", + "(pdf(y), y)=(-0.30, -2.63)", + "(pdf(y), y)=(-0.31, -2.57)", + "(pdf(y), y)=(-0.32, -2.52)", + "(pdf(y), y)=(-0.34, -2.46)", + "(pdf(y), y)=(-0.35, -2.41)", + "(pdf(y), y)=(-0.36, -2.35)", + "(pdf(y), y)=(-0.37, -2.30)", + "(pdf(y), y)=(-0.38, -2.24)", + "(pdf(y), y)=(-0.38, -2.19)", + "(pdf(y), y)=(-0.39, -2.14)", + "(pdf(y), y)=(-0.39, -2.08)", + "(pdf(y), y)=(-0.39, -2.03)", + "(pdf(y), y)=(-0.39, -1.97)", + "(pdf(y), y)=(-0.38, -1.92)", + "(pdf(y), y)=(-0.37, -1.86)", + "(pdf(y), y)=(-0.37, -1.81)", + "(pdf(y), y)=(-0.36, -1.75)", + "(pdf(y), y)=(-0.35, -1.70)", + "(pdf(y), y)=(-0.34, -1.64)", + "(pdf(y), y)=(-0.33, -1.59)", + "(pdf(y), y)=(-0.31, -1.53)", + "(pdf(y), y)=(-0.30, -1.48)", + "(pdf(y), y)=(-0.29, -1.43)", + "(pdf(y), y)=(-0.28, -1.37)", + "(pdf(y), y)=(-0.27, -1.32)", + "(pdf(y), y)=(-0.26, -1.26)", + "(pdf(y), y)=(-0.26, -1.21)", + "(pdf(y), y)=(-0.25, -1.15)", + "(pdf(y), y)=(-0.24, -1.10)", + "(pdf(y), y)=(-0.23, -1.04)", + "(pdf(y), y)=(-0.22, -0.99)", + "(pdf(y), y)=(-0.21, -0.93)", + "(pdf(y), y)=(-0.20, -0.88)", + "(pdf(y), y)=(-0.20, -0.82)", + "(pdf(y), y)=(-0.19, -0.77)", + "(pdf(y), y)=(-0.18, -0.72)", + "(pdf(y), y)=(-0.17, -0.66)", + "(pdf(y), y)=(-0.16, -0.61)", + "(pdf(y), y)=(-0.15, -0.55)", + "(pdf(y), y)=(-0.14, -0.50)", + "(pdf(y), y)=(-0.13, -0.44)", + "(pdf(y), y)=(-0.12, -0.39)", + "(pdf(y), y)=(-0.11, -0.33)", + "(pdf(y), y)=(-0.10, -0.28)", + "(pdf(y), y)=(-0.10, -0.22)", + "(pdf(y), y)=(-0.09, -0.17)", + "(pdf(y), y)=(-0.09, -0.11)", + "(pdf(y), y)=(-0.08, -0.06)", + "(pdf(y), y)=(-0.08, -0.01)", + "(pdf(y), y)=(-0.08, 0.05)", + "(pdf(y), y)=(-0.07, 0.10)", + "(pdf(y), y)=(-0.07, 0.16)", + "(pdf(y), y)=(-0.07, 0.21)", + "(pdf(y), y)=(-0.06, 0.27)", + "(pdf(y), y)=(-0.06, 0.32)", + "(pdf(y), y)=(-0.06, 0.38)", + "(pdf(y), y)=(-0.05, 0.43)", + "(pdf(y), y)=(-0.05, 0.49)", + "(pdf(y), y)=(-0.04, 0.54)", + "(pdf(y), y)=(-0.04, 0.60)", + "(pdf(y), y)=(-0.03, 0.65)", + "(pdf(y), y)=(-0.03, 0.70)", + "(pdf(y), y)=(-0.02, 0.76)", + "(pdf(y), y)=(-0.02, 0.81)" + ], + "type": "scatter", + "x": [ + -0.011565108487904112, + -0.014157673092630897, + -0.017227428504758092, + -0.020852708195418335, + -0.0251142340527283, + -0.03008790741680804, + -0.035836133550077545, + -0.04239875303074278, + -0.0497848741210034, + -0.057966887389956555, + -0.06687768881442038, + -0.0764116892501629, + -0.08642964078670944, + -0.09676677842577354, + -0.10724336396712847, + -0.11767649885438594, + -0.12789206526875524, + -0.13773582846659269, + -0.14708301365008658, + -0.15584596136565856, + -0.16397967895977122, + -0.1714851942751107, + -0.17841059394438405, + -0.1848495617305552, + -0.19093721777729378, + -0.19684316995762796, + -0.20276193038824283, + -0.20890115294997003, + -0.21546839597177975, + -0.2226572119216077, + -0.23063329656826492, + -0.2395212761840166, + -0.24939261456589448, + -0.2602551998603464, + -0.2720454371651291, + -0.28462400253775466, + -0.29777658812589336, + -0.31122077239790247, + -0.32461948572887855, + -0.33760049540165255, + -0.34978016461536493, + -0.3607887947263978, + -0.3702944481712286, + -0.3780224269731083, + -0.3837684889497914, + -0.38740516224651084, + -0.3888817984730019, + -0.388219930509823, + -0.3855058527854124, + -0.38088210187336413, + -0.3745388588038749, + -0.366705508561141, + -0.35764196044711416, + -0.34762903714057286, + -0.33695731916698735, + -0.32591420526377485, + -0.31476948306823627, + -0.30376026940735135, + -0.2930766761797565, + -0.28284990521054776, + -0.2731445876790275, + -0.26395697089790376, + -0.2552199606434249, + -0.24681508241327846, + -0.23859028360028547, + -0.230381416832514, + -0.2220345059819579, + -0.21342571138519567, + -0.20447634088276587, + -0.19516119023792028, + -0.18550970445070541, + -0.17560064530613634, + -0.16555187606604624, + -0.15550736477900942, + -0.14562350924394785, + -0.13605645866101904, + -0.1269514057184882, + -0.11843406851043696, + -0.11060400656362243, + -0.1035291966773395, + -0.09724148956280439, + -0.09173307971222787, + -0.08695471522794188, + -0.08281676088646635, + -0.07919417200588602, + -0.07593586364803404, + -0.07287799990742223, + -0.06985968143417957, + -0.06673873626918064, + -0.06340510202429181, + -0.05978972092496759, + -0.055867824095353666, + -0.05165665762115853, + -0.047208746270828425, + -0.04260242365480906, + -0.03793146928669459, + -0.033295357020735, + -0.028791038822792506, + -0.024506599776251622, + -0.02051670315339748 + ], + "xaxis": "x2", + "y": [ + -4.592193544240739, + -4.537591156419242, + -4.482988768597746, + -4.428386380776249, + -4.373783992954753, + -4.319181605133257, + -4.26457921731176, + -4.209976829490263, + -4.1553744416687675, + -4.100772053847271, + -4.046169666025774, + -3.9915672782042777, + -3.9369648903827814, + -3.8823625025612847, + -3.8277601147397884, + -3.773157726918292, + -3.7185553390967954, + -3.663952951275299, + -3.609350563453803, + -3.554748175632306, + -3.5001457878108098, + -3.4455433999893135, + -3.3909410121678167, + -3.33633862434632, + -3.281736236524824, + -3.2271338487033274, + -3.1725314608818307, + -3.117929073060335, + -3.063326685238838, + -3.0087242974173414, + -2.954121909595845, + -2.899519521774349, + -2.844917133952852, + -2.7903147461313558, + -2.7357123583098595, + -2.6811099704883627, + -2.6265075826668665, + -2.57190519484537, + -2.5173028070238734, + -2.462700419202377, + -2.408098031380881, + -2.353495643559384, + -2.298893255737888, + -2.2442908679163915, + -2.189688480094895, + -2.1350860922733985, + -2.080483704451902, + -2.0258813166304055, + -1.9712789288089092, + -1.9166765409874125, + -1.8620741531659162, + -1.80747176534442, + -1.7528693775229232, + -1.6982669897014269, + -1.6436646018799306, + -1.5890622140584338, + -1.5344598262369376, + -1.4798574384154413, + -1.4252550505939445, + -1.3706526627724482, + -1.3160502749509515, + -1.2614478871294552, + -1.206845499307959, + -1.1522431114864622, + -1.097640723664966, + -1.0430383358434696, + -0.9884359480219729, + -0.9338335602004766, + -0.8792311723789803, + -0.8246287845574836, + -0.7700263967359873, + -0.7154240089144905, + -0.6608216210929942, + -0.606219233271498, + -0.5516168454500017, + -0.49701445762850494, + -0.4424120698070082, + -0.38780968198551236, + -0.3332072941640156, + -0.2786049063425189, + -0.22400251852102304, + -0.1694001306995263, + -0.11479774287802957, + -0.06019535505653373, + -0.005592967235036994, + 0.04900942058645974, + 0.10361180840795559, + 0.15821419622945232, + 0.21281658405094905, + 0.2674189718724449, + 0.32202135969394163, + 0.37662374751543837, + 0.4312261353369351, + 0.48582852315843095, + 0.5404309109799277, + 0.5950332988014244, + 0.6496356866229203, + 0.704238074444417, + 0.7588404622659137, + 0.8134428500874091 + ], + "yaxis": "y1" + }, + { + "fill": "tonextx", + "fillcolor": "rgb(255, 127, 14)", + "hoverinfo": "text", + "line": { + "color": "rgb(0, 0, 0)", + "shape": "spline", + "width": 0.5 + }, + "mode": "lines", + "name": "", + "opacity": 0.5, + "text": [ + "(pdf(y), y)=(0.01, -4.59)", + "(pdf(y), y)=(0.01, -4.54)", + "(pdf(y), y)=(0.02, -4.48)", + "(pdf(y), y)=(0.02, -4.43)", + "(pdf(y), y)=(0.03, -4.37)", + "(pdf(y), y)=(0.03, -4.32)", + "(pdf(y), y)=(0.04, -4.26)", + "(pdf(y), y)=(0.04, -4.21)", + "(pdf(y), y)=(0.05, -4.16)", + "(pdf(y), y)=(0.06, -4.10)", + "(pdf(y), y)=(0.07, -4.05)", + "(pdf(y), y)=(0.08, -3.99)", + "(pdf(y), y)=(0.09, -3.94)", + "(pdf(y), y)=(0.10, -3.88)", + "(pdf(y), y)=(0.11, -3.83)", + "(pdf(y), y)=(0.12, -3.77)", + "(pdf(y), y)=(0.13, -3.72)", + "(pdf(y), y)=(0.14, -3.66)", + "(pdf(y), y)=(0.15, -3.61)", + "(pdf(y), y)=(0.16, -3.55)", + "(pdf(y), y)=(0.16, -3.50)", + "(pdf(y), y)=(0.17, -3.45)", + "(pdf(y), y)=(0.18, -3.39)", + "(pdf(y), y)=(0.18, -3.34)", + "(pdf(y), y)=(0.19, -3.28)", + "(pdf(y), y)=(0.20, -3.23)", + "(pdf(y), y)=(0.20, -3.17)", + "(pdf(y), y)=(0.21, -3.12)", + "(pdf(y), y)=(0.22, -3.06)", + "(pdf(y), y)=(0.22, -3.01)", + "(pdf(y), y)=(0.23, -2.95)", + "(pdf(y), y)=(0.24, -2.90)", + "(pdf(y), y)=(0.25, -2.84)", + "(pdf(y), y)=(0.26, -2.79)", + "(pdf(y), y)=(0.27, -2.74)", + "(pdf(y), y)=(0.28, -2.68)", + "(pdf(y), y)=(0.30, -2.63)", + "(pdf(y), y)=(0.31, -2.57)", + "(pdf(y), y)=(0.32, -2.52)", + "(pdf(y), y)=(0.34, -2.46)", + "(pdf(y), y)=(0.35, -2.41)", + "(pdf(y), y)=(0.36, -2.35)", + "(pdf(y), y)=(0.37, -2.30)", + "(pdf(y), y)=(0.38, -2.24)", + "(pdf(y), y)=(0.38, -2.19)", + "(pdf(y), y)=(0.39, -2.14)", + "(pdf(y), y)=(0.39, -2.08)", + "(pdf(y), y)=(0.39, -2.03)", + "(pdf(y), y)=(0.39, -1.97)", + "(pdf(y), y)=(0.38, -1.92)", + "(pdf(y), y)=(0.37, -1.86)", + "(pdf(y), y)=(0.37, -1.81)", + "(pdf(y), y)=(0.36, -1.75)", + "(pdf(y), y)=(0.35, -1.70)", + "(pdf(y), y)=(0.34, -1.64)", + "(pdf(y), y)=(0.33, -1.59)", + "(pdf(y), y)=(0.31, -1.53)", + "(pdf(y), y)=(0.30, -1.48)", + "(pdf(y), y)=(0.29, -1.43)", + "(pdf(y), y)=(0.28, -1.37)", + "(pdf(y), y)=(0.27, -1.32)", + "(pdf(y), y)=(0.26, -1.26)", + "(pdf(y), y)=(0.26, -1.21)", + "(pdf(y), y)=(0.25, -1.15)", + "(pdf(y), y)=(0.24, -1.10)", + "(pdf(y), y)=(0.23, -1.04)", + "(pdf(y), y)=(0.22, -0.99)", + "(pdf(y), y)=(0.21, -0.93)", + "(pdf(y), y)=(0.20, -0.88)", + "(pdf(y), y)=(0.20, -0.82)", + "(pdf(y), y)=(0.19, -0.77)", + "(pdf(y), y)=(0.18, -0.72)", + "(pdf(y), y)=(0.17, -0.66)", + "(pdf(y), y)=(0.16, -0.61)", + "(pdf(y), y)=(0.15, -0.55)", + "(pdf(y), y)=(0.14, -0.50)", + "(pdf(y), y)=(0.13, -0.44)", + "(pdf(y), y)=(0.12, -0.39)", + "(pdf(y), y)=(0.11, -0.33)", + "(pdf(y), y)=(0.10, -0.28)", + "(pdf(y), y)=(0.10, -0.22)", + "(pdf(y), y)=(0.09, -0.17)", + "(pdf(y), y)=(0.09, -0.11)", + "(pdf(y), y)=(0.08, -0.06)", + "(pdf(y), y)=(0.08, -0.01)", + "(pdf(y), y)=(0.08, 0.05)", + "(pdf(y), y)=(0.07, 0.10)", + "(pdf(y), y)=(0.07, 0.16)", + "(pdf(y), y)=(0.07, 0.21)", + "(pdf(y), y)=(0.06, 0.27)", + "(pdf(y), y)=(0.06, 0.32)", + "(pdf(y), y)=(0.06, 0.38)", + "(pdf(y), y)=(0.05, 0.43)", + "(pdf(y), y)=(0.05, 0.49)", + "(pdf(y), y)=(0.04, 0.54)", + "(pdf(y), y)=(0.04, 0.60)", + "(pdf(y), y)=(0.03, 0.65)", + "(pdf(y), y)=(0.03, 0.70)", + "(pdf(y), y)=(0.02, 0.76)", + "(pdf(y), y)=(0.02, 0.81)" + ], + "type": "scatter", + "x": [ + 0.011565108487904112, + 0.014157673092630897, + 0.017227428504758092, + 0.020852708195418335, + 0.0251142340527283, + 0.03008790741680804, + 0.035836133550077545, + 0.04239875303074278, + 0.0497848741210034, + 0.057966887389956555, + 0.06687768881442038, + 0.0764116892501629, + 0.08642964078670944, + 0.09676677842577354, + 0.10724336396712847, + 0.11767649885438594, + 0.12789206526875524, + 0.13773582846659269, + 0.14708301365008658, + 0.15584596136565856, + 0.16397967895977122, + 0.1714851942751107, + 0.17841059394438405, + 0.1848495617305552, + 0.19093721777729378, + 0.19684316995762796, + 0.20276193038824283, + 0.20890115294997003, + 0.21546839597177975, + 0.2226572119216077, + 0.23063329656826492, + 0.2395212761840166, + 0.24939261456589448, + 0.2602551998603464, + 0.2720454371651291, + 0.28462400253775466, + 0.29777658812589336, + 0.31122077239790247, + 0.32461948572887855, + 0.33760049540165255, + 0.34978016461536493, + 0.3607887947263978, + 0.3702944481712286, + 0.3780224269731083, + 0.3837684889497914, + 0.38740516224651084, + 0.3888817984730019, + 0.388219930509823, + 0.3855058527854124, + 0.38088210187336413, + 0.3745388588038749, + 0.366705508561141, + 0.35764196044711416, + 0.34762903714057286, + 0.33695731916698735, + 0.32591420526377485, + 0.31476948306823627, + 0.30376026940735135, + 0.2930766761797565, + 0.28284990521054776, + 0.2731445876790275, + 0.26395697089790376, + 0.2552199606434249, + 0.24681508241327846, + 0.23859028360028547, + 0.230381416832514, + 0.2220345059819579, + 0.21342571138519567, + 0.20447634088276587, + 0.19516119023792028, + 0.18550970445070541, + 0.17560064530613634, + 0.16555187606604624, + 0.15550736477900942, + 0.14562350924394785, + 0.13605645866101904, + 0.1269514057184882, + 0.11843406851043696, + 0.11060400656362243, + 0.1035291966773395, + 0.09724148956280439, + 0.09173307971222787, + 0.08695471522794188, + 0.08281676088646635, + 0.07919417200588602, + 0.07593586364803404, + 0.07287799990742223, + 0.06985968143417957, + 0.06673873626918064, + 0.06340510202429181, + 0.05978972092496759, + 0.055867824095353666, + 0.05165665762115853, + 0.047208746270828425, + 0.04260242365480906, + 0.03793146928669459, + 0.033295357020735, + 0.028791038822792506, + 0.024506599776251622, + 0.02051670315339748 + ], + "xaxis": "x2", + "y": [ + -4.592193544240739, + -4.537591156419242, + -4.482988768597746, + -4.428386380776249, + -4.373783992954753, + -4.319181605133257, + -4.26457921731176, + -4.209976829490263, + -4.1553744416687675, + -4.100772053847271, + -4.046169666025774, + -3.9915672782042777, + -3.9369648903827814, + -3.8823625025612847, + -3.8277601147397884, + -3.773157726918292, + -3.7185553390967954, + -3.663952951275299, + -3.609350563453803, + -3.554748175632306, + -3.5001457878108098, + -3.4455433999893135, + -3.3909410121678167, + -3.33633862434632, + -3.281736236524824, + -3.2271338487033274, + -3.1725314608818307, + -3.117929073060335, + -3.063326685238838, + -3.0087242974173414, + -2.954121909595845, + -2.899519521774349, + -2.844917133952852, + -2.7903147461313558, + -2.7357123583098595, + -2.6811099704883627, + -2.6265075826668665, + -2.57190519484537, + -2.5173028070238734, + -2.462700419202377, + -2.408098031380881, + -2.353495643559384, + -2.298893255737888, + -2.2442908679163915, + -2.189688480094895, + -2.1350860922733985, + -2.080483704451902, + -2.0258813166304055, + -1.9712789288089092, + -1.9166765409874125, + -1.8620741531659162, + -1.80747176534442, + -1.7528693775229232, + -1.6982669897014269, + -1.6436646018799306, + -1.5890622140584338, + -1.5344598262369376, + -1.4798574384154413, + -1.4252550505939445, + -1.3706526627724482, + -1.3160502749509515, + -1.2614478871294552, + -1.206845499307959, + -1.1522431114864622, + -1.097640723664966, + -1.0430383358434696, + -0.9884359480219729, + -0.9338335602004766, + -0.8792311723789803, + -0.8246287845574836, + -0.7700263967359873, + -0.7154240089144905, + -0.6608216210929942, + -0.606219233271498, + -0.5516168454500017, + -0.49701445762850494, + -0.4424120698070082, + -0.38780968198551236, + -0.3332072941640156, + -0.2786049063425189, + -0.22400251852102304, + -0.1694001306995263, + -0.11479774287802957, + -0.06019535505653373, + -0.005592967235036994, + 0.04900942058645974, + 0.10361180840795559, + 0.15821419622945232, + 0.21281658405094905, + 0.2674189718724449, + 0.32202135969394163, + 0.37662374751543837, + 0.4312261353369351, + 0.48582852315843095, + 0.5404309109799277, + 0.5950332988014244, + 0.6496356866229203, + 0.704238074444417, + 0.7588404622659137, + 0.8134428500874091 + ], + "yaxis": "y1" + }, + { + "line": { + "color": "rgb(0,0,0)", + "width": 1.5 + }, + "mode": "lines", + "name": "", + "type": "scatter", + "x": [ + 0, + 0 + ], + "xaxis": "x2", + "y": [ + -4.592193544240739, + 0.8134428500874091 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "text", + "line": { + "color": "rgb(0,0,0)", + "width": 4 + }, + "mode": "lines", + "text": [ + "lower-quartile: -2.68", + "upper-quartile: -1.27" + ], + "type": "scatter", + "x": [ + 0, + 0 + ], + "xaxis": "x2", + "y": [ + -2.6757916928271364, + -1.269528610424158 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,255,255)", + "symbol": "square" + }, + "mode": "markers", + "text": [ + "median: -2.02" + ], + "type": "scatter", + "x": [ + 0 + ], + "xaxis": "x2", + "y": [ + -2.016991978273653 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "y", + "marker": { + "color": "rgb(255, 127, 14)", + "symbol": "line-ew-open" + }, + "mode": "markers", + "name": "", + "showlegend": false, + "type": "scatter", + "x": [ + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023, + -0.4666581581676023 + ], + "xaxis": "x2", + "y": [ + -2.1750130081836123, + -2.086844140167008, + -3.723244088497208, + -2.8609595850551877, + -3.1643773465852245, + -3.8483377752426673, + -3.6445436951879193, + -0.6074739742082083, + -2.027825388748657, + -2.017648439189299, + -3.913289230112893, + -2.928927655972173, + -2.6317675160740492, + -2.5546347523653052, + -2.520767395749536, + -2.4881289428132844, + -1.7201903706418509, + -2.533744620027809, + -2.270487949183869, + -2.301561988500076, + -3.629771040113451, + -2.1634417886890076, + -3.0698802689549156, + -3.205414485165492, + -3.5281563339612534, + -3.2523706963551176, + -2.4467583057457607, + -0.20554183401075932, + -2.336283828799941, + -0.8060813907641113, + -3.0502411846174473, + -1.0642779212689926, + -1.425062383795811, + -3.4774177750230955, + -1.7441849276594943, + -1.0202939960922965, + 0.18702451423969357, + -1.4751164494679485, + -2.0268713308824498, + -1.784253080976009, + -2.258227960556282, + -0.8109891874317541, + -1.8747664451127592, + -3.400566319759476, + -3.6867203892374034, + 0.35121151382887117, + -2.121956787105741, + -1.86322019021694, + -0.677220313225463, + -4.1560755461961705, + -1.4821866433031232, + -1.6396311726691823, + -1.1632221484110654, + -1.5436795303252413, + -1.5244052910379422, + -1.2137379608027326, + -3.218455931830591, + -2.554926500916877, + -2.3478112169945407, + -1.898522386139928, + 0.44886259492951286, + -1.787176820161813, + -1.912944985281178, + -2.3855922187348044, + 0.28760356705416257, + -2.2070016920371494, + -2.0343617922175867, + -1.3042305212674612, + -0.657000592315663, + -1.7153780633683864, + -1.8524033377679188, + -2.853032542390449, + 0.5865238064834886, + -0.15839037932997546, + -3.690338920928685, + -0.8987275230927496, + 0.002795756138537442, + -3.2374979707584, + -0.8612956825057732, + -1.4126151200846608, + -1.9312696879272306, + -2.291582680368464, + -2.3552833440518963, + -0.6403616844082838, + -3.3607317711620994, + 0.25016316880380973, + -1.0767342486314972, + -2.021898205659547, + 0.5828270049329318, + -0.2448969362405704, + 0.5907505672403488, + -3.245788640245045, + -1.482812700637807, + -2.7752533593257307, + -3.325958590051969, + -1.5817906587412174, + 0.13997004879082775, + -1.700318003837902, + -2.3906954484802183, + -3.3092573291144887, + -2.2261219274395656, + -2.0654001172588123, + -2.098049644825978, + -1.4746389616271323, + -2.9558683046805054, + -2.5625325799388783, + -2.7099181482317376, + -2.787072875517471, + -2.346276364054363, + -2.571589148566299, + -1.7981062243555508, + -1.347816881075541, + 0.3327289736593686, + -1.9596625803632362, + -1.1292452399008748, + -2.8875619539934716, + -1.9906104547577839, + -2.478949651205928, + -0.5645323434305465, + -2.240002695133849, + -3.3107377588357734, + -2.6394436543161044, + -3.657710533791227, + -0.2900838954329563, + -2.3350986209757343, + -2.5997596226700743, + -2.494033246841121, + 0.8134428500874091, + -0.2921359826286123, + -1.5257596713593427, + -3.1483212367480498, + -1.6815201024699105, + -0.9132506978468877, + -1.9229885966188767, + -0.652412200105216, + -2.550714001566444, + -0.7058877059354325, + -1.81323071338591, + -2.4493858932259984, + -2.133874153928388, + -1.1583942906357398, + -1.8861810015422131, + 0.22657232159948038, + -2.705814860777708, + 0.29475741310375714, + -1.9065519222129321, + -1.524552242598864, + -2.2916779659855857, + -2.333406520774063, + -3.5049433296411054, + -1.7680806809542005, + -2.1499265903666602, + -2.83525185850457, + -1.3864666062210675, + -1.708994211846355, + -1.3329229290289801, + -3.7000105231695226, + -2.015891350057597, + -2.4821608846700083, + -3.1083174360106076, + -1.198008820828683, + -3.4218862066483724, + -1.4249301182614, + -2.897836353952459, + -2.4821297222846295, + -2.970946877128119, + -2.2903413135544373, + -1.9312262355620937, + -2.2121768134022517, + -1.9684416235199917, + -1.4636723737062696, + -1.5195927466212453, + -2.8696436399873217, + -2.7767141799250172, + -2.7610573920837806, + -3.9918820099676733, + -2.0563059884818746, + -2.0814051413884807, + -1.6309377736835289, + -1.4357750724358365, + -1.1717149565542595, + -1.725911524698314, + -3.564377343225564, + -1.5133999920223737, + -2.484308330318434, + -0.7797697651558197, + -1.8504523589823534, + -2.453992190066753, + -1.601387063381822, + -2.9569999671998377, + -0.9006093802180191, + -3.3298984495260493, + -3.4815368642066815, + -2.705561614692186, + -2.139221505709078, + -2.59612477889241, + -3.57571497759295, + -0.0636588294255458, + -3.9270332438956164, + -2.302107428042938, + -2.0607240749225224, + -2.935973917943024, + -1.691800459019414, + -3.6624779069127937, + -2.3022319434190086, + -2.0492582690269097, + -0.4093650204242387, + -2.48714001603224, + -3.034569394735011, + -1.8357706225512613, + -1.416927177058887, + -3.723754924220186, + -1.7767390127122458, + -0.46006294526877856, + -1.1194228075630202, + -2.5520012114457575, + -2.1152670136907274, + 0.01881975198853869, + -1.925095241392223, + -3.5588668651519426, + -1.1669405375298951, + -3.332528450790413, + -0.9743249424771736, + -0.5196755259893433, + -2.1105376239154006, + -2.2381009066152155, + -2.673006210860801, + -1.533712220919484, + -1.8160607138843372, + -2.93063242341493, + -0.9027436687173529, + -2.1208058489431716, + -3.170901893508888, + -2.2681550525987246, + -0.2426537871144372, + -3.4275773985492837, + -3.3606359692751857, + -2.005845367980363, + -2.5188128522566156, + -0.9869023891610935, + -2.4910787220519985, + -2.665797132077488, + -1.1972256128006336, + -1.7602083855165702, + -2.2929101079496337, + -1.0862781545633453, + -2.7807374379733005, + -0.34213655491862616, + -2.4575524116080234, + -3.361459530591313, + -1.6650583456242383, + -1.7387326131662837, + -1.7636471422733564, + -4.376895528486373, + -1.5971221938194262, + -3.906042852671715, + -1.4153548924744817, + -2.3221608075129803, + -0.753103074489488, + -2.5728531046985665, + -2.201125750239457, + -0.44212521215527345, + -1.9549274582511849, + -3.5573058737126617, + -2.9084846832645876, + -1.937983266811317, + -2.5378332343828194, + -2.552977473544119, + -2.1873679337115823, + -2.8529545450533185, + -4.113954968660305, + -2.0874622604915003, + -0.2410019732530324, + -1.7950393063269052, + -1.799063476110865, + -3.1226169563444155, + -2.139237072061029, + -0.506919859100526, + -2.139090794086794, + -1.690824729195165, + -0.39231391289054884, + -3.097052786990442, + -2.372855896005092, + -2.3118063581049664, + -3.4737465492254795, + -2.6757916928271364, + -0.28676993659356875, + -1.7829018522670053, + -3.6877981859893447, + -0.5952323071273231, + -3.5672146920028256, + -0.9486384234532517, + -1.6353515880650666, + -1.7087187910241475, + -1.7667753800935853, + -0.6664551796713916, + -3.0760804044049332, + -2.28613979864001, + -0.38959506590685655, + -1.645422217626549, + -1.8779481147049795, + -1.269528610424158, + -2.1925804859022815, + 0.5174048752384817, + -2.24114876284779, + -1.4062568098182349, + -0.7614816959021589, + -1.1077295183639757, + -2.1883171864448387, + -1.9039654273807765, + -1.0774778484544396, + 0.12615511054651174, + -2.1721394415811353, + 0.3358548105758623, + -3.6839014873364544, + -1.919290380108761, + -1.9880735237012916, + -0.8619490391819393, + -2.2805462662150893, + -0.8199115301142148, + -2.1983412696902995, + -2.2163994465656502, + -2.3920058126922834, + -3.1336629207941433, + -0.7025053801609551, + -2.3597945579002815, + -1.5727122432234006, + -2.883585746681482, + -3.7597748687236745, + -1.882942341440741, + -0.5635044362070107, + -1.9874888903266184, + -0.011959006435554587, + -1.8903857537980921, + -3.3030319407127084, + -0.9045963920894862, + -1.8946137576655895, + -2.581778423881101, + -2.884191497210826, + -0.8313921298686471, + -2.8159063483160027, + -2.3578639677500504, + -2.191291320557765, + -0.7065914033472971, + -2.2580663004157135, + -2.0298713272227413, + -1.793369900892837, + -1.3627555959331081, + -1.0441562876591302, + -1.0976059176378976, + -2.469180039164176, + -1.0389952521137624, + 0.02020798647589661, + -2.5812033283368714, + -3.9853864073166614, + -1.616584268759663, + -1.627093332087174, + -1.8510658303588643, + -2.8882818224318307, + -1.4350090505088495, + -0.8025520939257447, + -0.313971895211697, + -2.938671342859576, + -2.2472443048801645, + -2.1847181871269106, + -0.839511097566489, + -0.7034144917961276, + -2.523451560061556, + -4.326210537126961, + -1.698396352712749, + -1.396685848913691, + -1.8301285460587888, + -0.4349058161125241, + -3.9206833789924156, + -3.4575779161624136, + -1.476821808702839, + 0.238455522173306, + -1.2716054687562646, + -1.4385896405258691, + -1.732456702153487, + -2.0159140555658497, + -0.8093649299638448, + -1.3307169784955146, + -2.3213996384278235, + -3.8738540724369477, + -1.826757845542883, + -2.5816177658931756, + -0.47630319319589365, + -3.1475448651893276, + -1.8432586327676916, + -1.409222011769697, + -1.0865410810506584, + -3.2693979846442898, + -0.7928954407273037, + -0.9398111678840098, + -1.395925587097032, + -1.9646436113601795, + -1.239106749012328, + -2.1929606116215625, + -0.4575077639005367, + -3.1303694201093855, + -2.21037564320486, + -2.632586287931551, + -2.121151285282744, + -1.599909835780882, + -3.578039880593429, + -1.8579832007124666, + -3.326551742060964, + -2.7398867619863134, + -2.3419238431373786, + -1.3905898574118218, + -1.1468848444348263, + -1.722593328910922, + -0.8085460954820507, + -2.2903348871480103, + -2.7398348404357398, + -2.384655761691597, + -0.6678138375196048, + -2.9230960227520306, + -1.0240413755877316, + -1.128048015662872, + -1.0318146637094836, + -1.177007700449713, + -2.96782072227176, + -1.2645816167371327, + -2.4701428913134924, + -2.034551793057247, + -0.9932022503639104, + -1.4845958810443716, + -3.510876225482981, + -2.1179751426483713, + -0.8871106611447039, + -3.1717156099843247, + -1.6134828450226246, + -1.1871421934941284, + -1.9249845197499404, + -3.8812967765656428, + -3.429780257322289, + -2.7623326534871464, + -2.203440963096748, + -1.460216067598787, + 0.18682963365777994, + -3.8213562956095357, + -1.1210966130722237, + -1.0105765898200274, + -1.2302122945815062, + -2.356651622403012, + -3.5527731220830407, + -3.058749250575424, + -2.271356258936275, + -3.266023868981438, + -3.6713731365213675, + -4.592193544240739, + -2.4572838649973434, + -2.0163355173580073, + -2.618525861278742, + -1.0474332000570339, + -2.030155448703512, + -3.1254871199200895, + -2.733218546568462, + -2.751578518625836, + -2.0111957145990584, + 0.14856901541225165, + -0.8895624613170141, + -0.7040860660760957, + -1.2703581153202095, + -1.1282757282117164, + 0.06438849487451082, + -1.467142754017705, + -0.9577083576102599, + -1.7295762862550919, + -3.2241318677116526, + -1.1579448073204013, + -3.3505440246220317, + -1.6645015630020867, + -1.6228711150596973, + -3.2459000625149486, + -1.8769247042730144, + -0.558914154072357, + -1.463207116798051, + -1.3464014840118996, + -1.1214056570878388, + -2.8067526374421865, + -1.5434780867669238, + -2.452141237142913, + -2.1409397221769653, + -4.072072970449104, + -2.9126741998276446, + -2.0351366057546536, + -2.9041606422100736, + -3.1631751084685478, + -3.3408731373029745, + -2.872035775447689, + -0.13907539960485993, + -1.8600302862995375, + -2.4564376949783595, + -3.816557484784937, + -2.604134269350457, + -1.4901084311084207, + 0.6593755999672011 + ], + "yaxis": "y1" + }, + { + "fill": "tonextx", + "fillcolor": "rgb(44, 160, 44)", + "hoverinfo": "text", + "line": { + "color": "rgb(0, 0, 0)", + "shape": "spline", + "width": 0.5 + }, + "mode": "lines", + "name": "", + "opacity": 0.5, + "text": [ + "(pdf(y), y)=(-0.02, -4.46)", + "(pdf(y), y)=(-0.02, -4.40)", + "(pdf(y), y)=(-0.02, -4.35)", + "(pdf(y), y)=(-0.03, -4.29)", + "(pdf(y), y)=(-0.03, -4.24)", + "(pdf(y), y)=(-0.03, -4.18)", + "(pdf(y), y)=(-0.04, -4.13)", + "(pdf(y), y)=(-0.04, -4.08)", + "(pdf(y), y)=(-0.05, -4.02)", + "(pdf(y), y)=(-0.06, -3.97)", + "(pdf(y), y)=(-0.06, -3.91)", + "(pdf(y), y)=(-0.07, -3.86)", + "(pdf(y), y)=(-0.08, -3.80)", + "(pdf(y), y)=(-0.09, -3.75)", + "(pdf(y), y)=(-0.10, -3.69)", + "(pdf(y), y)=(-0.11, -3.64)", + "(pdf(y), y)=(-0.12, -3.58)", + "(pdf(y), y)=(-0.13, -3.53)", + "(pdf(y), y)=(-0.15, -3.47)", + "(pdf(y), y)=(-0.16, -3.42)", + "(pdf(y), y)=(-0.18, -3.36)", + "(pdf(y), y)=(-0.19, -3.31)", + "(pdf(y), y)=(-0.20, -3.25)", + "(pdf(y), y)=(-0.22, -3.20)", + "(pdf(y), y)=(-0.23, -3.14)", + "(pdf(y), y)=(-0.24, -3.09)", + "(pdf(y), y)=(-0.25, -3.04)", + "(pdf(y), y)=(-0.26, -2.98)", + "(pdf(y), y)=(-0.27, -2.93)", + "(pdf(y), y)=(-0.27, -2.87)", + "(pdf(y), y)=(-0.28, -2.82)", + "(pdf(y), y)=(-0.28, -2.76)", + "(pdf(y), y)=(-0.29, -2.71)", + "(pdf(y), y)=(-0.29, -2.65)", + "(pdf(y), y)=(-0.30, -2.60)", + "(pdf(y), y)=(-0.30, -2.54)", + "(pdf(y), y)=(-0.31, -2.49)", + "(pdf(y), y)=(-0.32, -2.43)", + "(pdf(y), y)=(-0.32, -2.38)", + "(pdf(y), y)=(-0.33, -2.32)", + "(pdf(y), y)=(-0.34, -2.27)", + "(pdf(y), y)=(-0.35, -2.21)", + "(pdf(y), y)=(-0.36, -2.16)", + "(pdf(y), y)=(-0.36, -2.10)", + "(pdf(y), y)=(-0.37, -2.05)", + "(pdf(y), y)=(-0.37, -1.99)", + "(pdf(y), y)=(-0.37, -1.94)", + "(pdf(y), y)=(-0.38, -1.89)", + "(pdf(y), y)=(-0.37, -1.83)", + "(pdf(y), y)=(-0.37, -1.78)", + "(pdf(y), y)=(-0.37, -1.72)", + "(pdf(y), y)=(-0.36, -1.67)", + "(pdf(y), y)=(-0.36, -1.61)", + "(pdf(y), y)=(-0.35, -1.56)", + "(pdf(y), y)=(-0.34, -1.50)", + "(pdf(y), y)=(-0.33, -1.45)", + "(pdf(y), y)=(-0.32, -1.39)", + "(pdf(y), y)=(-0.30, -1.34)", + "(pdf(y), y)=(-0.29, -1.28)", + "(pdf(y), y)=(-0.28, -1.23)", + "(pdf(y), y)=(-0.27, -1.17)", + "(pdf(y), y)=(-0.26, -1.12)", + "(pdf(y), y)=(-0.25, -1.06)", + "(pdf(y), y)=(-0.24, -1.01)", + "(pdf(y), y)=(-0.23, -0.95)", + "(pdf(y), y)=(-0.22, -0.90)", + "(pdf(y), y)=(-0.22, -0.85)", + "(pdf(y), y)=(-0.21, -0.79)", + "(pdf(y), y)=(-0.20, -0.74)", + "(pdf(y), y)=(-0.19, -0.68)", + "(pdf(y), y)=(-0.19, -0.63)", + "(pdf(y), y)=(-0.18, -0.57)", + "(pdf(y), y)=(-0.17, -0.52)", + "(pdf(y), y)=(-0.16, -0.46)", + "(pdf(y), y)=(-0.15, -0.41)", + "(pdf(y), y)=(-0.14, -0.35)", + "(pdf(y), y)=(-0.13, -0.30)", + "(pdf(y), y)=(-0.12, -0.24)", + "(pdf(y), y)=(-0.11, -0.19)", + "(pdf(y), y)=(-0.10, -0.13)", + "(pdf(y), y)=(-0.09, -0.08)", + "(pdf(y), y)=(-0.09, -0.02)", + "(pdf(y), y)=(-0.08, 0.03)", + "(pdf(y), y)=(-0.07, 0.09)", + "(pdf(y), y)=(-0.06, 0.14)", + "(pdf(y), y)=(-0.05, 0.19)", + "(pdf(y), y)=(-0.04, 0.25)", + "(pdf(y), y)=(-0.04, 0.30)", + "(pdf(y), y)=(-0.03, 0.36)", + "(pdf(y), y)=(-0.03, 0.41)", + "(pdf(y), y)=(-0.02, 0.47)", + "(pdf(y), y)=(-0.02, 0.52)", + "(pdf(y), y)=(-0.02, 0.58)", + "(pdf(y), y)=(-0.02, 0.63)", + "(pdf(y), y)=(-0.02, 0.69)", + "(pdf(y), y)=(-0.02, 0.74)", + "(pdf(y), y)=(-0.02, 0.80)", + "(pdf(y), y)=(-0.01, 0.85)", + "(pdf(y), y)=(-0.01, 0.91)", + "(pdf(y), y)=(-0.01, 0.96)" + ], + "type": "scatter", + "x": [ + -0.0161002514288629, + -0.019136469195142246, + -0.02243744661484054, + -0.026018372241440126, + -0.02991417264262412, + -0.03417913984069261, + -0.03888228490602973, + -0.04409929984251227, + -0.04990307038651734, + -0.05635524114686122, + -0.06350112971071993, + -0.07136928580492653, + -0.07997543486929644, + -0.08932889059982022, + -0.09943830973077909, + -0.11031334771908778, + -0.12195957138332877, + -0.13436579280758543, + -0.14748540318447118, + -0.16121569149248613, + -0.17538085311547696, + -0.18972484974860646, + -0.2039191476092132, + -0.21758767416905211, + -0.2303475445106128, + -0.2418600325358713, + -0.2518829236196403, + -0.2603137639049089, + -0.26721426234585366, + -0.27280927583203257, + -0.27745881794380667, + -0.2816072185471197, + -0.28571849840203883, + -0.2902099219318125, + -0.29539578944035183, + -0.3014508327178158, + -0.30839786927988805, + -0.31611897689632534, + -0.32438482441913896, + -0.3328940570053496, + -0.34131423071263023, + -0.3493174080450337, + -0.35660628341640566, + -0.36292956408608906, + -0.36808750671338747, + -0.37192973117933387, + -0.37434790857289135, + -0.3752660616697818, + -0.374631302966832, + -0.37240781534506784, + -0.36857643214126784, + -0.3631409824266856, + -0.3561406368807783, + -0.3476652778672288, + -0.33786919754611133, + -0.32697793819514215, + -0.3152841652726235, + -0.3031308617789325, + -0.2908831316008864, + -0.27889262032205986, + -0.26746031563251293, + -0.2568039800840873, + -0.24703577566693682, + -0.23815404302947762, + -0.23005099601136897, + -0.22253552994363154, + -0.21536767988090388, + -0.20829889340047755, + -0.20111075685491964, + -0.19364472158398202, + -0.18581707194110952, + -0.1776167159770052, + -0.16908761846727505, + -0.1603016501475303, + -0.1513300582262649, + -0.14222184216333375, + -0.13299496316638498, + -0.12364225244245536, + -0.11414939996168151, + -0.10451889573193138, + -0.09479227727294011, + -0.0850638320307797, + -0.07548158646530696, + -0.06623502442506052, + -0.05753239248937956, + -0.049572758243736345, + -0.042518738772891904, + -0.036475075751802484, + -0.03147645744004392, + -0.02748580500647195, + -0.024402228892588567, + -0.02207640090001596, + -0.02033031947210891, + -0.01897831353648904, + -0.017846471346872405, + -0.016788311107493827, + -0.015695278843574793, + -0.01450146249600303, + -0.013182679923185985, + -0.01175077439764553 + ], + "xaxis": "x3", + "y": [ + -4.458603571285355, + -4.403855560264126, + -4.349107549242897, + -4.294359538221668, + -4.23961152720044, + -4.1848635161792105, + -4.130115505157982, + -4.075367494136753, + -4.020619483115524, + -3.9658714720942956, + -3.9111234610730667, + -3.856375450051838, + -3.801627439030609, + -3.7468794280093802, + -3.6921314169881514, + -3.6373834059669226, + -3.5826353949456937, + -3.527887383924465, + -3.473139372903236, + -3.4183913618820068, + -3.3636433508607784, + -3.308895339839549, + -3.2541473288183207, + -3.1993993177970914, + -3.144651306775863, + -3.0899032957546337, + -3.0351552847334053, + -2.980407273712176, + -2.9256592626909477, + -2.8709112516697184, + -2.81616324064849, + -2.7614152296272607, + -2.7066672186060323, + -2.651919207584803, + -2.5971711965635746, + -2.5424231855423454, + -2.487675174521117, + -2.4329271634998877, + -2.378179152478659, + -2.32343114145743, + -2.268683130436201, + -2.2139351194149723, + -2.1591871083937435, + -2.1044390973725147, + -2.049691086351286, + -1.994943075330057, + -1.9401950643088282, + -1.8854470532875993, + -1.8306990422663705, + -1.7759510312451416, + -1.7212030202239128, + -1.666455009202684, + -1.6117069981814551, + -1.5569589871602263, + -1.5022109761389975, + -1.4474629651177686, + -1.3927149540965398, + -1.337966943075311, + -1.283218932054082, + -1.2284709210328533, + -1.1737229100116244, + -1.1189748989903956, + -1.0642268879691668, + -1.009478876947938, + -0.9547308659267091, + -0.8999828549054802, + -0.8452348438842514, + -0.7904868328630226, + -0.7357388218417937, + -0.6809908108205649, + -0.6262427997993361, + -0.5714947887781072, + -0.5167467777568784, + -0.46199876673564955, + -0.40725075571442027, + -0.35250274469319187, + -0.2977547336719626, + -0.2430067226507342, + -0.18825871162950492, + -0.13351070060827652, + -0.07876268958704724, + -0.024014678565818848, + 0.030733332455410434, + 0.08548134347663883, + 0.1402293544978681, + 0.1949773655190965, + 0.24972537654032578, + 0.3044733875615542, + 0.35922139858278346, + 0.41396940960401185, + 0.46871742062524113, + 0.5234654316464695, + 0.5782134426676988, + 0.6329614536889272, + 0.6877094647101565, + 0.7424574757313849, + 0.7972054867526142, + 0.8519534977738425, + 0.9067015087950718, + 0.9614495198163007 + ], + "yaxis": "y1" + }, + { + "fill": "tonextx", + "fillcolor": "rgb(44, 160, 44)", + "hoverinfo": "text", + "line": { + "color": "rgb(0, 0, 0)", + "shape": "spline", + "width": 0.5 + }, + "mode": "lines", + "name": "", + "opacity": 0.5, + "text": [ + "(pdf(y), y)=(0.02, -4.46)", + "(pdf(y), y)=(0.02, -4.40)", + "(pdf(y), y)=(0.02, -4.35)", + "(pdf(y), y)=(0.03, -4.29)", + "(pdf(y), y)=(0.03, -4.24)", + "(pdf(y), y)=(0.03, -4.18)", + "(pdf(y), y)=(0.04, -4.13)", + "(pdf(y), y)=(0.04, -4.08)", + "(pdf(y), y)=(0.05, -4.02)", + "(pdf(y), y)=(0.06, -3.97)", + "(pdf(y), y)=(0.06, -3.91)", + "(pdf(y), y)=(0.07, -3.86)", + "(pdf(y), y)=(0.08, -3.80)", + "(pdf(y), y)=(0.09, -3.75)", + "(pdf(y), y)=(0.10, -3.69)", + "(pdf(y), y)=(0.11, -3.64)", + "(pdf(y), y)=(0.12, -3.58)", + "(pdf(y), y)=(0.13, -3.53)", + "(pdf(y), y)=(0.15, -3.47)", + "(pdf(y), y)=(0.16, -3.42)", + "(pdf(y), y)=(0.18, -3.36)", + "(pdf(y), y)=(0.19, -3.31)", + "(pdf(y), y)=(0.20, -3.25)", + "(pdf(y), y)=(0.22, -3.20)", + "(pdf(y), y)=(0.23, -3.14)", + "(pdf(y), y)=(0.24, -3.09)", + "(pdf(y), y)=(0.25, -3.04)", + "(pdf(y), y)=(0.26, -2.98)", + "(pdf(y), y)=(0.27, -2.93)", + "(pdf(y), y)=(0.27, -2.87)", + "(pdf(y), y)=(0.28, -2.82)", + "(pdf(y), y)=(0.28, -2.76)", + "(pdf(y), y)=(0.29, -2.71)", + "(pdf(y), y)=(0.29, -2.65)", + "(pdf(y), y)=(0.30, -2.60)", + "(pdf(y), y)=(0.30, -2.54)", + "(pdf(y), y)=(0.31, -2.49)", + "(pdf(y), y)=(0.32, -2.43)", + "(pdf(y), y)=(0.32, -2.38)", + "(pdf(y), y)=(0.33, -2.32)", + "(pdf(y), y)=(0.34, -2.27)", + "(pdf(y), y)=(0.35, -2.21)", + "(pdf(y), y)=(0.36, -2.16)", + "(pdf(y), y)=(0.36, -2.10)", + "(pdf(y), y)=(0.37, -2.05)", + "(pdf(y), y)=(0.37, -1.99)", + "(pdf(y), y)=(0.37, -1.94)", + "(pdf(y), y)=(0.38, -1.89)", + "(pdf(y), y)=(0.37, -1.83)", + "(pdf(y), y)=(0.37, -1.78)", + "(pdf(y), y)=(0.37, -1.72)", + "(pdf(y), y)=(0.36, -1.67)", + "(pdf(y), y)=(0.36, -1.61)", + "(pdf(y), y)=(0.35, -1.56)", + "(pdf(y), y)=(0.34, -1.50)", + "(pdf(y), y)=(0.33, -1.45)", + "(pdf(y), y)=(0.32, -1.39)", + "(pdf(y), y)=(0.30, -1.34)", + "(pdf(y), y)=(0.29, -1.28)", + "(pdf(y), y)=(0.28, -1.23)", + "(pdf(y), y)=(0.27, -1.17)", + "(pdf(y), y)=(0.26, -1.12)", + "(pdf(y), y)=(0.25, -1.06)", + "(pdf(y), y)=(0.24, -1.01)", + "(pdf(y), y)=(0.23, -0.95)", + "(pdf(y), y)=(0.22, -0.90)", + "(pdf(y), y)=(0.22, -0.85)", + "(pdf(y), y)=(0.21, -0.79)", + "(pdf(y), y)=(0.20, -0.74)", + "(pdf(y), y)=(0.19, -0.68)", + "(pdf(y), y)=(0.19, -0.63)", + "(pdf(y), y)=(0.18, -0.57)", + "(pdf(y), y)=(0.17, -0.52)", + "(pdf(y), y)=(0.16, -0.46)", + "(pdf(y), y)=(0.15, -0.41)", + "(pdf(y), y)=(0.14, -0.35)", + "(pdf(y), y)=(0.13, -0.30)", + "(pdf(y), y)=(0.12, -0.24)", + "(pdf(y), y)=(0.11, -0.19)", + "(pdf(y), y)=(0.10, -0.13)", + "(pdf(y), y)=(0.09, -0.08)", + "(pdf(y), y)=(0.09, -0.02)", + "(pdf(y), y)=(0.08, 0.03)", + "(pdf(y), y)=(0.07, 0.09)", + "(pdf(y), y)=(0.06, 0.14)", + "(pdf(y), y)=(0.05, 0.19)", + "(pdf(y), y)=(0.04, 0.25)", + "(pdf(y), y)=(0.04, 0.30)", + "(pdf(y), y)=(0.03, 0.36)", + "(pdf(y), y)=(0.03, 0.41)", + "(pdf(y), y)=(0.02, 0.47)", + "(pdf(y), y)=(0.02, 0.52)", + "(pdf(y), y)=(0.02, 0.58)", + "(pdf(y), y)=(0.02, 0.63)", + "(pdf(y), y)=(0.02, 0.69)", + "(pdf(y), y)=(0.02, 0.74)", + "(pdf(y), y)=(0.02, 0.80)", + "(pdf(y), y)=(0.01, 0.85)", + "(pdf(y), y)=(0.01, 0.91)", + "(pdf(y), y)=(0.01, 0.96)" + ], + "type": "scatter", + "x": [ + 0.0161002514288629, + 0.019136469195142246, + 0.02243744661484054, + 0.026018372241440126, + 0.02991417264262412, + 0.03417913984069261, + 0.03888228490602973, + 0.04409929984251227, + 0.04990307038651734, + 0.05635524114686122, + 0.06350112971071993, + 0.07136928580492653, + 0.07997543486929644, + 0.08932889059982022, + 0.09943830973077909, + 0.11031334771908778, + 0.12195957138332877, + 0.13436579280758543, + 0.14748540318447118, + 0.16121569149248613, + 0.17538085311547696, + 0.18972484974860646, + 0.2039191476092132, + 0.21758767416905211, + 0.2303475445106128, + 0.2418600325358713, + 0.2518829236196403, + 0.2603137639049089, + 0.26721426234585366, + 0.27280927583203257, + 0.27745881794380667, + 0.2816072185471197, + 0.28571849840203883, + 0.2902099219318125, + 0.29539578944035183, + 0.3014508327178158, + 0.30839786927988805, + 0.31611897689632534, + 0.32438482441913896, + 0.3328940570053496, + 0.34131423071263023, + 0.3493174080450337, + 0.35660628341640566, + 0.36292956408608906, + 0.36808750671338747, + 0.37192973117933387, + 0.37434790857289135, + 0.3752660616697818, + 0.374631302966832, + 0.37240781534506784, + 0.36857643214126784, + 0.3631409824266856, + 0.3561406368807783, + 0.3476652778672288, + 0.33786919754611133, + 0.32697793819514215, + 0.3152841652726235, + 0.3031308617789325, + 0.2908831316008864, + 0.27889262032205986, + 0.26746031563251293, + 0.2568039800840873, + 0.24703577566693682, + 0.23815404302947762, + 0.23005099601136897, + 0.22253552994363154, + 0.21536767988090388, + 0.20829889340047755, + 0.20111075685491964, + 0.19364472158398202, + 0.18581707194110952, + 0.1776167159770052, + 0.16908761846727505, + 0.1603016501475303, + 0.1513300582262649, + 0.14222184216333375, + 0.13299496316638498, + 0.12364225244245536, + 0.11414939996168151, + 0.10451889573193138, + 0.09479227727294011, + 0.0850638320307797, + 0.07548158646530696, + 0.06623502442506052, + 0.05753239248937956, + 0.049572758243736345, + 0.042518738772891904, + 0.036475075751802484, + 0.03147645744004392, + 0.02748580500647195, + 0.024402228892588567, + 0.02207640090001596, + 0.02033031947210891, + 0.01897831353648904, + 0.017846471346872405, + 0.016788311107493827, + 0.015695278843574793, + 0.01450146249600303, + 0.013182679923185985, + 0.01175077439764553 + ], + "xaxis": "x3", + "y": [ + -4.458603571285355, + -4.403855560264126, + -4.349107549242897, + -4.294359538221668, + -4.23961152720044, + -4.1848635161792105, + -4.130115505157982, + -4.075367494136753, + -4.020619483115524, + -3.9658714720942956, + -3.9111234610730667, + -3.856375450051838, + -3.801627439030609, + -3.7468794280093802, + -3.6921314169881514, + -3.6373834059669226, + -3.5826353949456937, + -3.527887383924465, + -3.473139372903236, + -3.4183913618820068, + -3.3636433508607784, + -3.308895339839549, + -3.2541473288183207, + -3.1993993177970914, + -3.144651306775863, + -3.0899032957546337, + -3.0351552847334053, + -2.980407273712176, + -2.9256592626909477, + -2.8709112516697184, + -2.81616324064849, + -2.7614152296272607, + -2.7066672186060323, + -2.651919207584803, + -2.5971711965635746, + -2.5424231855423454, + -2.487675174521117, + -2.4329271634998877, + -2.378179152478659, + -2.32343114145743, + -2.268683130436201, + -2.2139351194149723, + -2.1591871083937435, + -2.1044390973725147, + -2.049691086351286, + -1.994943075330057, + -1.9401950643088282, + -1.8854470532875993, + -1.8306990422663705, + -1.7759510312451416, + -1.7212030202239128, + -1.666455009202684, + -1.6117069981814551, + -1.5569589871602263, + -1.5022109761389975, + -1.4474629651177686, + -1.3927149540965398, + -1.337966943075311, + -1.283218932054082, + -1.2284709210328533, + -1.1737229100116244, + -1.1189748989903956, + -1.0642268879691668, + -1.009478876947938, + -0.9547308659267091, + -0.8999828549054802, + -0.8452348438842514, + -0.7904868328630226, + -0.7357388218417937, + -0.6809908108205649, + -0.6262427997993361, + -0.5714947887781072, + -0.5167467777568784, + -0.46199876673564955, + -0.40725075571442027, + -0.35250274469319187, + -0.2977547336719626, + -0.2430067226507342, + -0.18825871162950492, + -0.13351070060827652, + -0.07876268958704724, + -0.024014678565818848, + 0.030733332455410434, + 0.08548134347663883, + 0.1402293544978681, + 0.1949773655190965, + 0.24972537654032578, + 0.3044733875615542, + 0.35922139858278346, + 0.41396940960401185, + 0.46871742062524113, + 0.5234654316464695, + 0.5782134426676988, + 0.6329614536889272, + 0.6877094647101565, + 0.7424574757313849, + 0.7972054867526142, + 0.8519534977738425, + 0.9067015087950718, + 0.9614495198163007 + ], + "yaxis": "y1" + }, + { + "line": { + "color": "rgb(0,0,0)", + "width": 1.5 + }, + "mode": "lines", + "name": "", + "type": "scatter", + "x": [ + 0, + 0 + ], + "xaxis": "x3", + "y": [ + -4.458603571285355, + 0.8537582372723311 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "text", + "line": { + "color": "rgb(0,0,0)", + "width": 4 + }, + "mode": "lines", + "text": [ + "lower-quartile: -2.68", + "upper-quartile: -1.23" + ], + "type": "scatter", + "x": [ + 0, + 0 + ], + "xaxis": "x3", + "y": [ + -2.6801442927933152, + -1.226131276476333 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,255,255)", + "symbol": "square" + }, + "mode": "markers", + "text": [ + "median: -1.94" + ], + "type": "scatter", + "x": [ + 0 + ], + "xaxis": "x3", + "y": [ + -1.9388778758480196 + ], + "yaxis": "y1" + }, + { + "hoverinfo": "y", + "marker": { + "color": "rgb(44, 160, 44)", + "symbol": "line-ew-open" + }, + "mode": "markers", + "name": "", + "showlegend": false, + "type": "scatter", + "x": [ + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817, + -0.45031927400373817 + ], + "xaxis": "x3", + "y": [ + -1.6867650518527828, + -1.0576909930100955, + -1.219647881184274, + -3.1661747339507853, + -0.8152980261760499, + -2.1917531135642, + -2.3814665130054986, + -2.842354091965338, + -1.8408012367473794, + -0.5254621256113972, + -1.4848950588421475, + -3.0246796861353484, + -1.6758490926889418, + -2.3351876112861727, + -1.6204759863531781, + -2.588538306767112, + -1.842815616401349, + -1.689529131712783, + -1.6414749015681127, + -3.1947427606826535, + -1.8477634897125332, + -0.9576697736794437, + -1.7080461934793612, + -0.26400970598815476, + -2.6375829346487913, + -0.2925557468487332, + -2.1951454939899926, + -2.1614261571816846, + -2.567958512914079, + -2.8609667360585096, + -1.1564153011956262, + -2.477078278807131, + -0.8018004574973465, + -3.6677699956537744, + -0.6966121934726848, + -1.5502086510565891, + -1.396841115827266, + -2.3479449802295873, + -1.8613330247291107, + -1.558229207385966, + -1.882152256290348, + -0.552571594912201, + -1.3133952422512807, + -1.792517780739371, + -0.6371630155892509, + -2.4507822368170533, + -1.95458289467379, + -3.1094959060161695, + -1.9837758865879183, + -0.298410721413052, + -3.0318786484322793, + -0.5935234806683456, + -2.3277691586212175, + -1.589990384453405, + -1.7853872309962802, + -2.961653667470164, + -1.9940105014256848, + -3.7293991886570597, + -1.1990748696114788, + -0.8252509802149679, + -2.3379543090823143, + -1.5923278037390929, + -2.917466143550793, + -1.4580326384430657, + -3.0210555230121297, + -2.2749382628038477, + -2.3722210150752057, + -0.7924636367149538, + -1.7530472802155215, + -2.67877515449005, + -1.4857502634754631, + -3.373936478238088, + -0.22680042328760175, + -1.9236098452627552, + -2.3552543927858434, + -3.436042310266532, + -2.3253016006484555, + -2.7792728601463446, + -2.3705270428960636, + -2.7245735030128313, + -0.727879833398118, + -1.665134688924999, + -1.868978714401461, + -2.2496626152135706, + -1.498156402178695, + -3.501261951900723, + -4.1846054633049565, + -0.6281735379414053, + -2.2255591173884977, + -3.2242527635755476, + -3.145744272107943, + -1.0717212029278484, + -2.8920602343981416, + -1.2255853269116666, + -2.1444213897024977, + -3.7310140694961245, + -2.4549095931567395, + -2.042600550415669, + -2.3154249713722352, + -2.1361378991395745, + -2.920667897398141, + -2.563049109914555, + -1.0672795738097998, + -1.4722037156704162, + -2.9169393048662338, + -0.22537595379324915, + -1.221397719917288, + -1.191683992663064, + -2.632474339498606, + -2.9689781795416574, + -3.1254134631432606, + -3.751052128490506, + -0.7987529971153426, + -2.2537238372118686, + -1.9619637595575283, + -1.9434775833565083, + 0.5026601710145013, + -2.9407487551808194, + -2.1853940578459317, + -1.9950168427800141, + -2.078822177559779, + -0.9159233359728285, + -1.4090088318897882, + -0.46528350643715033, + -2.6498881567793515, + -2.2812486592879124, + -0.22989034078383996, + -1.1792170967470452, + -3.0443279949425026, + -0.2000594482010971, + -2.6801442927933152, + -2.8162758059213546, + -3.239317146699752, + -2.0985195053633072, + 0.8537582372723311, + -2.419549943619388, + -3.25938838968447, + -1.230273848382495, + -1.536280543027337, + -2.9427589490532853, + -1.6229908862943159, + -1.5670281678210358, + -1.8670102924712135, + -2.3803760919993633, + -2.504183845288382, + -1.405341873687597, + -0.38330165617308487, + -0.06353842333883053, + -0.9135506986932427, + -1.0185239714995686, + -1.9397524646016115, + -2.144625619846945, + -1.681287079389877, + -2.191119846153623, + -2.3920515988445405, + -2.7289445814844315, + -0.5083571014117367, + -1.136224839189167, + -3.354383398254533, + -1.3557371801610616, + -2.9644203572821897, + -1.87011501411025, + -2.0400925070272913, + -1.9380032870944277, + -2.8539159557632123, + -0.6644554356009877, + -1.2871726057376627, + -3.1585651317739005, + -0.6958363723733294, + -3.0419336099677494, + -2.316886852195035, + -3.5360321028965593, + -0.7345593129467136, + -3.4590676843514423, + -1.5497426348270757, + -0.9105780751801298, + -3.472231503001283, + -1.6084470832232813, + -2.9520386107223864, + -2.60695745374629, + -1.4638454976182609, + -1.540485207194608, + -2.2708728246305925, + -1.5110076766833034, + -3.4497343076460902, + -2.9326460893217434, + -1.5458803366580782, + -1.226131276476333, + -2.4480593186063997, + -2.426722484732108, + -1.901191501041615, + -3.878930728950732, + -2.268338971663448, + -2.6300288767570486, + -2.491568667573731, + -1.6972294202230822, + -0.02729726335690974, + -1.09955790704381, + -3.438841259320073, + -3.2550496386471783, + -2.880084095325808, + -2.5194884552596206, + -1.3768806148569235, + -1.381546999453518, + -2.6762169391997475, + -2.0519321491516473, + -0.8466750274522541, + -2.7949716161075315, + -0.6792775090366223, + -0.9616958085016591, + -1.5374889977005912, + -1.3363775756123095, + -2.2160490449771126, + -1.1042697527000311, + -2.997332727861605, + -2.068544907063214, + -0.15599194502053404, + -3.4663236847322585, + -1.3421769683257756, + -2.0462080827252285, + -1.8968290846374285, + -1.7687802742529373, + -2.9566298108052402, + -0.1599361584479544, + -1.883736544779289, + -2.8003212872698793, + -3.6291676857887216, + -1.4579701044675262, + -0.805624478374197, + -1.248149719354863, + -2.156309231087546, + -1.1375139054760948, + -0.02634167128076803, + -2.173262787355553, + -1.802461852843557, + -3.2519968400419486, + -1.193098485884608, + -0.37531383053834233, + -3.0215972229756565, + -1.6212314579002092, + -2.9916799639236173, + -1.7970865052621883, + -2.954623958237196, + -2.5819575797704477, + -0.7363762941650527, + -2.434621808556242, + -1.4380631722631276, + -1.887469835286945, + -4.458603571285355, + -2.782621078850198, + -0.3678150732015435, + -3.181584747916128, + -2.1648508484418807, + -2.355060072542053, + -1.1387434097784614, + -0.5350891329133123, + -2.0149500727233307, + -3.3136917216105966, + -1.400293358043926, + -3.0508880994406526, + -2.443051640488431, + -2.7595815027602386, + -3.5936587521283982, + -2.3995694221502317, + 0.7275641061217968, + -0.6473462034173156, + -0.5370646950657354, + -2.0116791917466466, + -3.0236772094193123, + -0.9539621098948283, + -0.6313771866135258, + -2.994534287031134, + -0.6705428909261277, + -2.326023945454768, + -1.3313762163733514, + -3.9201029797949047, + -2.2898199724396844, + -1.925935223591591, + 0.7503629361165016, + -1.4354040333629103, + -2.525071934611956, + -0.7362589165849611, + -2.872067785672497, + -1.6992596903587753, + -3.1536211099461062, + -1.0763887458597714, + -2.251251768115559, + -1.6025338490625658, + -1.1309904164266245, + -0.764957300137578, + -4.276558735065544, + -2.024951467604006, + -3.068930955986641, + -1.1504287866879563, + -1.8992896436168938, + -0.8087546557939349, + -0.8316417585376366, + -2.7527545975735146, + -0.12141183941350286, + -2.6786968321344045, + -2.8495807804659865, + -1.02282439515449, + -1.9500316966014637, + -2.4725622956755653, + -0.2706971959256208, + -1.2706947049458113, + -3.324226951917008, + -3.2046291715764847, + -1.4243700875752943, + -1.6474300834013014, + -1.256533743346475, + -3.0793421818632103, + -0.6380250197248762, + -1.7202710665705736, + -3.9991620190215436, + -2.31020761320038, + -3.1755407104347926, + -2.784005065214288, + -3.3000100712248495, + -0.11593736464151738, + -1.6195454616857838, + -2.1797370749924947, + -2.415133021098776, + -2.709014132271657, + -1.4760677278769956, + -0.7083374997009921, + -1.3508064645550362, + -2.169506387611536, + -0.5623673114330852, + -1.069674602272487, + -0.30987904066402994, + -3.0969757628793797, + -2.017455434038301, + -2.938109486103262, + -2.2914148004455397, + -3.172240632923609, + -2.591879452900985, + -1.3222924340010749, + -1.9234939678953284, + -0.8114573489122081, + -1.5713285730886113, + -1.9621229972409042, + -1.0875151280408808, + -3.0820249900270023, + -1.1801060950689068, + -2.645727301499097, + -3.4893895162168205, + -0.5841497382255809, + -2.8867204397153015, + -1.9914374679728104, + -1.719706426505903, + -1.5218453580069946, + -0.49403979161096756, + -1.954842373752247, + -2.2371528691801528, + -1.6744482381369787, + -1.8302728340244554, + -1.55747562316478, + -1.6383744304341292, + -1.4284017709484336, + -1.9335755555876357, + -2.342733715423277, + -1.098797688659129, + -1.0240186891494196, + -1.9441367543564292, + -2.0497198047145, + -2.7705311713906107, + -1.40688706623266, + -0.699797840115151, + -1.6531487931349074, + -3.000515755710592, + -3.7831657604613773, + -3.1806877894079815, + -2.6074546372856595, + -2.7199580738533617, + -0.9574673481495053, + -4.285224138903423, + -0.100172080877029, + -1.4231628966068168, + -3.0869096034411836, + 0.2532227388346451, + -0.9085600610581912, + -3.5951793213606953, + -3.3377392035856426, + -2.42724253767787, + -2.551992068851229, + -1.732113733441408, + 0.9614495198163007, + -1.6398607880862266, + -1.6787484000395776, + -1.4351978490852184, + -1.3954304486114837, + -2.709031426950066, + -1.6783148973835509, + -1.504180354930679, + -1.7836308204627909, + -0.005225458701989094, + -2.2900828659512897, + -3.7071708646939814, + -2.942807895082364, + -1.1627523172555851, + -3.985500066809503, + -3.6934368352450875, + -0.38237757912781056, + -0.43914768212856603, + -1.0998120097193096, + -1.542426740016971, + -1.5491786087456274, + -2.043895463825823, + -3.746244071451658, + -2.52595522620134, + -0.7917781153415928, + -2.0255809759406924, + -2.0671466566047645, + -0.14300528479684949, + -0.557899162042595, + -1.8653331379616802, + -2.0497425820831596, + -2.4965257370328207, + -1.900562309565788, + 0.5884778598290112, + -4.2198001475160725, + -2.0555191167656783, + -1.7980460447601525, + -2.115860001097917, + -0.5828084914426066, + -3.4023569007876686, + -1.8813830759526342, + -2.0067719152470493, + -2.1317395165950037, + -1.5431658450370358, + -2.9512907532040487, + -1.6445010680579035, + 0.21689639483015988, + -0.14544102474846454, + -2.802066871958539, + -1.9103808382624359, + -1.6283313262393602, + -3.194914261914806, + -2.016257537089821, + -0.11372506294229745, + -1.3029907237921612, + -0.23500937475011585, + -1.6081810741110893, + -1.8499353654770403, + -2.3578959401066077, + -3.4397401932542375, + -2.2634941291017636, + -2.3371365177100447, + -2.138380065042581, + -2.898212648926362, + -0.34142065884672257, + -1.3618177061229204, + -2.9468464743066267, + 0.07954728968477509, + -3.5690319927693794, + -1.39257413528889, + -0.7040124641553289, + -2.3241679531677737, + -2.679671232428013, + 0.03760160614704544, + -3.212392949390038, + -1.9970837340643717, + -1.6335948503817304, + -2.6670168560563288, + -0.7700862819383059, + -3.659374560349274, + -1.0701879965323116, + -2.1217657275617325, + -1.4496418498504262, + -1.7089298106773687, + -1.8703010001742384, + -0.8869149514086287, + -1.7138021461062316, + -2.0668951699640368, + -2.445850824908989, + -1.778239066090565, + -3.2872334775551213, + -0.8554984706512663, + -2.176152196540339, + -2.2539061385223444, + -3.3881284397304654, + -0.9077177706937383, + -1.8633662022741828, + -4.090908495991902, + -2.8021800939283175, + -0.4204520779713883, + -2.997341271180171, + -0.942926849052524, + -1.2749697707512975, + -1.8540345885010105, + 0.03284235994298612, + -3.0064402108371917, + -1.5233599911411995, + -2.4714059107840374, + -3.7681299424526173, + -0.6390474386455465, + -2.7360117210545303, + -3.1261694506725926, + -2.0299911184860946 + ], + "yaxis": "y1" + } + ], + "layout": { + "autosize": false, + "height": null, + "hovermode": "closest", + "showlegend": false, + "title": "Cufflinks - Violin Plot", + "width": null, + "xaxis1": { + "anchor": "y1", + "domain": [ + 0, + 0.31666666666666665 + ], + "mirror": false, + "range": [ + -0.5576339323760863, + 0.4813616103134052 + ], + "showgrid": false, + "showline": false, + "showticklabels": false, + "ticks": "", + "title": "a", + "zeroline": false + }, + "xaxis2": { + "anchor": "free", + "domain": [ + 0.3416666666666667, + 0.6583333333333333 + ], + "mirror": false, + "position": 0, + "range": [ + -0.5666581581676023, + 0.48888179847300195 + ], + "showgrid": false, + "showline": false, + "showticklabels": false, + "ticks": "", + "title": "b", + "zeroline": false + }, + "xaxis3": { + "anchor": "free", + "domain": [ + 0.6833333333333333, + 1 + ], + "mirror": false, + "position": 0, + "range": [ + -0.5503192740037381, + 0.4752660616697818 + ], + "showgrid": false, + "showline": false, + "showticklabels": false, + "ticks": "", + "title": "c", + "zeroline": false + }, + "yaxis1": { + "anchor": "x1", + "autorange": true, + "domain": [ + 0, + 1 + ], + "mirror": false, + "showgrid": false, + "showline": true, + "showticklabels": true, + "ticklen": 4, + "title": "", + "zeroline": false + } + } + }, + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cf.datagen.histogram(3, mode=\"abc\").iplot(\"violin\", title='Cufflinks - Violin Plot', rugplot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Heatmap Plot" ] }, { "cell_type": "code", "execution_count": 15, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "colorscale": [ + [ + 0, + "rgb(158,1,66)" + ], + [ + 0.1, + "rgb(213,62,79)" + ], + [ + 0.2, + "rgb(244,109,67)" + ], + [ + 0.3, + "rgb(253,174,97)" + ], + [ + 0.4, + "rgb(254,224,139)" + ], + [ + 0.5, + "rgb(255,255,191)" + ], + [ + 0.6, + "rgb(230,245,152)" + ], + [ + 0.7, + "rgb(171,221,164)" + ], + [ + 0.8, + "rgb(102,194,165)" + ], + [ + 0.9, + "rgb(50,136,189)" + ], + [ + 1, + "rgb(94,79,162)" + ] + ], + "type": "heatmap", + "x": [ + "x_0", + "x_1", + "x_2", + "x_3", + "x_4", + "x_5", + "x_6", + "x_7", + "x_8", + "x_9", + "x_10", + "x_11", + "x_12", + "x_13", + "x_14", + "x_15", + "x_16", + "x_17", + "x_18", + "x_19" + ], + "y": [ + "y_0", + "y_1", + "y_2", + "y_3", + "y_4", + "y_5", + "y_6", + "y_7", + "y_8", + "y_9", + "y_10", + "y_11", + "y_12", + "y_13", + "y_14", + "y_15", + "y_16", + "y_17", + "y_18", + "y_19" + ], + "z": [ + [ + 53, + 61.00364768210682, + 46.913706610654636, + 55.76679204733025, + 52.50804750011479, + 55.30477024349939, + 52.436752966180364, + 53.217548026780044, + 55.819277480300265, + 45.08452883889966, + 65.74264445230526, + 49.93167882567935, + 50.85362238422624, + 47.0100886501174, + 58.28697223921728, + 52.912820035361854, + 54.34732370731433, + 51.24597228922729, + 52.91720349114151, + 40.39741365109558 + ], + [ + 47.199056570902144, + 63.23649624822907, + 30.047953946493788, + 55.2616597797289, + 54.49962501948038, + 53.78719268992833, + 53.69927309574635, + 55.63494051415019, + 60.888317006848936, + 50.1916892160227, + 68.09247548406603, + 52.522609920222735, + 58.231232843178255, + 46.86505230820777, + 53.70712426874572, + 52.96620211949053, + 54.125547196463614, + 44.21015151964045, + 52.94567322877704, + 38.976222154019105 + ], + [ + 18.670234128329763, + 62.13535330002514, + 31.373639991498642, + 48.50151438818746, + 53.92394715109067, + 55.91050932568489, + 49.42681258338559, + 51.71067340025424, + 60.85092224634328, + 58.370936274541975, + 62.822270079718834, + 52.21612276756001, + 59.11352727986016, + 41.6256544232182, + 49.868139616528445, + 51.33220254576656, + 40.88402870297951, + 48.299124822852704, + 53.20974927631358, + 54.79423295273119 + ], + [ + 7.346371312914037, + 57.85346623530645, + 29.796178278221884, + 48.80392016853333, + 54.39436377415229, + 64.20651213464919, + 48.29272000602307, + 56.95671651545128, + 65.55062408323643, + 58.67637438099557, + 69.17000775673614, + 54.402011991556364, + 60.68206395925501, + 41.74236078186305, + 50.99033311620356, + 46.795377007645456, + 41.425333602312485, + 46.99923474101514, + 52.57923971150056, + 57.68785292921846 + ], + [ + 6.944897165440721, + 60.447545015082746, + 29.398863016333003, + 47.66426163634885, + 52.44650788955848, + 63.52225789783932, + 49.2457452055217, + 60.59473020095242, + 66.40188123417764, + 55.56854352801987, + 62.63895948910239, + 55.57450282760087, + 61.27111404996013, + 28.701706901773832, + 61.94295178491063, + 46.31088461971823, + 38.35299147165109, + 50.93488288301434, + 43.71087100193711, + 57.363107827009316 + ], + [ + 8.262545146297246, + 52.27864605994354, + 30.570802810666773, + 52.498839183940184, + 45.73453868008433, + 75.77803572915074, + 45.95133891432194, + 61.464175200364984, + 68.00202769627859, + 54.685143682903096, + 65.20318495775392, + 58.88101674106964, + 67.55073464485807, + 36.40885927677115, + 58.69312332235994, + 40.005578521813625, + 46.976199647496635, + 47.30764679133623, + 42.565105196985286, + 57.22012200526528 + ], + [ + 11.027649618771095, + 57.247774140563365, + 25.655508619995462, + 44.759213811330454, + 46.14581508031601, + 77.96355353045548, + 47.80404486173462, + 62.78778321970517, + 64.08833672070544, + 40.94885980433794, + 69.20305787609573, + 62.97759642900601, + 70.21265120605973, + 36.70024277508654, + 55.85107969845828, + 32.815854135746434, + 44.87114725802802, + 49.10154196558382, + 40.02708417446258, + 63.568452234591334 + ], + [ + 0.1730059306816134, + 49.74811912677252, + 19.269949914788732, + 43.01371061640591, + 46.925780080180694, + 73.88227395864988, + 46.84636618241871, + 64.31372919405054, + 58.05408052884, + 35.545675337416945, + 72.54129503885339, + 63.124704698730056, + 56.54910995250982, + 34.19743903931447, + 58.19241363863803, + 33.272181715775815, + 39.94925263122979, + 46.969787820563916, + 40.65392783106184, + 73.16656482130942 + ], + [ + 4.788229457817019, + 40.78217605343129, + 20.381147992512286, + 40.63397916637222, + 47.37993231128803, + 70.92183697573317, + 42.77952870570135, + 59.754245670831885, + 59.467373132669785, + 35.30418840534597, + 70.28676220186507, + 74.38706425162448, + 52.45921469950335, + 20.750590686035277, + 59.58288457569618, + 36.728448864388355, + 42.60586235026112, + 56.32420931833799, + 47.13616559892025, + 71.91584349178703 + ], + [ + 2.5048494557305743, + 41.25899230034871, + 18.956185565385578, + 39.50565426886804, + 44.41438951722243, + 79.9714919388893, + 43.59463794112974, + 72.69995021351568, + 66.33560880402021, + 34.8222011042158, + 62.67632212979096, + 75.4310860505807, + 58.52495715834409, + 21.44920875965523, + 58.58462450078356, + 27.681389300115924, + 40.56225620845633, + 51.71494094763041, + 46.76870261450272, + 72.03855917262153 + ], + [ + 4.631567049101548, + 38.73974634648476, + 13.363464822269835, + 23.96960896789905, + 53.839999664240004, + 81.05556141395444, + 48.10733919155436, + 66.36712898568759, + 62.87453263813879, + 34.77814591911586, + 55.193480058414764, + 76.73935450744654, + 58.908230012812986, + 19.504833787824513, + 58.90703021186439, + 28.797932490275656, + 38.79468718083316, + 53.10639297921829, + 45.8191165597108, + 74.31070682733761 + ], + [ + 1.1249300407867229, + 38.21342633295822, + 13.23747707753707, + 27.431659305026507, + 61.65823914705355, + 75.08298574495961, + 48.46314408592825, + 64.98653457417865, + 77.97317505366067, + 33.369623695740344, + 54.29954978634156, + 85.61291694622167, + 58.57037642736077, + 19.84721333626553, + 50.463799562957924, + 34.460122065046555, + 39.138547743546276, + 56.44663983773027, + 44.81208074540042, + 89.99070452419399 + ], + [ + 2.1156484957940958, + 40.9656385963082, + 5.302530992549828, + 25.89564048554957, + 64.60580663757587, + 75.28546755856281, + 47.36816970555229, + 63.823731549424835, + 75.40341000319319, + 33.06201961943858, + 54.947989894813546, + 83.78095577499869, + 59.42012386048777, + 11.990976634192545, + 46.04881166755578, + 35.935225320591925, + 36.19256980889838, + 54.42308043558977, + 45.162955959464604, + 88.71041914243476 + ], + [ + 11.818184744845992, + 42.408221952098536, + 18.244731658261024, + 28.94791995286719, + 61.63595375506942, + 78.77302144602523, + 46.96101957747561, + 66.68502763479799, + 78.59502524068365, + 28.560636217932895, + 62.194702726340964, + 78.0545464935669, + 59.77961558515986, + 8.090403834258526, + 48.203718518973425, + 22.96572203933278, + 34.37118794170793, + 50.598739716131284, + 45.39919998698531, + 88.45960293166154 + ], + [ + 10.543624019640408, + 43.971189419025755, + 8.71678897762519, + 25.07341467383026, + 61.07676590168062, + 78.79700987602445, + 42.63565368493974, + 76.39247019247716, + 78.85187023286718, + 23.29094023932398, + 64.18588645959483, + 70.73888860115314, + 63.1138965689951, + 9.258755352946677, + 50.825348538680174, + 22.744653431134857, + 40.9554604829833, + 42.96788719869119, + 58.48367779533484, + 88.85621449500819 + ], + [ + 15.096797389353217, + 56.416331459273195, + 0.8817157394675812, + 25.17673374074494, + 62.8885413065462, + 70.75236022241134, + 36.147308060744955, + 76.71692854209337, + 85.13057847601081, + 11.937157864696456, + 64.71007666267033, + 78.8143199534598, + 70.24961749838944, + 2.2755845535818082, + 51.321522845896865, + 22.92600380949094, + 41.50151923645773, + 50.44314097186322, + 70.81262828218996, + 85.53143078578532 + ], + [ + 16.639444234067668, + 58.644123137299715, + 0.23041552076503935, + 22.606843096120805, + 58.84111154953372, + 69.79890233795682, + 30.09168051577977, + 76.87600410080508, + 86.39008909949266, + 12.7436926116426, + 67.9093467242786, + 72.09774910664568, + 74.47212804620422, + 2.328121219490265, + 49.03372349240406, + 15.123736277108865, + 42.01651849829899, + 49.195435080252636, + 76.96617452293113, + 91.25336830366301 + ], + [ + 17.47940483425103, + 58.58310956877168, + -1.4507444357947124, + 23.24324470453396, + 56.5435007684935, + 70.96836657199326, + 25.284750796722662, + 69.11238520087647, + 87.93317336589149, + 9.925210707563936, + 68.33946698202989, + 76.90319661392306, + 75.457084566799, + 1.145122527296554, + 58.849361076019164, + 10.733020749220518, + 40.91217129414047, + 48.313497097657674, + 75.05475513027774, + 91.03182333982662 + ], + [ + 19.949795906268836, + 55.118227997395294, + -1.3803370799365, + 33.93000917998482, + 50.74925617518596, + 63.01135229314943, + 28.822427000107034, + 69.95075431867308, + 88.7960199231633, + 18.91145614586479, + 67.1185419811852, + 76.42753074277411, + 74.40692255784114, + -4.016262584734347, + 45.61575951047121, + 15.692610832790937, + 25.841313740676775, + 47.506887577326054, + 72.21364491992753, + 93.38309629315923 + ], + [ + 23.690155204814154, + 54.77904556395386, + -4.254836304646735, + 44.816418135982865, + 46.17072312844202, + 60.45471695417328, + 22.036476628382342, + 72.16799958653299, + 88.34832658695416, + 20.582307649263058, + 70.86495826630309, + 80.10114259851301, + 60.5160941766151, + 1.6856463804394952, + 46.09716089349508, + 15.486348361021921, + 43.77877651181165, + 51.87462950141285, + 70.1306664586236, + 90.41584980496829 + ] + ], + "zmax": 93.38309629315923, + "zmin": -4.254836304646735 + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Heatmap", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 15, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -356,28 +12575,387 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Bubble Chart" + "## Bubble Chart" ] }, { "cell_type": "code", "execution_count": 16, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "marker": { + "color": "rgba(255, 153, 51, 1.0)", + "line": { + "width": 1.3 + }, + "opacity": 0.8, + "size": [ + 37, + 44, + 43, + 77, + 59, + 43, + 34, + 105, + 51, + 51 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "industry1", + "text": [ + "NTN.XQ", + "TEA.NX", + "ZXK.AF", + "QGI.IV", + "ORY.JF", + "BMK.DC", + "GXO.IO", + "SFO.YQ", + "LIU.OJ", + "NAQ.HF" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter", + "x": [ + 0.41492827325416687, + -2.0100664727935773, + 0.1366439266276157, + -0.6870855992348432, + -0.9220057223406574, + -0.6841263895128659, + -0.09180031642887056, + -0.7133563197965568, + 0.668405378021443, + -0.6980612907413606 + ], + "y": [ + 0.6564855046766953, + 0.6352329999887668, + -1.9091788994949483, + -0.25723370863955414, + -0.06113681535491223, + 0.4868983929546665, + -0.00449110358812761, + -0.01764536649095696, + -0.05473450985724458, + 1.0220565798337686 + ] + }, + { + "marker": { + "color": "rgba(55, 128, 191, 1.0)", + "line": { + "width": 1.3 + }, + "opacity": 0.8, + "size": [ + 94, + 19, + 50, + 92, + 92, + 84, + 62, + 52, + 81, + 22 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "industry2", + "text": [ + "IHV.OH", + "GFQ.WM", + "XMN.HD", + "IKA.JJ", + "MKB.SQ", + "PIT.NK", + "DXZ.FH", + "MKP.SB", + "JQJ.ML", + "POQ.JF" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter", + "x": [ + -0.49352287924712385, + 1.6174553866983445, + -2.0586751898360522, + 1.3129353840781424, + 0.8677654696803782, + -0.9687162501459198, + -1.4073822367483406, + -1.1544139250146987, + 1.0795378836331821, + 0.7568523812573923 + ], + "y": [ + -0.1493487584271287, + 0.638153275173984, + 1.6722825732487185, + 0.13739568048185588, + 0.41018869580754924, + 0.5729778397976183, + 0.07696159367131317, + -0.04242139191709265, + -1.8267560576970503, + -0.19874250398510673 + ] + }, + { + "marker": { + "color": "rgba(50, 171, 96, 1.0)", + "line": { + "width": 1.3 + }, + "opacity": 0.8, + "size": [ + 103, + 96, + 32, + 68, + 26, + 50, + 90, + 40, + 31, + 112 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "industry3", + "text": [ + "TKU.AH", + "ZZY.BS", + "AMQ.GS", + "BZK.ZO", + "NXO.YT", + "SUZ.KE", + "IQU.ZR", + "VGT.IO", + "IYQ.TH", + "BFR.TE" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter", + "x": [ + -0.5736098805824672, + -0.43704371462988906, + 1.014013231201785, + 0.8133955689686535, + -0.1943290739900093, + 0.3583515013490209, + 1.581488080397965, + -0.4345271877617306, + -0.9033085092675148, + 0.5248735094156998 + ], + "y": [ + 0.6342856306926041, + 1.9015125930683525, + 0.5487596669250615, + -0.37662537542966884, + 0.44726926289874935, + 1.0899755393747614, + -1.3529433168577134, + -1.7115233320600438, + -0.2330271116327989, + -0.5193305179144304 + ] + }, + { + "marker": { + "color": "rgba(128, 0, 128, 1.0)", + "line": { + "width": 1.3 + }, + "opacity": 0.8, + "size": [ + 33, + 72, + 34, + 75, + 25, + 55, + 26, + 49, + 14, + 57 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "industry4", + "text": [ + "VDP.CH", + "RHR.IG", + "LEX.UO", + "NNU.AF", + "ZZO.EL", + "KCP.AR", + "WQI.ZH", + "YGA.JV", + "PWR.WD", + "ULR.KG" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter", + "x": [ + -1.7283575171476293, + 0.28328669952267144, + 0.6019730590424024, + -0.510064998669441, + 0.7109200858617272, + -0.8055675496607003, + 1.3460216732082835, + 0.8616302801305612, + -0.5584564760590858, + -1.0011191125387509 + ], + "y": [ + 1.7796034324784327, + -0.5760878071832546, + 0.6671723554480595, + -0.2603767034005551, + 0.8367419313423643, + -0.5601131725083995, + -0.6117797059861633, + -0.6969199130344474, + -1.6084212008174605, + -0.5022999587431554 + ] + }, + { + "marker": { + "color": "rgba(219, 64, 82, 1.0)", + "line": { + "width": 1.3 + }, + "opacity": 0.8, + "size": [ + 12, + 91, + 60, + 59, + 81, + 31, + 91, + 58, + 36, + 64 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "industry5", + "text": [ + "KXX.AT", + "HOY.FP", + "KQA.WM", + "FUI.PF", + "VHN.PE", + "MKK.IE", + "KLW.BL", + "QQA.OY", + "IWZ.IX", + "PWS.DP" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter", + "x": [ + -0.257272962478154, + 0.8607918881726291, + 1.0743231537718223, + 1.4296806164261748, + 0.2672163974914796, + 0.43760210184870385, + 0.4836451926700497, + -0.7812510049272539, + -2.0955060530208462, + -0.6934109009535402 + ], + "y": [ + -0.24850658713849344, + 0.9390394613424721, + 0.43316538169819685, + -0.8858178624484702, + -0.2657265796594975, + 1.0022932075121864, + -1.4687911439085084, + -0.3455531041721177, + 0.7050133905607374, + -0.06432629597668943 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "title": "Cufflinks - Bubble Chart", + "titlefont": { + "color": "#4D5663" + }, + "xaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Returns", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + }, + "yaxis1": { + "gridcolor": "#E1E5ED", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "Analyst Score", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#E1E5ED" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 16, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -389,28 +12967,1337 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Scatter 3D" + "## Scatter 3D" ] }, { "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, + "execution_count": 17, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "marker": { + "color": "rgba(55, 128, 191, 1.0)", + "line": { + "width": 0.5 + }, + "opacity": 1, + "size": 15, + "symbol": "dot" + }, + "mode": "markers", + "name": "category1", + "text": [ + "DTQ.DO", + "CQL.BB", + "GMC.YL", + "YKO.HW", + "ATX.OT", + "VAE.TO", + "EBO.GZ", + "UDR.KF", + "RUM.UH", + "VJX.LF", + "CCM.LN", + "UPA.MB", + "CEW.RS", + "YQX.OA", + "PYT.EA", + "EHZ.ZM", + "LBJ.GR", + "BHW.KO", + "ZGU.XR", + "VEO.BV", + "OZI.XT", + "ZMG.KI", + "PIC.SN", + "TXT.AM", + "CIB.HY", + "JRV.FV", + "PDE.DJ", + "ZFD.MD", + "GZB.LB", + "DHU.GX", + "LYU.DA", + "WZD.ER", + "XUG.SB", + "PDN.RE", + "VEX.FG", + "OZR.ZW", + "MWH.QW", + "QBV.PW", + "CHE.GU", + "WHT.PF", + "IRM.GK", + "TSV.TX", + "AES.DU", + "XRT.WF", + "ZKU.ZI", + "PDD.SS", + "WHM.MH", + "WLO.BF", + "KHV.BE", + "RNX.UK", + "QYI.KA", + "GDX.CM", + "BUF.JH", + "HNH.RZ", + "MXD.YT", + "BJP.SJ", + "PSU.FM", + "OUA.XG", + "UZV.JZ", + "FGN.OL", + "KTL.PT", + "RFH.UP", + "LJQ.XR", + "AFW.WJ", + "RPC.LG", + "QWM.WK", + "GGH.HF", + "ABP.QJ", + "PEM.EG", + "ZHK.WO", + "VQL.IN", + "FWM.XB", + "SSU.QG", + "HAU.YZ", + "RCH.TM", + "YEW.PR", + "SQP.HX", + "MGB.PL", + "VWB.NG", + "LXC.CJ", + "TUF.NZ", + "WMA.MS", + "ZSR.WG", + "FIW.UD", + "IJT.CO", + "TLJ.HO", + "PAQ.RZ", + "XQC.VO", + "DPE.KL", + "NDB.KL", + "PIS.ID", + "DKL.PR", + "ZVZ.XH", + "FKZ.HK", + "EEN.GN", + "LAT.GX", + "SMR.VQ", + "ZGH.QR", + "GFG.NK", + "SRK.YU", + "LOQ.AI", + "KKO.JD", + "HQZ.FQ", + "UAR.UI", + "YUD.SH", + "DOH.GL", + "ZGM.KV", + "CWN.DR", + "KCB.TU", + "GOO.VN", + "KVR.TY", + "CSW.ZJ", + "DYC.FK", + "LTP.IO", + "MQD.LM", + "DIF.TJ", + "ULA.NJ", + "YCX.ZI", + "SHX.JB", + "SDN.OS", + "QOQ.MW", + "EXS.PW", + "UDC.PU", + "BLQ.AU", + "NLJ.VA", + "REY.NC", + "YKN.FO", + "PEY.SG", + "CQT.ES", + "PCZ.CF", + "RSQ.YD", + "CFD.EJ", + "YMB.GW", + "DBL.AG", + "BDR.OZ", + "SIW.CD", + "RSX.IW", + "LON.OG", + "UFI.AQ", + "KLY.GE", + "WVB.NO", + "KON.LU", + "GGT.EQ", + "WTV.XL", + "OQB.DV", + "QTE.QZ", + "VGU.TT", + "FKV.QJ", + "JGY.ML", + "XZY.JZ" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter3d", + "x": [ + -1.2390203672443947, + -0.721051488306893, + -0.4298267180220792, + -1.0516954214734686, + 0.44765562611328563, + 0.5988106437231866, + 1.598000168072868, + -2.2956072962706027, + -0.36679804567398533, + 0.08067218581884897, + -1.0565130335240929, + 1.1900188337131226, + -1.3906999077555842, + 0.4827673705823749, + -0.2433356207832181, + 1.5604297096932789, + -0.7264513064993642, + -0.019101317815103276, + 1.5612158768405093, + -1.6719322086037876, + -1.392348429216692, + 0.6475250338300618, + -2.0776111494608958, + -0.8759375281240681, + -0.6848758157711006, + 0.05578523762477026, + -0.30349054061037223, + -0.4098260486096809, + -0.6406806535044448, + 1.5874988415748004, + -1.491359318279714, + -0.13836951435556297, + -0.4869214623939821, + 0.4491002936924047, + -2.479250152918991, + 0.21961009050011676, + 0.787433148428571, + -0.4690231727558362, + 0.035924016289571634, + 0.5210317970088271, + -1.4177928086348806, + 0.5695471695983075, + 0.07271138169908857, + 0.6070480122036616, + -0.8065921733066522, + -0.4179854429931346, + -2.8293197990865364, + 1.5949612126176043, + 0.3323404478251718, + 1.1062166868813106, + 0.7329390224235334, + 1.0274296252508976, + -1.7570748997026155, + -0.27859602248945686, + -0.23786394090896565, + -2.4055897952674252, + -0.4509561978560948, + 0.12202606678218221, + -0.45760390271065077, + 0.5752807886699036, + -0.8790092563440787, + -0.0980741493354068, + 0.03787617950248051, + -0.7535373715735376, + 0.31882076882225285, + -1.3336008416251977, + 0.5619612315442434, + -0.5382804511218918, + 1.5337964235164907, + -0.4966399161712735, + -0.4044356404267456, + 1.7534569157564233, + 1.050708324386868, + 0.1595374400087211, + 1.2716544459281096, + 1.1823384662064198, + 1.1773063942357498, + 1.8447517097086288, + -0.8466200865212649, + 0.6586537649355805, + 1.3781757894994244, + 0.31904966295091886, + 1.2680676283581145, + 0.4116612056618763, + 1.6255408126940665, + -0.16533722369824505, + -0.12899776784285488, + 1.1584816466321564, + 1.7718210181533705, + -2.3275314291131086, + -1.2544197195261404, + -0.08557055257530607, + 0.37516027404750213, + -1.353518394362448, + 0.02657407209344026, + 0.08343872866239589, + -0.9786182869720382, + -1.777198360280056, + 0.08714303973809148, + 1.0023426855955229, + 0.16362374867739823, + -0.4781110364469025, + 0.0431114727029236, + -1.2196513078068363, + 1.8840748835020098, + -0.6790395488887171, + -1.5589244417830388, + 0.011348193739655801, + 1.428675875200356, + 0.4172562204236141, + -0.929272881054156, + -0.49967266399115146, + 0.6367465356017219, + 0.6234408433626436, + -0.5910226356828561, + -0.07068475145626682, + -2.167812822951143, + -0.6383045615847868, + 0.9612047455209612, + 0.9552767518211303, + 0.9111734496400279, + -0.3404338506790859, + -0.7513401809047052, + 0.16533197918796896, + 0.9321551071995372, + 1.582454395655981, + 2.7024627682500952, + 1.0509013775632532, + -0.5833864018275853, + 0.9752188905950734, + -0.2872384298497693, + -1.1469060097827446, + 0.6044196759865548, + -0.9853646929677411, + 0.3895101637187714, + -0.25885636188944805, + -0.47255327179459855, + -0.5449868541659874, + -0.05334683054088839, + 0.1123954095543389, + 0.12746993828310377, + -0.015477482498610053, + -0.9614223863922731, + -0.5923358668150499, + -1.3142974715204272, + -1.1777065994011107, + -1.2441134840432948, + -0.23548051191968092, + 0.3756930173511389, + -1.3003326862903584 + ], + "y": [ + 1.1174065154279909, + 0.5909240174066367, + -0.2947935133202821, + -1.6570279624429152, + -1.6769809199413788, + -0.5019363035811452, + -0.7692896866672131, + -0.4378087984056797, + 0.8573712040911052, + 1.0865474516833722, + 0.5704019334615213, + -0.74915803602555, + -0.5171895859949368, + 0.4268557623818943, + -0.9737745813513926, + 1.515673793203704, + -0.32997951633035555, + -0.559852412279011, + -0.007456444442634055, + 0.9211098973575209, + -0.13424700341461393, + 0.9298486950325139, + -0.6747675523694293, + 0.09566160577711284, + 1.0305607697129702, + 1.7631356356653753, + 1.0004846640007203, + -0.0010828038000098555, + 1.280529752176611, + 1.6676757399418232, + -0.4295804481217696, + 0.35932334228430013, + -0.14378393144120033, + 0.2424940421411188, + -1.069353632767058, + 1.5806720273578254, + -0.9074377326874246, + -1.1349817910402986, + 1.0716834660913097, + 0.4425845473110659, + 1.054002046917284, + -0.09770625213508331, + 0.5745408038557777, + 1.6787619252694488, + -0.28329789024572627, + -0.3128707337556018, + -0.4229127074298345, + -0.8051657914472916, + 0.8087205255635627, + -1.6908733542064998, + -0.7399400046911548, + -0.7547910018759508, + -1.636483380989726, + -0.19396660100156052, + 0.42506549647468966, + 0.2583247283732422, + 0.5012732439626386, + -1.8733212893874214, + -0.014235679709365009, + -0.9809293273168316, + 0.2393273076923051, + -0.1973609129474267, + 1.7709914086509515, + -3.0994006881141045, + -0.42406535459221883, + -1.6804161925142436, + 1.0066351873570267, + -0.15051386475705422, + -0.8680429691056222, + 1.823510209763427, + 0.001283537160882993, + 0.6997228255551486, + -1.5806826669263838, + -1.2138241280186184, + 0.08816337266401038, + 1.557825281271438, + -0.39633582466683925, + -0.7628435786607104, + 1.5386979604957072, + 0.006993685264126529, + 0.5087810777770664, + 0.2249901211327358, + -0.11556425611122241, + -0.012655250790862905, + 0.16554919508151586, + 0.03008777000004795, + 0.2658021479037865, + 0.42405242294253703, + -1.1990562374981497, + 0.22200860026103464, + 0.5289383975130045, + -0.007903403701856404, + 1.0887281585673412, + -0.6654044631550348, + 0.3148777342195865, + 1.1026518585451648, + 0.1829615416991342, + 1.9691537119477318, + -0.20243078217147686, + 0.6122750529086092, + 2.32828707968366, + -0.24959786209517948, + 1.0565642021053852, + -0.1687450794640323, + 0.8865281969660053, + -0.29133101248165066, + -0.9065220238116262, + 0.007436262884761816, + 0.06913316296847383, + -1.6326494420103395, + -0.24883848936316166, + -0.5945072664577318, + -1.0497701101389498, + 1.0011400991569515, + 0.8996817449918598, + 0.13596076770659613, + -1.1300794118805004, + 0.5588897610022305, + -1.2720037577285879, + 1.4136768557461528, + 0.39783544376005125, + 0.8326520620116643, + -0.9042118934467601, + 0.10203754238340769, + 0.34764982572783937, + 0.5855314783744631, + 0.23874596995791528, + -0.2384297569754238, + 1.5894350659603131, + -0.7925673928427344, + -0.5028104098885298, + -0.870352274277969, + 0.9779181975591196, + -1.177180464199099, + -0.24936255480091293, + -0.39790715213890643, + 0.4779725754687664, + -0.44160605726753716, + -1.3870308625777497, + 0.7274016247063047, + -0.2863048646120576, + 0.8395807500071918, + 0.5104841065511238, + -0.3869525541671624, + -0.6455795932760146, + -0.018101723328500602, + 0.39284792846179795, + -0.44773000082912845, + -0.860794760316349, + -0.5846912871857458 + ], + "z": [ + -1.6155442250453342, + -1.08471598707821, + 0.7812924982208888, + -1.508213879706002, + -1.9795933884926888, + 0.19655489901970644, + -1.0537782542947738, + -0.6602894563056916, + -0.5814994891458889, + 1.4825186671855586, + 1.1123674008128563, + 0.6496987508910825, + -0.471644678268494, + -2.093756551173932, + -1.3141659272533048, + 1.0465291853139886, + 0.19121871939768845, + -0.8353986066726939, + -0.07614406282678596, + 0.1728696663618126, + 0.5134972762233432, + -1.304760262072504, + 0.333634079278877, + -2.2276348231996725, + -1.2117062044218092, + -0.2795930836732889, + 0.7818633248367447, + 0.6771851903569635, + 0.19158420556894898, + 1.3725285168364698, + -0.5909048286237134, + -0.6549467923426951, + -1.1098340635579589, + -0.6108894596802473, + -0.031099586277465806, + 0.2446472904265097, + -0.3485661435985658, + -0.5137426112663335, + 1.3288515512047343, + -0.5667242113188179, + -0.6106392348276443, + -1.9452020757626256, + -0.20891671253488514, + 0.6813335146588468, + 0.22295846794136862, + 0.3968351188944923, + 0.08690342699505854, + -0.5565514030849308, + 0.522026291295738, + -1.568376855341033, + -1.3480325648699252, + -1.7090145297902872, + 0.7860601956584281, + 1.3884501370978797, + -0.5449978282315219, + 1.0178214665799707, + -0.6931174948894803, + -0.26714868633273325, + -0.44336801409615934, + 1.997996205775549, + -1.4005312174562667, + -1.403146073946159, + 1.4355063339833076, + -0.695785740985873, + -0.40728714431446766, + 1.3817433848616947, + -0.25906315901018395, + -0.2944844992567523, + -0.4011817289276063, + -0.8204336182719648, + 1.39459789979464, + 1.4520249421511, + 0.6963358196757555, + -0.2414075004563629, + 1.1002074711278544, + 0.4531389774805974, + -0.21349803174960744, + -0.7764765006431571, + -0.23592175917780675, + 0.936294669769431, + -0.46299892851246816, + 1.0470109834238714, + 0.32811465811865126, + 1.349721783392751, + 0.47008526798670885, + 0.43909879389963125, + 0.15997114606988527, + 0.6303944504680262, + 0.02502128723893156, + 0.8242530625757134, + -1.5467635571363663, + 1.4852607584475606, + 0.14234895941262188, + -0.8138162401759935, + -0.6775401054910772, + -0.7528032696258231, + -0.349486039059678, + -1.4653061533172675, + -0.7625949570387788, + 0.7107798182660353, + 0.7459921637396191, + -0.1889113505563118, + -0.1483874253752173, + -0.09665727197800943, + -1.8318917516468458, + 0.9607532826147392, + -1.1389115141071362, + 1.4516686663836011, + 1.1924626273573287, + 1.557598000772243, + 0.3390305334778737, + 0.3919222958909166, + -0.6648029432426996, + 0.5039180658583862, + -1.074100078880978, + 0.5893915075635028, + 0.9646139652974833, + -0.5055434395414832, + -1.1322520985871687, + 0.23988133418032767, + 0.37772383689064415, + 0.10359306496184371, + -1.4500206969722051, + 1.5278352553253587, + 0.6385508765663236, + -1.2948909518249465, + -0.0007034498063092704, + -0.6473116253442277, + 1.9109047091265579, + -0.8952679016605628, + -0.789571956777824, + -0.8851432487766607, + 0.4925395036080009, + 0.7736073695935701, + 0.4204973288422461, + -1.1731849904917198, + 0.28613934502908495, + -1.140441889894553, + -1.120540613481461, + 0.720475858728963, + -1.9229882151953746, + 1.3934397486522896, + 0.06810521690439289, + -0.1871695338609316, + -0.10701442530121284, + -2.5843399547700963, + -1.697249993085449, + 0.23228579955812964, + 0.5090647973744367, + -0.1641155132882445 + ] + }, + { + "marker": { + "color": "rgba(255, 0, 136, 1.0)", + "line": { + "width": 0.5 + }, + "opacity": 1, + "size": 15, + "symbol": "dot" + }, + "mode": "markers", + "name": "category2", + "text": [ + "HVP.SY", + "DNQ.YW", + "RLF.BN", + "MAH.VX", + "PFY.BD", + "CGV.MF", + "RSQ.TP", + "VJA.MU", + "WLK.XT", + "PNT.TK", + "VBS.DM", + "VBV.PT", + "RTD.WM", + "NIS.YX", + "KHT.DV", + "SWI.OQ", + "QFT.JM", + "JCN.KU", + "DTZ.XE", + "QNM.IA", + "NDR.ET", + "BFT.ID", + "RWJ.XP", + "RVC.FP", + "FWT.BO", + "CGZ.ZN", + "ZFZ.MW", + "WRW.QB", + "BGK.ML", + "LLR.HV", + "BTT.XS", + "CPA.YX", + "KLM.NV", + "ZOM.UX", + "XIU.MK", + "SPI.XB", + "GTH.ZZ", + "AFY.KE", + "OXX.FQ", + "IKW.IR", + "ELQ.HJ", + "NCA.IN", + "GEO.FY", + "BBG.PY", + "QDT.DK", + "JER.QK", + "EGD.TS", + "KVW.OZ", + "GUU.UA", + "KMB.VL", + "EFN.OJ", + "NDT.JP", + "XFP.PX", + "ERF.VM", + "MUH.WW", + "GIV.JB", + "YYJ.NK", + "THB.CI", + "PRV.GA", + "VAN.VL", + "KLG.HG", + "TYE.PN", + "QJC.CC", + "NWI.ML", + "PZG.CE", + "IXD.XC", + "ADM.YY", + "EGE.HI", + "FDV.GQ", + "VRU.ZI", + "EBL.UB", + "MDL.PW", + "TLJ.CE", + "PGU.YK", + "PYI.AU", + "EBR.GV", + "KEN.EB", + "HBV.HT", + "ODB.RB", + "YFD.YU", + "UQG.KM", + "FPW.NY", + "VGO.IW", + "KYM.KV", + "PZN.AQ", + "HRO.JV", + "AZJ.RS", + "UCE.EN", + "HTV.NK", + "JZD.IJ", + "YSX.YC", + "CRG.FU", + "EXX.VE", + "SJT.MW", + "GTC.YO", + "HXQ.XM", + "XOI.QN", + "LUY.YK", + "ZUE.IY", + "NTM.RC", + "JNA.NF", + "QIY.SB", + "VCQ.VV", + "GMK.CS", + "CLY.GM", + "ROX.QJ", + "JPX.YD", + "JYZ.ZM", + "SCM.OR", + "MKV.NT", + "IGV.UU", + "QPQ.KT", + "JGJ.WF", + "AEG.VT", + "XZG.BD", + "UUA.DD", + "JUU.DS", + "DGQ.NC", + "XLC.SY", + "YMT.DP", + "DMQ.MT", + "HJA.CL", + "YCV.SM", + "JUR.ZW", + "TLD.DE", + "ABV.NJ", + "SIN.FB", + "QWL.YX", + "WWL.NJ", + "COH.PL", + "AAE.XN", + "IPL.CJ", + "NZT.PI", + "QFM.GA", + "QPY.WP", + "BXR.GQ", + "XUH.EB", + "PTO.MA", + "SNN.WF", + "MFW.NQ", + "WLR.LN", + "MOB.HD", + "EHP.ME", + "XUF.EE", + "MWI.ZP", + "BYH.UX", + "TED.GC", + "AWS.FO", + "OVQ.WP", + "VSP.JK" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter3d", + "x": [ + 0.017727644086212926, + -0.5618321838591954, + -1.6601410803893535, + 0.6229776156380931, + -0.6859392630507425, + 0.4986920386300523, + -1.6828034390974265, + -2.144601596557521, + 0.5742552018776661, + -0.7810195163714136, + 0.9006460440945391, + 0.07277635055342932, + -0.6537984945061658, + 0.41356211634230766, + 0.425382282669542, + -1.6355040385697057, + 1.1599607927980058, + 0.4420103155090451, + 2.051743921620494, + 1.6384281123429705, + -0.570599903668513, + -1.324651871291149, + 0.9831097598640582, + -0.5506527833746935, + -1.5645390534966352, + 0.8440395669977765, + -0.8120938335529033, + 0.5867333131930433, + -0.27864353529689745, + -0.20730142886212538, + 0.21363567543058598, + -0.36423327781332654, + 0.23759787350381897, + 0.5245051374377115, + 0.7815671829972174, + -0.0019167828468389194, + -0.12208858885659994, + -0.7054694414246495, + -0.6796230182800554, + 1.7287429294712173, + -0.7519710281288424, + -2.039378167517065, + 0.7834111063179515, + -2.008454407584671, + 0.5025812912659128, + -1.347909451707918, + 1.7617161304884856, + -0.5400552223952284, + 0.07049296186833004, + 0.3536984206734118, + -1.2010168048520358, + -0.8565650467066522, + -0.6443434823221759, + 0.4192695559886693, + 2.7964793827970964, + 0.7632003346918262, + 0.7577709537547783, + -2.1924506184642274, + 0.9371601963748448, + -0.5664645188648509, + -1.2200665445000944, + 0.9530784206264953, + 1.3789711684561172, + 0.3757018915790878, + -0.1077082792090768, + 1.01874037842157, + -0.2780071554772044, + -1.030315127592656, + 0.4164539735025893, + -1.3807664534483095, + 0.19985829475311775, + 1.0739688238296756, + -0.008971361958713996, + -0.6394356418244613, + -1.843995458228882, + -0.5500233847978732, + 0.3636991354165139, + 0.5002267672983918, + 0.8597556582371996, + -0.8410207375368851, + 1.1143376223136532, + 0.6644361638421947, + 0.40411422721626916, + 0.817859079845304, + -1.2136901896662375, + 0.778346100768771, + -0.3861646372251197, + 0.7130106411889374, + -0.6546933150341513, + 2.2028546803198568, + 0.4990468548740413, + -0.902166065618306, + -1.3778530137414355, + -0.19026230196052107, + 2.056105691248946, + 0.937931847106082, + 0.6827417124896618, + 1.1988301900289218, + 0.22221142243145717, + -0.2923169041284952, + -0.2622627328322464, + 0.033305797397351046, + 0.5174370702484457, + 1.2072869019433075, + 0.6742051602193588, + 0.7197950679913405, + -0.05877357833720891, + 0.5480049830559033, + -0.9181693827746911, + 0.3666028198638154, + -0.8952294693158706, + -0.8537530068414584, + -0.671852281327497, + -1.207073264193741, + -0.42367934906463, + 0.20899569168037088, + 1.0840439747053572, + 0.7823476219694331, + 1.2666605495343668, + 0.20040559726945423, + 0.4857917176308638, + -0.9883736821432784, + -2.8511760145737157, + 0.9813511492893489, + -1.9542522746289548, + -0.1658419082989416, + -2.159089171408892, + 1.6240053747220267, + 0.2457572528137042, + -2.6126920071363258, + -0.5788340292757583, + -0.42084067252761986, + 0.8781653751458908, + -0.3439529233053743, + -2.069799149778493, + -2.1018911997043044, + 0.6155714845284497, + 1.316515163335514, + -1.1116126203434475, + -0.6162847706940335, + -0.5597202921430642, + 0.8542257561785453, + -0.0768952897500793, + -0.9748279042532452, + -0.9675752765058748, + 1.3279733774509614, + 2.167127148921296, + -0.07157179668075787, + 0.3982431523008784, + -0.9286232978389942 + ], + "y": [ + -0.932239149718714, + 0.764639994589147, + -1.608999016432407, + 0.06705236359198397, + 0.0407222391333478, + -0.3677417164902605, + -0.30028664022186125, + -1.5297335585484546, + -1.0618737485727563, + -0.35079595351634024, + 0.2373490871383439, + -0.8434082631683312, + 0.20596101540496084, + -1.84872918293755, + 0.6605579638839445, + 1.4455930031980486, + -0.650615877492761, + 0.5225758708310636, + -1.4910904322670677, + 1.4081817631666915, + -0.6454794932962181, + 0.14550865502951396, + -0.6282347256892651, + 1.0751370256992971, + -1.0082471040954837, + 1.0955483960966264, + 0.8513165930343167, + 0.7329271857704027, + 0.7479749383359763, + 1.3180707633182522, + -0.6947700088643203, + -1.3968395804116924, + 0.6287943917396218, + 1.0218102559862605, + 0.08572421007768691, + -1.4847314895703423, + 0.7515328212727153, + 0.9100834537235689, + -0.27676287374669806, + 0.011411779445094727, + 1.0491077670424198, + 0.4853119095219348, + 1.6814901129258577, + -0.8975508623643871, + 2.194463788077254, + 0.6736952447763446, + -0.7129035259051227, + 1.1322986784817066, + 0.250765711308214, + 0.45263536997189563, + 0.6679543948105338, + 0.6465792062973867, + -1.5693777076948885, + -0.9930226596415336, + 2.3538447304282992, + -0.7964476048551645, + -0.7852613249671238, + 0.8785948852409847, + 0.6895553151584464, + 0.9639650382630324, + -1.3741794625689814, + -0.9482665351860874, + 0.5390766488870519, + -0.4212971749300042, + 0.3511739651106346, + 0.7444564554329776, + 2.1262117881253553, + -1.9266053896259967, + -1.6264520916977456, + 1.4994812229043797, + 0.15650257541929963, + 0.3081288734425017, + -0.6338903047372727, + 0.42232226423148256, + -0.09315542483477232, + -0.1772556585015257, + 0.38062866904804443, + 1.3468141727766159, + -0.7530673423092757, + -0.5229169859201898, + 1.2880047631086222, + 0.15072324480595137, + 1.3343988359378878, + -0.8165341557192913, + 2.1969597958726625, + 0.2305632097670327, + -0.37511141153950617, + -0.23075165619754723, + -0.14063542484867614, + -0.10166923928036883, + -1.0455397385300544, + -1.9727450457886793, + -1.1893067675186475, + -0.8900838894755123, + 0.3003052700454835, + 0.7939981374836697, + -0.27382919378579895, + -0.6991641950388712, + -0.6909492600874019, + 0.9802089240288513, + -0.16209784097357668, + 0.037854425439645394, + 2.350778130523619, + -0.44315269280080744, + 0.2286787276122165, + 0.6262315449606779, + 0.4160227535501576, + -2.076921218458351, + 0.26119581052985485, + -0.5295925199455572, + -0.3580061047322319, + -0.13186023619488305, + 0.05813959789112396, + -1.1071596804250652, + 0.15783826172884052, + 0.8046798273077932, + 2.8728589553316937, + -0.9412690101545529, + 1.0896734703758635, + 0.5795497217972299, + -1.6155537808823237, + 2.011451186349846, + -0.6930967334316377, + 0.024621921244848397, + -0.9492625439804899, + 0.30085069758880034, + 0.2951009424208263, + 0.1825497045369452, + -0.7486537731575126, + 1.222200403361949, + -0.31632200016995315, + -1.159475181101922, + -0.48481692308755076, + -2.0045351536285096, + 1.2882996192461482, + 1.763712707113236, + 0.31686145627851986, + 0.4080440728528365, + -0.2754051886668052, + -1.3578107892597437, + -0.19930252541339558, + 0.10437882835095356, + 2.4000017426226914, + -1.4716441420995476, + 0.1256380855435913, + -1.925865119227286, + 1.3734053315932304, + -0.0449685327645542, + 0.3782225702317524, + -0.6746428947880395 + ], + "z": [ + -0.13338617002278433, + -0.3790839650458957, + 1.6723141777903558, + -1.3315580769285367, + 1.075908481621174, + 1.9600374862277858, + 0.730121587022894, + 2.0651605955427654, + 0.315035145307627, + -0.6129844699177466, + 0.39517197319510067, + -0.8258974775937, + 1.2563189384666624, + 2.715191747636868, + 0.7628116850560382, + 0.23109846627496397, + -1.0635261875669564, + -1.3519561357607521, + 1.9484817152991896, + 0.1828173320619955, + 0.730142350168398, + -0.33406478173081455, + -0.40692933955882815, + -0.22110212822109754, + 0.420128581261946, + -0.6597447863970225, + 0.9501462562201809, + -0.5867488085099132, + 0.38490326236061945, + 0.7726867828721564, + 0.3644194579876594, + -1.4082285068156788, + -0.8262004931516314, + 0.6670618976852991, + -0.1096629789179925, + -0.024989961257458098, + 0.5141695518161428, + 0.7980837621845512, + 0.5059547238272342, + -0.1337361211749472, + 0.24206363982626722, + -1.3971690695705232, + 0.802522203523392, + -1.325381741844028, + -2.6528775715990816, + -0.23593301152835727, + -0.8507632932272529, + 0.02615787929828372, + 0.9191207724926734, + -0.3077351137381443, + -1.0200277878344253, + -0.8357394743185543, + -0.06495535436034552, + -1.2451775796020264, + 0.41131456759305207, + -1.2883465385338524, + 0.7049095485576216, + -1.2141439596016, + -2.7632105224115016, + -1.1504752459988092, + 0.24962591572768972, + 0.42637481159529145, + 0.729931342487742, + 1.0658005398150678, + -0.20874754639682494, + 0.06900290962034912, + 0.9533072441678874, + 0.8370099403231558, + 0.050013114854385324, + 0.6006718543507947, + -1.0141655071477138, + 0.2081372041964861, + -1.5326169098248639, + -0.22669228529546068, + -1.218402147192211, + -0.6947643452117735, + -0.7301799721851056, + -0.2649353732062402, + -0.4693822250825687, + -0.08131578503674701, + 0.4736386671319852, + 0.5347056576741499, + 1.250839153654657, + -0.7073536996524098, + 0.9845908568216601, + -0.8009011596645595, + -0.03992751270020933, + 0.5639505939458255, + -0.09855138771538231, + -0.3679725595167987, + 0.09158778074699482, + 2.015417187084676, + 0.9231376784972792, + 0.6157069543441599, + 1.6258773476480863, + -1.3007804680671367, + -0.6536875682552431, + 1.210829270218185, + 0.14726301828723765, + 0.48535040118107886, + 1.9135299636672554, + 0.19027842659985145, + -0.44833793668139177, + -0.9917904649379237, + 2.5757553618511104, + 1.445450216366751, + 0.36234155523658684, + -1.0189998737773296, + -0.08187660963217447, + -0.9023359097420237, + -0.741508015865028, + 0.3159174416665484, + 0.045527047068034246, + -0.4032678584917072, + -0.12845092028511038, + 0.1889932632429068, + -1.1360060042523366, + 1.1162548276790434, + -0.0839704492203832, + 1.2220289584938169, + -1.1969997414649989, + 0.4620270715143602, + 0.49205380395214615, + 0.6491104256356615, + -1.5342778267051727, + -0.5593334927513123, + -0.8967509259195873, + 0.327852169706196, + -0.709173925300365, + 0.5761418015590644, + -0.11954405674515932, + -1.0520119542808801, + -0.1041514131429907, + -0.7433907511162723, + -1.5726014237248545, + -2.371722581189702, + 0.6443765580834591, + -1.1035425080755938, + -0.7501517552235657, + 0.4424727930558357, + -0.6614726304586018, + 0.7665711091644569, + 0.7215586902228222, + -0.3121369398456556, + 0.03376884114886235, + 1.4497944874291064, + -0.6682122508684148, + 0.6936566976007136, + 1.0249934099178948, + -0.6320349708431062 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "margin": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "scene": { + "xaxis": { + "gridcolor": "#9499A3", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#9499A3" + }, + "yaxis": { + "gridcolor": "#9499A3", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#9499A3" + }, + "zaxis": { + "gridcolor": "#9499A3", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#9499A3" + } + }, + "title": "Cufflinks - Scatter 3D Chart", + "titlefont": { + "color": "#4D5663" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 29, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -423,28 +14310,311 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Bubble 3D " + "## Bubble 3D " ] }, { "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, + "execution_count": 18, + "metadata": {}, "outputs": [ { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "marker": { + "color": "rgba(228, 26, 28, 1.0)", + "line": { + "width": 0.5 + }, + "opacity": 0.9, + "size": [ + 98, + 49, + 95, + 84 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "category1", + "text": [ + "VUJ.HM", + "ZGG.YG", + "RMX.WM", + "RED.ZG" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter3d", + "x": [ + -1.2257704973461294, + 1.2985846064709594, + -1.3554443818148145, + 0.7963805294122999 + ], + "y": [ + 0.6078782348518459, + 0.4436800117762205, + 0.844942717445778, + 0.7469635221872489 + ], + "z": [ + -0.4396993493524881, + -0.052304698485978234, + 0.407619525136822, + 0.27391589847136527 + ] + }, + { + "marker": { + "color": "rgba(55, 126, 184, 1.0)", + "line": { + "width": 0.5 + }, + "opacity": 0.9, + "size": [ + 103, + 39, + 58, + 47 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "category2", + "text": [ + "RMJ.LN", + "CAQ.LQ", + "CUL.FN", + "DPT.AO" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter3d", + "x": [ + -0.9415879765992267, + -0.5045670284619893, + 0.7920682286882268, + -1.020516640540686 + ], + "y": [ + 0.21551084837778312, + 0.49548961848261325, + 1.6934300168009657, + 0.22525237497538134 + ], + "z": [ + 2.063527882535137, + -0.18454354138676976, + -0.5225250361713195, + -0.9082972036385267 + ] + }, + { + "marker": { + "color": "rgba(77, 175, 74, 1.0)", + "line": { + "width": 0.5 + }, + "opacity": 0.9, + "size": [ + 30, + 34, + 25, + 12 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "category3", + "text": [ + "DBX.DT", + "MXR.OX", + "ZJR.DH", + "VLO.HM" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter3d", + "x": [ + 0.016134822680295063, + -0.951736568876114, + 1.3618745794701992, + 0.029065044513119774 + ], + "y": [ + -0.5174960201148654, + -0.3789329165368908, + -0.1782659156806421, + 0.8969127279353784 + ], + "z": [ + 0.3745946008354801, + 0.02911761144689203, + -1.9205123565212965, + 1.093212818364063 + ] + }, + { + "marker": { + "color": "rgba(152, 78, 163, 1.0)", + "line": { + "width": 0.5 + }, + "opacity": 0.9, + "size": [ + 27, + 94, + 100, + 112 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "category4", + "text": [ + "OIU.DB", + "ZWE.KB", + "WFY.AX", + "VCJ.CV" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter3d", + "x": [ + 0.3480250668096723, + -0.23212003824224772, + -1.618555827155886, + 0.07117503730503212 + ], + "y": [ + 0.3715901737336312, + 0.9356276200683592, + 0.7639728471238777, + -0.7638128740079759 + ], + "z": [ + -0.5614587908343976, + -1.5058340014409766, + -0.8133775092513156, + -0.00905514922295845 + ] + }, + { + "marker": { + "color": "rgba(255, 127, 0, 1.0)", + "line": { + "width": 0.5 + }, + "opacity": 0.9, + "size": [ + 105, + 86, + 72, + 90 + ], + "symbol": "dot" + }, + "mode": "markers", + "name": "category5", + "text": [ + "GTJ.IN", + "MGG.KT", + "DVJ.BC", + "UWG.BV" + ], + "textfont": { + "color": "#4D5663" + }, + "type": "scatter3d", + "x": [ + 0.16381692285994426, + 0.9082690590712406, + -0.8751900269588381, + -1.0760284828025275 + ], + "y": [ + 0.30297759720705747, + -2.292230535329429, + 0.05565990738528805, + 1.8452046413064207 + ], + "z": [ + 0.5048406236462163, + -0.6305313111488848, + -0.1337260595852863, + -1.2488508595429306 + ] + } + ], + "layout": { + "legend": { + "bgcolor": "#F5F6F9", + "font": { + "color": "#4D5663" + } + }, + "paper_bgcolor": "#F5F6F9", + "plot_bgcolor": "#F5F6F9", + "scene": { + "xaxis": { + "gridcolor": "#9499A3", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#9499A3" + }, + "yaxis": { + "gridcolor": "#9499A3", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#9499A3" + }, + "zaxis": { + "gridcolor": "#9499A3", + "showgrid": true, + "tickfont": { + "color": "#4D5663" + }, + "title": "", + "titlefont": { + "color": "#4D5663" + }, + "zerolinecolor": "#9499A3" + } + }, + "title": "Cufflinks - Bubble 3D Chart", + "titlefont": { + "color": "#4D5663" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 28, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -457,64 +14627,6887 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##Surface" + "## Surface" ] }, { "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, + "execution_count": 19, + "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/c/Users/jpole/Development/cufflinks/cufflinks/datagen.py:342: RuntimeWarning:\n", + "\n", + "invalid value encountered in true_divide\n", + "\n" + ] + }, { "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "colorscale": [ + [ + 0, + "rgb(84,48,5)" + ], + [ + 0.1, + "rgb(140,81,10)" + ], + [ + 0.2, + "rgb(191,129,45)" + ], + [ + 0.3, + "rgb(223,194,125)" + ], + [ + 0.4, + "rgb(246,232,195)" + ], + [ + 0.5, + "rgb(245,245,245)" + ], + [ + 0.6, + "rgb(199,234,229)" + ], + [ + 0.7, + "rgb(128,205,193)" + ], + [ + 0.8, + "rgb(53,151,143)" + ], + [ + 0.9, + "rgb(1,102,94)" + ], + [ + 1, + "rgb(0,60,48)" + ] + ], + "type": "surface", + "x": [ + -10, + -9.75, + -9.5, + -9.25, + -9, + -8.75, + -8.5, + -8.25, + -8, + -7.75, + -7.5, + -7.25, + -7, + -6.75, + -6.5, + -6.25, + -6, + -5.75, + -5.5, + -5.25, + -5, + -4.75, + -4.5, + -4.25, + -4, + -3.75, + -3.5, + -3.25, + -3, + -2.75, + -2.5, + -2.25, + -2, + -1.75, + -1.5, + -1.25, + -1, + -0.75, + -0.5, + -0.25, + 0, + 0.25, + 0.5, + 0.75, + 1, + 1.25, + 1.5, + 1.75, + 2, + 2.25, + 2.5, + 2.75, + 3, + 3.25, + 3.5, + 3.75, + 4, + 4.25, + 4.5, + 4.75, + 5, + 5.25, + 5.5, + 5.75, + 6, + 6.25, + 6.5, + 6.75, + 7, + 7.25, + 7.5, + 7.75, + 8, + 8.25, + 8.5, + 8.75, + 9, + 9.25, + 9.5, + 9.75 + ], + "y": [ + -10, + -9.75, + -9.5, + -9.25, + -9, + -8.75, + -8.5, + -8.25, + -8, + -7.75, + -7.5, + -7.25, + -7, + -6.75, + -6.5, + -6.25, + -6, + -5.75, + -5.5, + -5.25, + -5, + -4.75, + -4.5, + -4.25, + -4, + -3.75, + -3.5, + -3.25, + -3, + -2.75, + -2.5, + -2.25, + -2, + -1.75, + -1.5, + -1.25, + -1, + -0.75, + -0.5, + -0.25, + 0, + 0.25, + 0.5, + 0.75, + 1, + 1.25, + 1.5, + 1.75, + 2, + 2.25, + 2.5, + 2.75, + 3, + 3.25, + 3.5, + 3.75, + 4, + 4.25, + 4.5, + 4.75, + 5, + 5.25, + 5.5, + 5.75, + 6, + 6.25, + 6.5, + 6.75, + 7, + 7.25, + 7.5, + 7.75, + 8, + 8.25, + 8.5, + 8.75, + 9, + 9.25, + 9.5, + 9.75 + ], + "z": [ + [ + 0.14141961054935853, + 0.14111903500315878, + 0.13650222610828716, + 0.12777380562398274, + 0.11526115097856116, + 0.0993958462307399, + 0.08069235790121831, + 0.059725017515438364, + 0.037104384846577534, + 0.013454008098850966, + -0.01061150357619211, + -0.0345063152690242, + -0.05769048962428924, + -0.07968395387291566, + -0.10007704610444179, + -0.11853755153953285, + -0.13481430178982187, + -0.1487375524385824, + -0.16021647158282734, + -0.16923416092386775, + -0.17584069010379264, + -0.1801446545297837, + -0.18230376872794093, + -0.18251498442862385, + -0.18100457917857166, + -0.17801860199902664, + -0.1738139924448547, + -0.16865061331126227, + -0.16278435980926842, + -0.15646143337355978, + -0.1499137997580331, + -0.14335579129849668, + -0.13698176393514344, + -0.13096468174943518, + -0.1254554756233313, + -0.12058300781296416, + -0.1164544699167505, + -0.1131560467581887, + -0.1107536917561867, + -0.10929387900894774, + -0.10880422217787396, + -0.10929387900894774, + -0.1107536917561867, + -0.1131560467581887, + -0.1164544699167505, + -0.12058300781296416, + -0.1254554756233313, + -0.13096468174943518, + -0.13698176393514344, + -0.14335579129849668, + -0.1499137997580331, + -0.15646143337355978, + -0.16278435980926842, + -0.16865061331126227, + -0.1738139924448547, + -0.17801860199902664, + -0.18100457917857166, + -0.18251498442862385, + -0.18230376872794093, + -0.1801446545297837, + -0.17584069010379264, + -0.16923416092386775, + -0.16021647158282734, + -0.1487375524385824, + -0.13481430178982187, + -0.11853755153953285, + -0.10007704610444179, + -0.07968395387291566, + -0.05769048962428924, + -0.0345063152690242, + -0.01061150357619211, + 0.013454008098850966, + 0.037104384846577534, + 0.059725017515438364, + 0.08069235790121831, + 0.0993958462307399, + 0.11526115097856116, + 0.12777380562398274, + 0.13650222610828716, + 0.14111903500315878 + ], + [ + 0.14111903500315878, + 0.13632396086944565, + 0.12719030582037316, + 0.11405907878471819, + 0.09738828403656238, + 0.07773008237271903, + 0.05570574218106777, + 0.03197958453286062, + 0.007233082355737275, + -0.017859822184363938, + -0.042655257000177006, + -0.06655906279410359, + -0.08904297911487404, + -0.10965701691843574, + -0.12803786284735597, + -0.14391335124448024, + -0.15710321083861073, + -0.16751643729146143, + -0.1751457556394694, + -0.1800597155006458, + -0.18239300622958532, + -0.18233559039097344, + -0.18012123502583363, + -0.1760159755489718, + -0.17030698199702413, + -0.16329221750830802, + -0.15527119023634725, + -0.14653700801271363, + -0.13736985507049018, + -0.12803192632998142, + -0.11876378051842666, + -0.10978201113265723, + -0.10127808535368477, + -0.09341816596346665, + -0.08634370978474622, + -0.08017262722723162, + -0.0750007897964791, + -0.07090368426500879, + -0.06793803188546253, + -0.06614321685638791, + -0.06554239869174844, + -0.06614321685638791, + -0.06793803188546253, + -0.07090368426500879, + -0.0750007897964791, + -0.08017262722723162, + -0.08634370978474622, + -0.09341816596346665, + -0.10127808535368477, + -0.10978201113265723, + -0.11876378051842666, + -0.12803192632998142, + -0.13736985507049018, + -0.14653700801271363, + -0.15527119023634725, + -0.16329221750830802, + -0.17030698199702413, + -0.1760159755489718, + -0.18012123502583363, + -0.18233559039097344, + -0.18239300622958532, + -0.1800597155006458, + -0.1751457556394694, + -0.16751643729146143, + -0.15710321083861073, + -0.14391335124448024, + -0.12803786284735597, + -0.10965701691843574, + -0.08904297911487404, + -0.06655906279410359, + -0.042655257000177006, + -0.017859822184363938, + 0.007233082355737275, + 0.03197958453286062, + 0.05570574218106777, + 0.07773008237271903, + 0.09738828403656238, + 0.11405907878471819, + 0.12719030582037316, + 0.13632396086944565 + ], + [ + 0.13650222610828716, + 0.12719030582037316, + 0.1136526088802527, + 0.09636827159298987, + 0.0759235678781371, + 0.05298490441364873, + 0.028270310898122826, + 0.0025207381574719806, + -0.023527608249201665, + -0.04916880920228074, + -0.07374973820785838, + -0.09668883252747353, + -0.11749065565570795, + -0.13575600794040762, + -0.1511875643863488, + -0.163591222139663, + -0.17287351607260815, + -0.17903560277058095, + -0.1821644169794075, + -0.18242166855756492, + -0.1800313728705813, + -0.1752665961050691, + -0.16843605361995675, + -0.15987112992755653, + -0.1499137997580331, + -0.13890582780165694, + -0.1271795169340972, + -0.11505016730310495, + -0.10281030706494565, + -0.0907256642328181, + -0.07903277128303789, + -0.06793803188546253, + -0.05761803324395176, + -0.04822085787410071, + -0.039868134180728126, + -0.032657564269347995, + -0.026665677985416577, + -0.021950582012676394, + -0.01855449981019833, + -0.016505930263581485, + -0.015821288518275644, + -0.016505930263581485, + -0.01855449981019833, + -0.021950582012676394, + -0.026665677985416577, + -0.032657564269347995, + -0.039868134180728126, + -0.04822085787410071, + -0.05761803324395176, + -0.06793803188546253, + -0.07903277128303789, + -0.0907256642328181, + -0.10281030706494565, + -0.11505016730310495, + -0.1271795169340972, + -0.13890582780165694, + -0.1499137997580331, + -0.15987112992755653, + -0.16843605361995675, + -0.1752665961050691, + -0.1800313728705813, + -0.18242166855756492, + -0.1821644169794075, + -0.17903560277058095, + -0.17287351607260815, + -0.163591222139663, + -0.1511875643863488, + -0.13575600794040762, + -0.11749065565570795, + -0.09668883252747353, + -0.07374973820785838, + -0.04916880920228074, + -0.023527608249201665, + 0.0025207381574719806, + 0.028270310898122826, + 0.05298490441364873, + 0.0759235678781371, + 0.09636827159298987, + 0.1136526088802527, + 0.12719030582037316 + ], + [ + 0.12777380562398274, + 0.11405907878471819, + 0.09636827159298987, + 0.07531659368730659, + 0.05161237775613617, + 0.026026147564044762, + -0.0006409754282528475, + -0.027588123185645037, + -0.054043516875550875, + -0.07929019757294747, + -0.10268778525178764, + -0.12368964794720452, + -0.14185512230149663, + -0.15685668268767797, + -0.16848219583369567, + -0.17663261032673944, + -0.18131560690315682, + -0.1826358700412797, + -0.18078273088932142, + -0.1760159755489718, + -0.16865061331126227, + -0.15904136091487175, + -0.14756752732225356, + -0.13461888616197776, + -0.12058300781296416, + -0.10583439818051152, + -0.0907256642328181, + -0.07558080422426758, + -0.060690608986011814, + -0.046310064114579955, + -0.032657564269347995, + -0.019915691575644292, + -0.00823327044894154, + 0.0022716100207446164, + 0.011507919583092052, + 0.019407660252202565, + 0.025921773001301992, + 0.031016232090896562, + 0.03466854669458865, + 0.03686485131708162, + 0.03759772656874239, + 0.03686485131708162, + 0.03466854669458865, + 0.031016232090896562, + 0.025921773001301992, + 0.019407660252202565, + 0.011507919583092052, + 0.0022716100207446164, + -0.00823327044894154, + -0.019915691575644292, + -0.032657564269347995, + -0.046310064114579955, + -0.060690608986011814, + -0.07558080422426758, + -0.0907256642328181, + -0.10583439818051152, + -0.12058300781296416, + -0.13461888616197776, + -0.14756752732225356, + -0.15904136091487175, + -0.16865061331126227, + -0.1760159755489718, + -0.18078273088932142, + -0.1826358700412797, + -0.18131560690315682, + -0.17663261032673944, + -0.16848219583369567, + -0.15685668268767797, + -0.14185512230149663, + -0.12368964794720452, + -0.10268778525178764, + -0.07929019757294747, + -0.054043516875550875, + -0.027588123185645037, + -0.0006409754282528475, + 0.026026147564044762, + 0.05161237775613617, + 0.07531659368730659, + 0.09636827159298987, + 0.11405907878471819 + ], + [ + 0.11526115097856116, + 0.09738828403656238, + 0.0759235678781371, + 0.05161237775613617, + 0.025275083284098894, + -0.0022274559793407315, + -0.03002807965783915, + -0.0572857273340844, + -0.08321475815193494, + -0.10711012813756442, + -0.1283676319466868, + -0.1464987033293174, + -0.16113955966514656, + -0.17205475511311313, + -0.17913546063850083, + -0.18239300622958532, + -0.18194839266053625, + -0.17801860199902664, + -0.17090060569317098, + -0.1609539875623888, + -0.14858307017251748, + -0.13421936300715656, + -0.11830504740258321, + -0.10127808535368477, + -0.08355939645450051, + -0.06554239869174844, + -0.04758506314163741, + -0.030004497243790427, + -0.013073952151520388, + 0.0029779491154211806, + 0.017966041941118966, + 0.031745840459068614, + 0.044209509361482956, + 0.05528095770522729, + 0.0649104168254659, + 0.07306884206017318, + 0.07974244535617742, + 0.08492762656935865, + 0.08862652853638416, + 0.09084339726921295, + 0.09158188560927924, + 0.09084339726921295, + 0.08862652853638416, + 0.08492762656935865, + 0.07974244535617742, + 0.07306884206017318, + 0.0649104168254659, + 0.05528095770522729, + 0.044209509361482956, + 0.031745840459068614, + 0.017966041941118966, + 0.0029779491154211806, + -0.013073952151520388, + -0.030004497243790427, + -0.04758506314163741, + -0.06554239869174844, + -0.08355939645450051, + -0.10127808535368477, + -0.11830504740258321, + -0.13421936300715656, + -0.14858307017251748, + -0.1609539875623888, + -0.17090060569317098, + -0.17801860199902664, + -0.18194839266053625, + -0.18239300622958532, + -0.17913546063850083, + -0.17205475511311313, + -0.16113955966514656, + -0.1464987033293174, + -0.1283676319466868, + -0.10711012813756442, + -0.08321475815193494, + -0.0572857273340844, + -0.03002807965783915, + -0.0022274559793407315, + 0.025275083284098894, + 0.05161237775613617, + 0.0759235678781371, + 0.09738828403656238 + ], + [ + 0.0993958462307399, + 0.07773008237271903, + 0.05298490441364873, + 0.026026147564044762, + -0.0022274559793407315, + -0.030841885736018544, + -0.05890402451081101, + -0.08555491563889543, + -0.11001880232017779, + -0.1316269478872783, + -0.14983554931501694, + -0.1642373823959323, + -0.17456713788189782, + -0.1807007071005138, + -0.18264893898060253, + -0.18054660691367944, + -0.17463748569481502, + -0.16525654180237792, + -0.1528102839666787, + -0.1377563081818195, + -0.12058300781296416, + -0.10179031338845618, + -0.08187218787401292, + -0.061301442485772274, + -0.040517266401149735, + -0.019915691575644292, + 0.0001569493213448689, + 0.019407660252202565, + 0.03759772656874239, + 0.054541276561040686, + 0.07010183827093616, + 0.08418731130237875, + 0.09674378883254962, + 0.10774865812501504, + 0.11720338291232232, + 0.12512633286074154, + 0.13154597877649798, + 0.13649472168344115, + 0.14000357308347133, + 0.14209785531573388, + 0.14279404657238684, + 0.14209785531573388, + 0.14000357308347133, + 0.13649472168344115, + 0.13154597877649798, + 0.12512633286074154, + 0.11720338291232232, + 0.10774865812501504, + 0.09674378883254962, + 0.08418731130237875, + 0.07010183827093616, + 0.054541276561040686, + 0.03759772656874239, + 0.019407660252202565, + 0.0001569493213448689, + -0.019915691575644292, + -0.040517266401149735, + -0.061301442485772274, + -0.08187218787401292, + -0.10179031338845618, + -0.12058300781296416, + -0.1377563081818195, + -0.1528102839666787, + -0.16525654180237792, + -0.17463748569481502, + -0.18054660691367944, + -0.18264893898060253, + -0.1807007071005138, + -0.17456713788189782, + -0.1642373823959323, + -0.14983554931501694, + -0.1316269478872783, + -0.11001880232017779, + -0.08555491563889543, + -0.05890402451081101, + -0.030841885736018544, + -0.0022274559793407315, + 0.026026147564044762, + 0.05298490441364873, + 0.07773008237271903 + ], + [ + 0.08069235790121831, + 0.05570574218106777, + 0.028270310898122826, + -0.0006409754282528475, + -0.03002807965783915, + -0.05890402451081101, + -0.08633239590937543, + -0.1114606806231028, + -0.13354819579908725, + -0.15198770280837584, + -0.16632015713858264, + -0.17624240938958516, + -0.18160802037610754, + -0.18242166855756492, + -0.1788278960809016, + -0.17109514979541934, + -0.15959621882048483, + -0.14478624788034108, + -0.1271795169340972, + -0.10732612754693129, + -0.0857896329957062, + -0.0631265026963309, + -0.039868134180728126, + -0.016505930263581485, + 0.0065202421682302655, + 0.02883009042098063, + 0.05010748884225075, + 0.07010183827093616, + 0.08862652853638416, + 0.10555493165712146, + 0.12081441070397907, + 0.13437885433763305, + 0.14626024334832619, + 0.15649972810645998, + 0.16515865057394133, + 0.17230988766358785, + 0.17802983029511174, + 0.18239124981424537, + 0.18545724476618586, + 0.18727640924644018, + 0.18787932061729182, + 0.18727640924644018, + 0.18545724476618586, + 0.18239124981424537, + 0.17802983029511174, + 0.17230988766358785, + 0.16515865057394133, + 0.15649972810645998, + 0.14626024334832619, + 0.13437885433763305, + 0.12081441070397907, + 0.10555493165712146, + 0.08862652853638416, + 0.07010183827093616, + 0.05010748884225075, + 0.02883009042098063, + 0.0065202421682302655, + -0.016505930263581485, + -0.039868134180728126, + -0.0631265026963309, + -0.0857896329957062, + -0.10732612754693129, + -0.1271795169340972, + -0.14478624788034108, + -0.15959621882048483, + -0.17109514979541934, + -0.1788278960809016, + -0.18242166855756492, + -0.18160802037610754, + -0.17624240938958516, + -0.16632015713858264, + -0.15198770280837584, + -0.13354819579908725, + -0.1114606806231028, + -0.08633239590937543, + -0.05890402451081101, + -0.03002807965783915, + -0.0006409754282528475, + 0.028270310898122826, + 0.05570574218106777 + ], + [ + 0.059725017515438364, + 0.03197958453286062, + 0.0025207381574719806, + -0.027588123185645037, + -0.0572857273340844, + -0.08555491563889543, + -0.1114606806231028, + -0.13418273806183595, + -0.15304146672549196, + -0.16751643729146143, + -0.17725715646546372, + -0.18208605074549258, + -0.18199408570471504, + -0.17712974307464055, + -0.16778234479339135, + -0.1543609103022869, + -0.13736985507049018, + -0.11738288358628372, + -0.0950164022704569, + -0.07090368426500879, + -0.045670869380806056, + -0.019915691575644292, + 0.0058103924762656495, + 0.031016232090896562, + 0.05528095770522729, + 0.07825990831739421, + 0.09968670899986165, + 0.11937185506223688, + 0.13719827990417027, + 0.15311446345017118, + 0.16712567793535366, + 0.1792839709402817, + 0.18967745729212915, + 0.19841943861188654, + 0.20563779959612533, + 0.21146505144444128, + 0.21602931256266372, + 0.21944644111666822, + 0.22181346801290225, + 0.2232034254780841, + 0.22366162672468853, + 0.2232034254780841, + 0.22181346801290225, + 0.21944644111666822, + 0.21602931256266372, + 0.21146505144444128, + 0.20563779959612533, + 0.19841943861188654, + 0.18967745729212915, + 0.1792839709402817, + 0.16712567793535366, + 0.15311446345017118, + 0.13719827990417027, + 0.11937185506223688, + 0.09968670899986165, + 0.07825990831739421, + 0.05528095770522729, + 0.031016232090896562, + 0.0058103924762656495, + -0.019915691575644292, + -0.045670869380806056, + -0.07090368426500879, + -0.0950164022704569, + -0.11738288358628372, + -0.13736985507049018, + -0.1543609103022869, + -0.16778234479339135, + -0.17712974307464055, + -0.18199408570471504, + -0.18208605074549258, + -0.17725715646546372, + -0.16751643729146143, + -0.15304146672549196, + -0.13418273806183595, + -0.1114606806231028, + -0.08555491563889543, + -0.0572857273340844, + -0.027588123185645037, + 0.0025207381574719806, + 0.03197958453286062 + ], + [ + 0.037104384846577534, + 0.007233082355737275, + -0.023527608249201665, + -0.054043516875550875, + -0.08321475815193494, + -0.11001880232017779, + -0.13354819579908725, + -0.15304146672549196, + -0.167906160972842, + -0.17773339606034183, + -0.18230376872794093, + -0.18158488243001691, + -0.17572115154133375, + -0.16501687105976595, + -0.1499137997580331, + -0.13096468174943518, + -0.10880422217787396, + -0.08411903827788304, + -0.05761803324395176, + -0.030004497243790427, + -0.001951040868825416, + 0.025921773001301992, + 0.05306249567952219, + 0.07900122348247962, + 0.10335731863015635, + 0.1258425822940911, + 0.14626024334832619, + 0.16450028494360933, + 0.18053174205108255, + 0.1943926655354523, + 0.2061784643801796, + 0.21602931256266372, + 0.2241172482256385, + 0.23063350923189954, + 0.23577655069724138, + 0.23974108638511749, + 0.242708395806646, + 0.24483804991090943, + 0.24626113579560338, + 0.24707500803079696, + 0.24733956165584545, + 0.24707500803079696, + 0.24626113579560338, + 0.24483804991090943, + 0.242708395806646, + 0.23974108638511749, + 0.23577655069724138, + 0.23063350923189954, + 0.2241172482256385, + 0.21602931256266372, + 0.2061784643801796, + 0.1943926655354523, + 0.18053174205108255, + 0.16450028494360933, + 0.14626024334832619, + 0.1258425822940911, + 0.10335731863015635, + 0.07900122348247962, + 0.05306249567952219, + 0.025921773001301992, + -0.001951040868825416, + -0.030004497243790427, + -0.05761803324395176, + -0.08411903827788304, + -0.10880422217787396, + -0.13096468174943518, + -0.1499137997580331, + -0.16501687105976595, + -0.17572115154133375, + -0.18158488243001691, + -0.18230376872794093, + -0.17773339606034183, + -0.167906160972842, + -0.15304146672549196, + -0.13354819579908725, + -0.11001880232017779, + -0.08321475815193494, + -0.054043516875550875, + -0.023527608249201665, + 0.007233082355737275 + ], + [ + 0.013454008098850966, + -0.017859822184363938, + -0.04916880920228074, + -0.07929019757294747, + -0.10711012813756442, + -0.1316269478872783, + -0.15198770280837584, + -0.16751643729146143, + -0.17773339606034183, + -0.18236471957976835, + -0.18134271385500067, + -0.1747972342928682, + -0.16303912773542587, + -0.14653700801271363, + -0.1258888846262905, + -0.10179031338845618, + -0.0750007897964791, + -0.046310064114579955, + -0.016505930263581485, + 0.013655158230898757, + 0.043473546354522816, + 0.07232710218505171, + 0.09968670899986165, + 0.12512633286074154, + 0.14832776112580212, + 0.16908036038891633, + 0.18727640924644018, + 0.20290271423033404, + 0.21602931256266372, + 0.22679610352037188, + 0.23539823538075702, + 0.2420710146043941, + 0.24707500803079696, + 0.2506818889186662, + 0.2531614457800734, + 0.25477004091850136, + 0.2557406839380664, + 0.2562747828163765, + 0.25653555744366946, + 0.2566430509401283, + 0.2566706526738519, + 0.2566430509401283, + 0.25653555744366946, + 0.2562747828163765, + 0.2557406839380664, + 0.25477004091850136, + 0.2531614457800734, + 0.2506818889186662, + 0.24707500803079696, + 0.2420710146043941, + 0.23539823538075702, + 0.22679610352037188, + 0.21602931256266372, + 0.20290271423033404, + 0.18727640924644018, + 0.16908036038891633, + 0.14832776112580212, + 0.12512633286074154, + 0.09968670899986165, + 0.07232710218505171, + 0.043473546354522816, + 0.013655158230898757, + -0.016505930263581485, + -0.046310064114579955, + -0.0750007897964791, + -0.10179031338845618, + -0.1258888846262905, + -0.14653700801271363, + -0.16303912773542587, + -0.1747972342928682, + -0.18134271385500067, + -0.18236471957976835, + -0.17773339606034183, + -0.16751643729146143, + -0.15198770280837584, + -0.1316269478872783, + -0.10711012813756442, + -0.07929019757294747, + -0.04916880920228074, + -0.017859822184363938 + ], + [ + -0.01061150357619211, + -0.042655257000177006, + -0.07374973820785838, + -0.10268778525178764, + -0.1283676319466868, + -0.14983554931501694, + -0.16632015713858264, + -0.17725715646546372, + -0.18230376872794093, + -0.18134271385500067, + -0.17447608825271163, + -0.16200998595397612, + -0.14443111863131364, + -0.12237701362727325, + -0.09660159075517502, + -0.06793803188546253, + -0.03726086233570953, + -0.005449066140771361, + 0.026648129724923395, + 0.058241427706856384, + 0.08862652853638416, + 0.11720338291232232, + 0.14348926836260514, + 0.16712567793535366, + 0.18787932061729182, + 0.20563779959612533, + 0.22040074178662336, + 0.23226729318028777, + 0.24142096714711753, + 0.24811283911536614, + 0.25264402764959015, + 0.255348298963932, + 0.256575492104657, + 0.2566762997375786, + 0.2559887694405144, + 0.2548267267047997, + 0.25347017586536014, + 0.252157618714697, + 0.25108014921898075, + 0.25037713957121355, + 0.25013332713993036, + 0.25037713957121355, + 0.25108014921898075, + 0.252157618714697, + 0.25347017586536014, + 0.2548267267047997, + 0.2559887694405144, + 0.2566762997375786, + 0.256575492104657, + 0.255348298963932, + 0.25264402764959015, + 0.24811283911536614, + 0.24142096714711753, + 0.23226729318028777, + 0.22040074178662336, + 0.20563779959612533, + 0.18787932061729182, + 0.16712567793535366, + 0.14348926836260514, + 0.11720338291232232, + 0.08862652853638416, + 0.058241427706856384, + 0.026648129724923395, + -0.005449066140771361, + -0.03726086233570953, + -0.06793803188546253, + -0.09660159075517502, + -0.12237701362727325, + -0.14443111863131364, + -0.16200998595397612, + -0.17447608825271163, + -0.18134271385500067, + -0.18230376872794093, + -0.17725715646546372, + -0.16632015713858264, + -0.14983554931501694, + -0.1283676319466868, + -0.10268778525178764, + -0.07374973820785838, + -0.042655257000177006 + ], + [ + -0.0345063152690242, + -0.06655906279410359, + -0.09668883252747353, + -0.12368964794720452, + -0.1464987033293174, + -0.1642373823959323, + -0.17624240938958516, + -0.18208605074549258, + -0.18158488243001691, + -0.1747972342928682, + -0.16200998595397612, + -0.1437158894806465, + -0.12058300781296416, + -0.09341816596346665, + -0.0631265026963309, + -0.03066927919323432, + 0.0029779491154211806, + 0.03686485131708162, + 0.07010183827093616, + 0.1018902143955224, + 0.13154597877649798, + 0.15851669454452746, + 0.18239124981424537, + 0.20290271423033404, + 0.21992483146863692, + 0.23346296309158113, + 0.24364050109720906, + 0.2506818889186662, + 0.254893432701845, + 0.2566430509401283, + 0.2563400102730029, + 0.25441554164532254, + 0.25130504004127213, + 0.24743234013685533, + 0.2431963471432226, + 0.23896010343988033, + 0.23504220166614895, + 0.2317103248693539, + 0.22917661128094333, + 0.22759450814784551, + 0.2270567942100705, + 0.22759450814784551, + 0.22917661128094333, + 0.2317103248693539, + 0.23504220166614895, + 0.23896010343988033, + 0.2431963471432226, + 0.24743234013685533, + 0.25130504004127213, + 0.25441554164532254, + 0.2563400102730029, + 0.2566430509401283, + 0.254893432701845, + 0.2506818889186662, + 0.24364050109720906, + 0.23346296309158113, + 0.21992483146863692, + 0.20290271423033404, + 0.18239124981424537, + 0.15851669454452746, + 0.13154597877649798, + 0.1018902143955224, + 0.07010183827093616, + 0.03686485131708162, + 0.0029779491154211806, + -0.03066927919323432, + -0.0631265026963309, + -0.09341816596346665, + -0.12058300781296416, + -0.1437158894806465, + -0.16200998595397612, + -0.1747972342928682, + -0.18158488243001691, + -0.18208605074549258, + -0.17624240938958516, + -0.1642373823959323, + -0.1464987033293174, + -0.12368964794720452, + -0.09668883252747353, + -0.06655906279410359 + ], + [ + -0.05769048962428924, + -0.08904297911487404, + -0.11749065565570795, + -0.14185512230149663, + -0.16113955966514656, + -0.17456713788189782, + -0.18160802037610754, + -0.18199408570471504, + -0.17572115154133375, + -0.16303912773542587, + -0.14443111863131364, + -0.12058300781296416, + -0.09234546620178369, + -0.060690608986011814, + -0.026665677985416577, + 0.008653858363151095, + 0.044209509361482956, + 0.07900122348247962, + 0.11212338767979044, + 0.14279404657238684, + 0.17037647050011587, + 0.1943926655354523, + 0.2145288714461612, + 0.23063350923189954, + 0.242708395806646, + 0.2508943222213973, + 0.2554522819126627, + 0.2567417315441088, + 0.25519727019112654, + 0.25130504004127213, + 0.2455799958764798, + 0.23854497801642713, + 0.23071227369415243, + 0.22256808600007377, + 0.21456006847846779, + 0.2070878465419809, + 0.20049625055173417, + 0.19507084218595108, + 0.19103523332295086, + 0.18854967763954522, + 0.18771045677679687, + 0.18854967763954522, + 0.19103523332295086, + 0.19507084218595108, + 0.20049625055173417, + 0.2070878465419809, + 0.21456006847846779, + 0.22256808600007377, + 0.23071227369415243, + 0.23854497801642713, + 0.2455799958764798, + 0.25130504004127213, + 0.25519727019112654, + 0.2567417315441088, + 0.2554522819126627, + 0.2508943222213973, + 0.242708395806646, + 0.23063350923189954, + 0.2145288714461612, + 0.1943926655354523, + 0.17037647050011587, + 0.14279404657238684, + 0.11212338767979044, + 0.07900122348247962, + 0.044209509361482956, + 0.008653858363151095, + -0.026665677985416577, + -0.060690608986011814, + -0.09234546620178369, + -0.12058300781296416, + -0.14443111863131364, + -0.16303912773542587, + -0.17572115154133375, + -0.18199408570471504, + -0.18160802037610754, + -0.17456713788189782, + -0.16113955966514656, + -0.14185512230149663, + -0.11749065565570795, + -0.08904297911487404 + ], + [ + -0.07968395387291566, + -0.10965701691843574, + -0.13575600794040762, + -0.15685668268767797, + -0.17205475511311313, + -0.1807007071005138, + -0.18242166855756492, + -0.17712974307464055, + -0.16501687105976595, + -0.14653700801271363, + -0.12237701362727325, + -0.09341816596346665, + -0.060690608986011814, + -0.02532329427921568, + 0.011507919583092052, + 0.04863139306208121, + 0.08492762656935865, + 0.11937185506223688, + 0.1510696036571175, + 0.1792839709402817, + 0.20345392533496165, + 0.2232034254780841, + 0.2383416766936446, + 0.24885528388828942, + 0.254893432701845, + 0.25674750760048576, + 0.2548267267047997, + 0.24963143467045815, + 0.24172565029557566, + 0.2317103248693539, + 0.22019854657881394, + 0.20779364608280457, + 0.19507084218595108, + 0.18256273925541686, + 0.17074867404778504, + 0.16004763127913005, + 0.15081422331281308, + 0.1433370736825879, + 0.13783886506830845, + 0.134477311926808, + 0.1333463922312941, + 0.134477311926808, + 0.13783886506830845, + 0.1433370736825879, + 0.15081422331281308, + 0.16004763127913005, + 0.17074867404778504, + 0.18256273925541686, + 0.19507084218595108, + 0.20779364608280457, + 0.22019854657881394, + 0.2317103248693539, + 0.24172565029557566, + 0.24963143467045815, + 0.2548267267047997, + 0.25674750760048576, + 0.254893432701845, + 0.24885528388828942, + 0.2383416766936446, + 0.2232034254780841, + 0.20345392533496165, + 0.1792839709402817, + 0.1510696036571175, + 0.11937185506223688, + 0.08492762656935865, + 0.04863139306208121, + 0.011507919583092052, + -0.02532329427921568, + -0.060690608986011814, + -0.09341816596346665, + -0.12237701362727325, + -0.14653700801271363, + -0.16501687105976595, + -0.17712974307464055, + -0.18242166855756492, + -0.1807007071005138, + -0.17205475511311313, + -0.15685668268767797, + -0.13575600794040762, + -0.10965701691843574 + ], + [ + -0.10007704610444179, + -0.12803786284735597, + -0.1511875643863488, + -0.16848219583369567, + -0.17913546063850083, + -0.18264893898060253, + -0.1788278960809016, + -0.16778234479339135, + -0.1499137997580331, + -0.1258888846262905, + -0.09660159075517502, + -0.0631265026963309, + -0.026665677985416577, + 0.011507919583092052, + 0.05010748884225075, + 0.0878871354792479, + 0.12369173187889267, + 0.15649972810645998, + 0.18545724476618586, + 0.20990234059772522, + 0.22937894091767205, + 0.24364050109720906, + 0.25264402764959015, + 0.25653555744366946, + 0.25562857790064414, + 0.25037713957121355, + 0.2413455569066888, + 0.22917661128094333, + 0.21456006847846779, + 0.1982031145119569, + 0.18080401871815463, + 0.1630299764243758, + 0.1454996929947382, + 0.12877087581897034, + 0.11333242903336224, + 0.09960082298540655, + 0.08791985781076668, + 0.07856287339249271, + 0.07173638515428266, + 0.06758414818694233, + 0.0661907655654817, + 0.06758414818694233, + 0.07173638515428266, + 0.07856287339249271, + 0.08791985781076668, + 0.09960082298540655, + 0.11333242903336224, + 0.12877087581897034, + 0.1454996929947382, + 0.1630299764243758, + 0.18080401871815463, + 0.1982031145119569, + 0.21456006847846779, + 0.22917661128094333, + 0.2413455569066888, + 0.25037713957121355, + 0.25562857790064414, + 0.25653555744366946, + 0.25264402764959015, + 0.24364050109720906, + 0.22937894091767205, + 0.20990234059772522, + 0.18545724476618586, + 0.15649972810645998, + 0.12369173187889267, + 0.0878871354792479, + 0.05010748884225075, + 0.011507919583092052, + -0.026665677985416577, + -0.0631265026963309, + -0.09660159075517502, + -0.1258888846262905, + -0.1499137997580331, + -0.16778234479339135, + -0.1788278960809016, + -0.18264893898060253, + -0.17913546063850083, + -0.16848219583369567, + -0.1511875643863488, + -0.12803786284735597 + ], + [ + -0.11853755153953285, + -0.14391335124448024, + -0.163591222139663, + -0.17663261032673944, + -0.18239300622958532, + -0.18054660691367944, + -0.17109514979541934, + -0.1543609103022869, + -0.13096468174943518, + -0.10179031338845618, + -0.06793803188546253, + -0.03066927919323432, + 0.008653858363151095, + 0.04863139306208121, + 0.0878871354792479, + 0.12512633286074154, + 0.15918658398472915, + 0.1890798565922851, + 0.21402402107025095, + 0.23346296309158113, + 0.24707500803079696, + 0.25477004091850136, + 0.2566762997375786, + 0.25311832399967577, + 0.24458792842044305, + 0.2317103248693539, + 0.2152076253393881, + 0.19586192453391038, + 0.17447999195279823, + 0.15186131748507978, + 0.12877087581897034, + 0.10591753298818528, + 0.08393854575868848, + 0.06339013493636744, + 0.044743679368913644, + 0.02838670735216783, + 0.014627580006334946, + 0.0037025838949493145, + -0.004215913110515241, + -0.009011537058698997, + -0.010617349295218181, + -0.009011537058698997, + -0.004215913110515241, + 0.0037025838949493145, + 0.014627580006334946, + 0.02838670735216783, + 0.044743679368913644, + 0.06339013493636744, + 0.08393854575868848, + 0.10591753298818528, + 0.12877087581897034, + 0.15186131748507978, + 0.17447999195279823, + 0.19586192453391038, + 0.2152076253393881, + 0.2317103248693539, + 0.24458792842044305, + 0.25311832399967577, + 0.2566762997375786, + 0.25477004091850136, + 0.24707500803079696, + 0.23346296309158113, + 0.21402402107025095, + 0.1890798565922851, + 0.15918658398472915, + 0.12512633286074154, + 0.0878871354792479, + 0.04863139306208121, + 0.008653858363151095, + -0.03066927919323432, + -0.06793803188546253, + -0.10179031338845618, + -0.13096468174943518, + -0.1543609103022869, + -0.17109514979541934, + -0.18054660691367944, + -0.18239300622958532, + -0.17663261032673944, + -0.163591222139663, + -0.14391335124448024 + ], + [ + -0.13481430178982187, + -0.15710321083861073, + -0.17287351607260815, + -0.18131560690315682, + -0.18194839266053625, + -0.17463748569481502, + -0.15959621882048483, + -0.13736985507049018, + -0.10880422217787396, + -0.0750007897964791, + -0.03726086233570953, + 0.0029779491154211806, + 0.044209509361482956, + 0.08492762656935865, + 0.12369173187889267, + 0.15918658398472915, + 0.1902732638436695, + 0.21602931256266372, + 0.23577655069724138, + 0.24909585663212155, + 0.25582893038458626, + 0.2560677827399544, + 0.25013332713993036, + 0.23854497801642713, + 0.22198354690007724, + 0.20124995852555586, + 0.17722237538812438, + 0.15081422331281308, + 0.12293536517635703, + 0.09445829662141196, + 0.0661907655654817, + 0.03885568116655977, + 0.013078615468659323, + -0.010617349295218181, + -0.03181017613329085, + -0.050171999808914604, + -0.06545830501430487, + -0.07749482277960204, + -0.08616386191642225, + -0.09139170665445415, + -0.09313849939964196, + -0.09139170665445415, + -0.08616386191642225, + -0.07749482277960204, + -0.06545830501430487, + -0.050171999808914604, + -0.03181017613329085, + -0.010617349295218181, + 0.013078615468659323, + 0.03885568116655977, + 0.0661907655654817, + 0.09445829662141196, + 0.12293536517635703, + 0.15081422331281308, + 0.17722237538812438, + 0.20124995852555586, + 0.22198354690007724, + 0.23854497801642713, + 0.25013332713993036, + 0.2560677827399544, + 0.25582893038458626, + 0.24909585663212155, + 0.23577655069724138, + 0.21602931256266372, + 0.1902732638436695, + 0.15918658398472915, + 0.12369173187889267, + 0.08492762656935865, + 0.044209509361482956, + 0.0029779491154211806, + -0.03726086233570953, + -0.0750007897964791, + -0.10880422217787396, + -0.13736985507049018, + -0.15959621882048483, + -0.17463748569481502, + -0.18194839266053625, + -0.18131560690315682, + -0.17287351607260815, + -0.15710321083861073 + ], + [ + -0.1487375524385824, + -0.16751643729146143, + -0.17903560277058095, + -0.1826358700412797, + -0.17801860199902664, + -0.16525654180237792, + -0.14478624788034108, + -0.11738288358628372, + -0.08411903827788304, + -0.046310064114579955, + -0.005449066140771361, + 0.03686485131708162, + 0.07900122348247962, + 0.11937185506223688, + 0.15649972810645998, + 0.1890798565922851, + 0.21602931256266372, + 0.2365243422174828, + 0.25002327766855664, + 0.2562747828163765, + 0.2553118000893658, + 0.24743234013685533, + 0.23316893482082693, + 0.21324911772700825, + 0.18854967763954522, + 0.16004763127913005, + 0.12877087581897034, + 0.0957513146109, + 0.06198291759831892, + 0.02838670735216783, + -0.004215913110515241, + -0.03512071345143313, + -0.06374895250625122, + -0.08964697741323371, + -0.11247819731414006, + -0.132008995765264, + -0.14809048863531396, + -0.16063822727306362, + -0.1696119802323752, + -0.17499760171649797, + -0.1767927226084377, + -0.17499760171649797, + -0.1696119802323752, + -0.16063822727306362, + -0.14809048863531396, + -0.132008995765264, + -0.11247819731414006, + -0.08964697741323371, + -0.06374895250625122, + -0.03512071345143313, + -0.004215913110515241, + 0.02838670735216783, + 0.06198291759831892, + 0.0957513146109, + 0.12877087581897034, + 0.16004763127913005, + 0.18854967763954522, + 0.21324911772700825, + 0.23316893482082693, + 0.24743234013685533, + 0.2553118000893658, + 0.2562747828163765, + 0.25002327766855664, + 0.2365243422174828, + 0.21602931256266372, + 0.1890798565922851, + 0.15649972810645998, + 0.11937185506223688, + 0.07900122348247962, + 0.03686485131708162, + -0.005449066140771361, + -0.046310064114579955, + -0.08411903827788304, + -0.11738288358628372, + -0.14478624788034108, + -0.16525654180237792, + -0.17801860199902664, + -0.1826358700412797, + -0.17903560277058095, + -0.16751643729146143 + ], + [ + -0.16021647158282734, + -0.1751457556394694, + -0.1821644169794075, + -0.18078273088932142, + -0.17090060569317098, + -0.1528102839666787, + -0.1271795169340972, + -0.0950164022704569, + -0.05761803324395176, + -0.016505930263581485, + 0.026648129724923395, + 0.07010183827093616, + 0.11212338767979044, + 0.1510696036571175, + 0.18545724476618586, + 0.21402402107025095, + 0.23577655069724138, + 0.25002327766855664, + 0.25639126767027576, + 0.2548267267047997, + 0.2455799958764798, + 0.22917661128094333, + 0.2063767337439853, + 0.17812580971586786, + 0.1454996929947382, + 0.1096476200446325, + 0.07173638515428266, + 0.032898814044057145, + -0.005810793613848673, + -0.043452159632214875, + -0.0792240541655952, + -0.11247819731414006, + -0.14272214282150672, + -0.1696119802323752, + -0.1929363397545002, + -0.2125937105436689, + -0.22856545626592412, + -0.24088710992360066, + -0.24962054293732017, + -0.254829433326894, + -0.2565601183892334, + -0.254829433326894, + -0.24962054293732017, + -0.24088710992360066, + -0.22856545626592412, + -0.2125937105436689, + -0.1929363397545002, + -0.1696119802323752, + -0.14272214282150672, + -0.11247819731414006, + -0.0792240541655952, + -0.043452159632214875, + -0.005810793613848673, + 0.032898814044057145, + 0.07173638515428266, + 0.1096476200446325, + 0.1454996929947382, + 0.17812580971586786, + 0.2063767337439853, + 0.22917661128094333, + 0.2455799958764798, + 0.2548267267047997, + 0.25639126767027576, + 0.25002327766855664, + 0.23577655069724138, + 0.21402402107025095, + 0.18545724476618586, + 0.1510696036571175, + 0.11212338767979044, + 0.07010183827093616, + 0.026648129724923395, + -0.016505930263581485, + -0.05761803324395176, + -0.0950164022704569, + -0.1271795169340972, + -0.1528102839666787, + -0.17090060569317098, + -0.18078273088932142, + -0.1821644169794075, + -0.1751457556394694 + ], + [ + -0.16923416092386775, + -0.1800597155006458, + -0.18242166855756492, + -0.1760159755489718, + -0.1609539875623888, + -0.1377563081818195, + -0.10732612754693129, + -0.07090368426500879, + -0.030004497243790427, + 0.013655158230898757, + 0.058241427706856384, + 0.1018902143955224, + 0.14279404657238684, + 0.1792839709402817, + 0.20990234059772522, + 0.23346296309158113, + 0.24909585663212155, + 0.2562747828163765, + 0.2548267267047997, + 0.24492352037505036, + 0.2270567942100705, + 0.20199833430642128, + 0.17074867404778504, + 0.134477311926808, + 0.09445829662141196, + 0.05200503792795912, + 0.00840808631479302, + -0.03512071345143313, + -0.07749482277960204, + -0.1177881852505473, + -0.15525760655490364, + -0.18935183535374994, + -0.21970771693043267, + -0.246134617818378, + -0.268589046149572, + -0.28714197491104243, + -0.30194177876754097, + -0.31317589634427284, + -0.3210343185560354, + -0.32567778292945404, + -0.32721314035298743, + -0.32567778292945404, + -0.3210343185560354, + -0.31317589634427284, + -0.30194177876754097, + -0.28714197491104243, + -0.268589046149572, + -0.246134617818378, + -0.21970771693043267, + -0.18935183535374994, + -0.15525760655490364, + -0.1177881852505473, + -0.07749482277960204, + -0.03512071345143313, + 0.00840808631479302, + 0.05200503792795912, + 0.09445829662141196, + 0.134477311926808, + 0.17074867404778504, + 0.20199833430642128, + 0.2270567942100705, + 0.24492352037505036, + 0.2548267267047997, + 0.2562747828163765, + 0.24909585663212155, + 0.23346296309158113, + 0.20990234059772522, + 0.1792839709402817, + 0.14279404657238684, + 0.1018902143955224, + 0.058241427706856384, + 0.013655158230898757, + -0.030004497243790427, + -0.07090368426500879, + -0.10732612754693129, + -0.1377563081818195, + -0.1609539875623888, + -0.1760159755489718, + -0.18242166855756492, + -0.1800597155006458 + ], + [ + -0.17584069010379264, + -0.18239300622958532, + -0.1800313728705813, + -0.16865061331126227, + -0.14858307017251748, + -0.12058300781296416, + -0.0857896329957062, + -0.045670869380806056, + -0.001951040868825416, + 0.043473546354522816, + 0.08862652853638416, + 0.13154597877649798, + 0.17037647050011587, + 0.20345392533496165, + 0.22937894091767205, + 0.24707500803079696, + 0.25582893038458626, + 0.2553118000893658, + 0.2455799958764798, + 0.2270567942100705, + 0.20049625055173417, + 0.16693195814109418, + 0.12761407121954643, + 0.08393854575868848, + 0.037372873633869375, + -0.010617349295218181, + -0.05863687417657578, + -0.10542055787501849, + -0.14988136590815446, + -0.19114437378651342, + -0.22856545626592412, + -0.2617343483375656, + -0.29046275344788247, + -0.31475910259630246, + -0.33479237619194996, + -0.35084804028714445, + -0.3632795822101567, + -0.37245933283868765, + -0.3787322233669178, + -0.382375848005458, + -0.3835697098652554, + -0.382375848005458, + -0.3787322233669178, + -0.37245933283868765, + -0.3632795822101567, + -0.35084804028714445, + -0.33479237619194996, + -0.31475910259630246, + -0.29046275344788247, + -0.2617343483375656, + -0.22856545626592412, + -0.19114437378651342, + -0.14988136590815446, + -0.10542055787501849, + -0.05863687417657578, + -0.010617349295218181, + 0.037372873633869375, + 0.08393854575868848, + 0.12761407121954643, + 0.16693195814109418, + 0.20049625055173417, + 0.2270567942100705, + 0.2455799958764798, + 0.2553118000893658, + 0.25582893038458626, + 0.24707500803079696, + 0.22937894091767205, + 0.20345392533496165, + 0.17037647050011587, + 0.13154597877649798, + 0.08862652853638416, + 0.043473546354522816, + -0.001951040868825416, + -0.045670869380806056, + -0.0857896329957062, + -0.12058300781296416, + -0.14858307017251748, + -0.16865061331126227, + -0.1800313728705813, + -0.18239300622958532 + ], + [ + -0.1801446545297837, + -0.18233559039097344, + -0.1752665961050691, + -0.15904136091487175, + -0.13421936300715656, + -0.10179031338845618, + -0.0631265026963309, + -0.019915691575644292, + 0.025921773001301992, + 0.07232710218505171, + 0.11720338291232232, + 0.15851669454452746, + 0.1943926655354523, + 0.2232034254780841, + 0.24364050109720906, + 0.25477004091850136, + 0.2560677827399544, + 0.24743234013685533, + 0.22917661128094333, + 0.20199833430642128, + 0.16693195814109418, + 0.12528500092613942, + 0.07856287339249271, + 0.02838670735216783, + -0.02359098016854476, + -0.0757679524450742, + -0.12666669235949252, + -0.17499760171649797, + -0.21970771693043267, + -0.26001264723920775, + -0.29541051237375787, + -0.32567778292945404, + -0.35084804028714445, + -0.37117570680030565, + -0.38708768931988075, + -0.3991265770886398, + -0.407889497747319, + -0.41396693622794944, + -0.417885750201407, + -0.4200602785751461, + -0.4207548585159486, + -0.4200602785751461, + -0.417885750201407, + -0.41396693622794944, + -0.407889497747319, + -0.3991265770886398, + -0.38708768931988075, + -0.37117570680030565, + -0.35084804028714445, + -0.32567778292945404, + -0.29541051237375787, + -0.26001264723920775, + -0.21970771693043267, + -0.17499760171649797, + -0.12666669235949252, + -0.0757679524450742, + -0.02359098016854476, + 0.02838670735216783, + 0.07856287339249271, + 0.12528500092613942, + 0.16693195814109418, + 0.20199833430642128, + 0.22917661128094333, + 0.24743234013685533, + 0.2560677827399544, + 0.25477004091850136, + 0.24364050109720906, + 0.2232034254780841, + 0.1943926655354523, + 0.15851669454452746, + 0.11720338291232232, + 0.07232710218505171, + 0.025921773001301992, + -0.019915691575644292, + -0.0631265026963309, + -0.10179031338845618, + -0.13421936300715656, + -0.15904136091487175, + -0.1752665961050691, + -0.18233559039097344 + ], + [ + -0.18230376872794093, + -0.18012123502583363, + -0.16843605361995675, + -0.14756752732225356, + -0.11830504740258321, + -0.08187218787401292, + -0.039868134180728126, + 0.0058103924762656495, + 0.05306249567952219, + 0.09968670899986165, + 0.14348926836260514, + 0.18239124981424537, + 0.2145288714461612, + 0.2383416766936446, + 0.25264402764959015, + 0.2566762997375786, + 0.25013332713993036, + 0.23316893482082693, + 0.2063767337439853, + 0.17074867404778504, + 0.12761407121954643, + 0.07856287339249271, + 0.02535776443828009, + -0.030159748399708135, + -0.08616386191642225, + -0.1409342819269669, + -0.1929363397545002, + -0.24088710992360066, + -0.2838041182964338, + -0.3210343185560354, + -0.35226222727992795, + -0.37749737145928347, + -0.3970424421347404, + -0.41144469052055266, + -0.42143408131469146, + -0.42785247459104203, + -0.43157859884674826, + -0.4334537754581445, + -0.434213248547002, + -0.43442757176285574, + -0.43445783007337646, + -0.43442757176285574, + -0.434213248547002, + -0.4334537754581445, + -0.43157859884674826, + -0.42785247459104203, + -0.42143408131469146, + -0.41144469052055266, + -0.3970424421347404, + -0.37749737145928347, + -0.35226222727992795, + -0.3210343185560354, + -0.2838041182964338, + -0.24088710992360066, + -0.1929363397545002, + -0.1409342819269669, + -0.08616386191642225, + -0.030159748399708135, + 0.02535776443828009, + 0.07856287339249271, + 0.12761407121954643, + 0.17074867404778504, + 0.2063767337439853, + 0.23316893482082693, + 0.25013332713993036, + 0.2566762997375786, + 0.25264402764959015, + 0.2383416766936446, + 0.2145288714461612, + 0.18239124981424537, + 0.14348926836260514, + 0.09968670899986165, + 0.05306249567952219, + 0.0058103924762656495, + -0.039868134180728126, + -0.08187218787401292, + -0.11830504740258321, + -0.14756752732225356, + -0.16843605361995675, + -0.18012123502583363 + ], + [ + -0.18251498442862385, + -0.1760159755489718, + -0.15987112992755653, + -0.13461888616197776, + -0.10127808535368477, + -0.061301442485772274, + -0.016505930263581485, + 0.031016232090896562, + 0.07900122348247962, + 0.12512633286074154, + 0.16712567793535366, + 0.20290271423033404, + 0.23063350923189954, + 0.24885528388828942, + 0.25653555744366946, + 0.25311832399967577, + 0.23854497801642713, + 0.21324911772700825, + 0.17812580971586786, + 0.134477311926808, + 0.08393854575868848, + 0.02838670735216783, + -0.030159748399708135, + -0.08964697741323371, + -0.14809048863531396, + -0.2036729142303004, + -0.254829433326894, + -0.30031625065864676, + -0.3392585664190622, + -0.37117570680030565, + -0.39598244357893553, + -0.41396693622794944, + -0.42574709936268906, + -0.43220845214435083, + -0.43442757176285574, + -0.4335860886421158, + -0.4308806796227811, + -0.4274347075936389, + -0.42421701152445723, + -0.42197287899622543, + -0.421171462695804, + -0.42197287899622543, + -0.42421701152445723, + -0.4274347075936389, + -0.4308806796227811, + -0.4335860886421158, + -0.43442757176285574, + -0.43220845214435083, + -0.42574709936268906, + -0.41396693622794944, + -0.39598244357893553, + -0.37117570680030565, + -0.3392585664190622, + -0.30031625065864676, + -0.254829433326894, + -0.2036729142303004, + -0.14809048863531396, + -0.08964697741323371, + -0.030159748399708135, + 0.02838670735216783, + 0.08393854575868848, + 0.134477311926808, + 0.17812580971586786, + 0.21324911772700825, + 0.23854497801642713, + 0.25311832399967577, + 0.25653555744366946, + 0.24885528388828942, + 0.23063350923189954, + 0.20290271423033404, + 0.16712567793535366, + 0.12512633286074154, + 0.07900122348247962, + 0.031016232090896562, + -0.016505930263581485, + -0.061301442485772274, + -0.10127808535368477, + -0.13461888616197776, + -0.15987112992755653, + -0.1760159755489718 + ], + [ + -0.18100457917857166, + -0.17030698199702413, + -0.1499137997580331, + -0.12058300781296416, + -0.08355939645450051, + -0.040517266401149735, + 0.0065202421682302655, + 0.05528095770522729, + 0.10335731863015635, + 0.14832776112580212, + 0.18787932061729182, + 0.21992483146863692, + 0.242708395806646, + 0.254893432701845, + 0.25562857790064414, + 0.24458792842044305, + 0.22198354690007724, + 0.18854967763954522, + 0.1454996929947382, + 0.09445829662141196, + 0.037372873633869375, + -0.02359098016854476, + -0.08616386191642225, + -0.14809048863531396, + -0.20724458052139974, + -0.2617343483375656, + -0.309992807249447, + -0.35084804028714445, + -0.3835697098652554, + -0.407889497747319, + -0.42399466300627076, + -0.43249545715781157, + -0.43436863670247905, + -0.4308806796227811, + -0.42349546556438716, + -0.4137720534188708, + -0.40325873487122593, + -0.39338972722403176, + -0.3853906832849483, + -0.3801986514917913, + -0.3784012476539641, + -0.3801986514917913, + -0.3853906832849483, + -0.39338972722403176, + -0.40325873487122593, + -0.4137720534188708, + -0.42349546556438716, + -0.4308806796227811, + -0.43436863670247905, + -0.43249545715781157, + -0.42399466300627076, + -0.407889497747319, + -0.3835697098652554, + -0.35084804028714445, + -0.309992807249447, + -0.2617343483375656, + -0.20724458052139974, + -0.14809048863531396, + -0.08616386191642225, + -0.02359098016854476, + 0.037372873633869375, + 0.09445829662141196, + 0.1454996929947382, + 0.18854967763954522, + 0.22198354690007724, + 0.24458792842044305, + 0.25562857790064414, + 0.254893432701845, + 0.242708395806646, + 0.21992483146863692, + 0.18787932061729182, + 0.14832776112580212, + 0.10335731863015635, + 0.05528095770522729, + 0.0065202421682302655, + -0.040517266401149735, + -0.08355939645450051, + -0.12058300781296416, + -0.1499137997580331, + -0.17030698199702413 + ], + [ + -0.17801860199902664, + -0.16329221750830802, + -0.13890582780165694, + -0.10583439818051152, + -0.06554239869174844, + -0.019915691575644292, + 0.02883009042098063, + 0.07825990831739421, + 0.1258425822940911, + 0.16908036038891633, + 0.20563779959612533, + 0.23346296309158113, + 0.2508943222213973, + 0.25674750760048576, + 0.25037713957121355, + 0.2317103248693539, + 0.20124995852555586, + 0.16004763127913005, + 0.1096476200446325, + 0.05200503792795912, + -0.010617349295218181, + -0.0757679524450742, + -0.1409342819269669, + -0.2036729142303004, + -0.2617343483375656, + -0.31317589634427284, + -0.3564564355250057, + -0.3905078789395116, + -0.4147795406040892, + -0.42925310491460716, + -0.43442757176285574, + -0.4312752446188071, + -0.421171462695804, + -0.40580225753498556, + -0.38705535500366767, + -0.36690087535799776, + -0.3472686537517362, + -0.32992927901128904, + -0.3163857196862348, + -0.3077817863653888, + -0.30483270332925, + -0.3077817863653888, + -0.3163857196862348, + -0.32992927901128904, + -0.3472686537517362, + -0.36690087535799776, + -0.38705535500366767, + -0.40580225753498556, + -0.421171462695804, + -0.4312752446188071, + -0.43442757176285574, + -0.42925310491460716, + -0.4147795406040892, + -0.3905078789395116, + -0.3564564355250057, + -0.31317589634427284, + -0.2617343483375656, + -0.2036729142303004, + -0.1409342819269669, + -0.0757679524450742, + -0.010617349295218181, + 0.05200503792795912, + 0.1096476200446325, + 0.16004763127913005, + 0.20124995852555586, + 0.2317103248693539, + 0.25037713957121355, + 0.25674750760048576, + 0.2508943222213973, + 0.23346296309158113, + 0.20563779959612533, + 0.16908036038891633, + 0.1258425822940911, + 0.07825990831739421, + 0.02883009042098063, + -0.019915691575644292, + -0.06554239869174844, + -0.10583439818051152, + -0.13890582780165694, + -0.16329221750830802 + ], + [ + -0.1738139924448547, + -0.15527119023634725, + -0.1271795169340972, + -0.0907256642328181, + -0.04758506314163741, + 0.0001569493213448689, + 0.05010748884225075, + 0.09968670899986165, + 0.14626024334832619, + 0.18727640924644018, + 0.22040074178662336, + 0.24364050109720906, + 0.2554522819126627, + 0.2548267267047997, + 0.2413455569066888, + 0.2152076253393881, + 0.17722237538812438, + 0.12877087581897034, + 0.07173638515428266, + 0.00840808631479302, + -0.05863687417657578, + -0.12666669235949252, + -0.1929363397545002, + -0.254829433326894, + -0.309992807249447, + -0.3564564355250057, + -0.39273214882544505, + -0.417885750201407, + -0.43157859884674826, + -0.434076417833265, + -0.42622489689420734, + -0.4093935036702951, + -0.3853906832849483, + -0.35635521764627226, + -0.324629843053556, + -0.29262421276448536, + -0.2626748843273063, + -0.23691017597600564, + -0.21712746254366178, + -0.20468978410715197, + -0.20044755867978276, + -0.20468978410715197, + -0.21712746254366178, + -0.23691017597600564, + -0.2626748843273063, + -0.29262421276448536, + -0.324629843053556, + -0.35635521764627226, + -0.3853906832849483, + -0.4093935036702951, + -0.42622489689420734, + -0.434076417833265, + -0.43157859884674826, + -0.417885750201407, + -0.39273214882544505, + -0.3564564355250057, + -0.309992807249447, + -0.254829433326894, + -0.1929363397545002, + -0.12666669235949252, + -0.05863687417657578, + 0.00840808631479302, + 0.07173638515428266, + 0.12877087581897034, + 0.17722237538812438, + 0.2152076253393881, + 0.2413455569066888, + 0.2548267267047997, + 0.2554522819126627, + 0.24364050109720906, + 0.22040074178662336, + 0.18727640924644018, + 0.14626024334832619, + 0.09968670899986165, + 0.05010748884225075, + 0.0001569493213448689, + -0.04758506314163741, + -0.0907256642328181, + -0.1271795169340972, + -0.15527119023634725 + ], + [ + -0.16865061331126227, + -0.14653700801271363, + -0.11505016730310495, + -0.07558080422426758, + -0.030004497243790427, + 0.019407660252202565, + 0.07010183827093616, + 0.11937185506223688, + 0.16450028494360933, + 0.20290271423033404, + 0.23226729318028777, + 0.2506818889186662, + 0.2567417315441088, + 0.24963143467045815, + 0.22917661128094333, + 0.19586192453391038, + 0.15081422331281308, + 0.0957513146109, + 0.032898814044057145, + -0.03512071345143313, + -0.10542055787501849, + -0.17499760171649797, + -0.24088710992360066, + -0.30031625065864676, + -0.35084804028714445, + -0.3905078789395116, + -0.417885750201407, + -0.43220845214435083, + -0.4333778373354074, + -0.42197287899622543, + -0.39921534828629784, + -0.36690087535799776, + -0.32729906443176787, + -0.28302803533990717, + -0.23691017597600564, + -0.19181693290541052, + -0.15051108239111077, + -0.11549507625799743, + -0.08887373699192957, + -0.0722388011028484, + -0.06658162124929747, + -0.0722388011028484, + -0.08887373699192957, + -0.11549507625799743, + -0.15051108239111077, + -0.19181693290541052, + -0.23691017597600564, + -0.28302803533990717, + -0.32729906443176787, + -0.36690087535799776, + -0.39921534828629784, + -0.42197287899622543, + -0.4333778373354074, + -0.43220845214435083, + -0.417885750201407, + -0.3905078789395116, + -0.35084804028714445, + -0.30031625065864676, + -0.24088710992360066, + -0.17499760171649797, + -0.10542055787501849, + -0.03512071345143313, + 0.032898814044057145, + 0.0957513146109, + 0.15081422331281308, + 0.19586192453391038, + 0.22917661128094333, + 0.24963143467045815, + 0.2567417315441088, + 0.2506818889186662, + 0.23226729318028777, + 0.20290271423033404, + 0.16450028494360933, + 0.11937185506223688, + 0.07010183827093616, + 0.019407660252202565, + -0.030004497243790427, + -0.07558080422426758, + -0.11505016730310495, + -0.14653700801271363 + ], + [ + -0.16278435980926842, + -0.13736985507049018, + -0.10281030706494565, + -0.060690608986011814, + -0.013073952151520388, + 0.03759772656874239, + 0.08862652853638416, + 0.13719827990417027, + 0.18053174205108255, + 0.21602931256266372, + 0.24142096714711753, + 0.254893432701845, + 0.25519727019112654, + 0.24172565029557566, + 0.21456006847846779, + 0.17447999195279823, + 0.12293536517635703, + 0.06198291759831892, + -0.005810793613848673, + -0.07749482277960204, + -0.14988136590815446, + -0.21970771693043267, + -0.2838041182964338, + -0.3392585664190622, + -0.3835697098652554, + -0.4147795406040892, + -0.43157859884674826, + -0.4333778373354074, + -0.4203430458705095, + -0.39338972722403176, + -0.3541384336243295, + -0.30483270332925, + -0.24822376277499153, + -0.187427969950852, + -0.1257644689695074, + -0.06658162124929747, + -0.0130814139378774, + 0.03184881503912622, + 0.0657883626364726, + 0.08691073780520595, + 0.0940800053732448, + 0.08691073780520595, + 0.0657883626364726, + 0.03184881503912622, + -0.0130814139378774, + -0.06658162124929747, + -0.1257644689695074, + -0.187427969950852, + -0.24822376277499153, + -0.30483270332925, + -0.3541384336243295, + -0.39338972722403176, + -0.4203430458705095, + -0.4333778373354074, + -0.43157859884674826, + -0.4147795406040892, + -0.3835697098652554, + -0.3392585664190622, + -0.2838041182964338, + -0.21970771693043267, + -0.14988136590815446, + -0.07749482277960204, + -0.005810793613848673, + 0.06198291759831892, + 0.12293536517635703, + 0.17447999195279823, + 0.21456006847846779, + 0.24172565029557566, + 0.25519727019112654, + 0.254893432701845, + 0.24142096714711753, + 0.21602931256266372, + 0.18053174205108255, + 0.13719827990417027, + 0.08862652853638416, + 0.03759772656874239, + -0.013073952151520388, + -0.060690608986011814, + -0.10281030706494565, + -0.13736985507049018 + ], + [ + -0.15646143337355978, + -0.12803192632998142, + -0.0907256642328181, + -0.046310064114579955, + 0.0029779491154211806, + 0.054541276561040686, + 0.10555493165712146, + 0.15311446345017118, + 0.1943926655354523, + 0.22679610352037188, + 0.24811283911536614, + 0.2566430509401283, + 0.25130504004127213, + 0.2317103248693539, + 0.1982031145119569, + 0.15186131748507978, + 0.09445829662141196, + 0.02838670735216783, + -0.043452159632214875, + -0.1177881852505473, + -0.19114437378651342, + -0.26001264723920775, + -0.3210343185560354, + -0.37117570680030565, + -0.407889497747319, + -0.42925310491460716, + -0.434076417833265, + -0.42197287899622543, + -0.39338972722403176, + -0.3495953826561967, + -0.29262421276448536, + -0.22518118755916025, + -0.15051108239111077, + -0.0722388011028484, + 0.005811034304373925, + 0.07980593576993696, + 0.14609889758077332, + 0.20141317105264114, + 0.24300880867803662, + 0.2688222513075441, + 0.2775716305835139, + 0.2688222513075441, + 0.24300880867803662, + 0.20141317105264114, + 0.14609889758077332, + 0.07980593576993696, + 0.005811034304373925, + -0.0722388011028484, + -0.15051108239111077, + -0.22518118755916025, + -0.29262421276448536, + -0.3495953826561967, + -0.39338972722403176, + -0.42197287899622543, + -0.434076417833265, + -0.42925310491460716, + -0.407889497747319, + -0.37117570680030565, + -0.3210343185560354, + -0.26001264723920775, + -0.19114437378651342, + -0.1177881852505473, + -0.043452159632214875, + 0.02838670735216783, + 0.09445829662141196, + 0.15186131748507978, + 0.1982031145119569, + 0.2317103248693539, + 0.25130504004127213, + 0.2566430509401283, + 0.24811283911536614, + 0.22679610352037188, + 0.1943926655354523, + 0.15311446345017118, + 0.10555493165712146, + 0.054541276561040686, + 0.0029779491154211806, + -0.046310064114579955, + -0.0907256642328181, + -0.12803192632998142 + ], + [ + -0.1499137997580331, + -0.11876378051842666, + -0.07903277128303789, + -0.032657564269347995, + 0.017966041941118966, + 0.07010183827093616, + 0.12081441070397907, + 0.16712567793535366, + 0.2061784643801796, + 0.23539823538075702, + 0.25264402764959015, + 0.2563400102730029, + 0.2455799958764798, + 0.22019854657881394, + 0.18080401871815463, + 0.12877087581897034, + 0.0661907655654817, + -0.004215913110515241, + -0.0792240541655952, + -0.15525760655490364, + -0.22856545626592412, + -0.29541051237375787, + -0.35226222727992795, + -0.39598244357893553, + -0.42399466300627076, + -0.43442757176285574, + -0.42622489689420734, + -0.39921534828629784, + -0.3541384336243295, + -0.29262421276448536, + -0.21712746254366178, + -0.13081912452072303, + -0.03744017720227128, + 0.05887491198907235, + 0.1537963512162099, + 0.24300880867803662, + 0.32242214992953067, + 0.38837235101706136, + 0.4378022692207818, + 0.4684129583840573, + 0.47877771528316526, + 0.4684129583840573, + 0.4378022692207818, + 0.38837235101706136, + 0.32242214992953067, + 0.24300880867803662, + 0.1537963512162099, + 0.05887491198907235, + -0.03744017720227128, + -0.13081912452072303, + -0.21712746254366178, + -0.29262421276448536, + -0.3541384336243295, + -0.39921534828629784, + -0.42622489689420734, + -0.43442757176285574, + -0.42399466300627076, + -0.39598244357893553, + -0.35226222727992795, + -0.29541051237375787, + -0.22856545626592412, + -0.15525760655490364, + -0.0792240541655952, + -0.004215913110515241, + 0.0661907655654817, + 0.12877087581897034, + 0.18080401871815463, + 0.22019854657881394, + 0.2455799958764798, + 0.2563400102730029, + 0.25264402764959015, + 0.23539823538075702, + 0.2061784643801796, + 0.16712567793535366, + 0.12081441070397907, + 0.07010183827093616, + 0.017966041941118966, + -0.032657564269347995, + -0.07903277128303789, + -0.11876378051842666 + ], + [ + -0.14335579129849668, + -0.10978201113265723, + -0.06793803188546253, + -0.019915691575644292, + 0.031745840459068614, + 0.08418731130237875, + 0.13437885433763305, + 0.1792839709402817, + 0.21602931256266372, + 0.2420710146043941, + 0.255348298963932, + 0.25441554164532254, + 0.23854497801642713, + 0.20779364608280457, + 0.1630299764243758, + 0.10591753298818528, + 0.03885568116655977, + -0.03512071345143313, + -0.11247819731414006, + -0.18935183535374994, + -0.2617343483375656, + -0.32567778292945404, + -0.37749737145928347, + -0.41396693622794944, + -0.43249545715781157, + -0.4312752446188071, + -0.4093935036702951, + -0.36690087535799776, + -0.30483270332925, + -0.22518118755916025, + -0.13081912452072303, + -0.025378460035175753, + 0.08691073780520595, + 0.20141317105264114, + 0.3133036361206578, + 0.4177941096414197, + 0.5103612401471838, + 0.5869627944413911, + 0.6442321103834694, + 0.6796406846183429, + 0.69162061945593, + 0.6796406846183429, + 0.6442321103834694, + 0.5869627944413911, + 0.5103612401471838, + 0.4177941096414197, + 0.3133036361206578, + 0.20141317105264114, + 0.08691073780520595, + -0.025378460035175753, + -0.13081912452072303, + -0.22518118755916025, + -0.30483270332925, + -0.36690087535799776, + -0.4093935036702951, + -0.4312752446188071, + -0.43249545715781157, + -0.41396693622794944, + -0.37749737145928347, + -0.32567778292945404, + -0.2617343483375656, + -0.18935183535374994, + -0.11247819731414006, + -0.03512071345143313, + 0.03885568116655977, + 0.10591753298818528, + 0.1630299764243758, + 0.20779364608280457, + 0.23854497801642713, + 0.25441554164532254, + 0.255348298963932, + 0.2420710146043941, + 0.21602931256266372, + 0.1792839709402817, + 0.13437885433763305, + 0.08418731130237875, + 0.031745840459068614, + -0.019915691575644292, + -0.06793803188546253, + -0.10978201113265723 + ], + [ + -0.13698176393514344, + -0.10127808535368477, + -0.05761803324395176, + -0.00823327044894154, + 0.044209509361482956, + 0.09674378883254962, + 0.14626024334832619, + 0.18967745729212915, + 0.2241172482256385, + 0.24707500803079696, + 0.256575492104657, + 0.25130504004127213, + 0.23071227369415243, + 0.19507084218595108, + 0.1454996929947382, + 0.08393854575868848, + 0.013078615468659323, + -0.06374895250625122, + -0.14272214282150672, + -0.21970771693043267, + -0.29046275344788247, + -0.35084804028714445, + -0.3970424421347404, + -0.42574709936268906, + -0.43436863670247905, + -0.421171462695804, + -0.3853906832849483, + -0.32729906443176787, + -0.24822376277499153, + -0.15051108239111077, + -0.03744017720227128, + 0.08691073780520595, + 0.21783961811686398, + 0.35022902170777614, + 0.47877771528316526, + 0.5982441516081277, + 0.7036898157513979, + 0.790710357098502, + 0.8556429685382863, + 0.8957396184216221, + 0.9092974268256817, + 0.8957396184216221, + 0.8556429685382863, + 0.790710357098502, + 0.7036898157513979, + 0.5982441516081277, + 0.47877771528316526, + 0.35022902170777614, + 0.21783961811686398, + 0.08691073780520595, + -0.03744017720227128, + -0.15051108239111077, + -0.24822376277499153, + -0.32729906443176787, + -0.3853906832849483, + -0.421171462695804, + -0.43436863670247905, + -0.42574709936268906, + -0.3970424421347404, + -0.35084804028714445, + -0.29046275344788247, + -0.21970771693043267, + -0.14272214282150672, + -0.06374895250625122, + 0.013078615468659323, + 0.08393854575868848, + 0.1454996929947382, + 0.19507084218595108, + 0.23071227369415243, + 0.25130504004127213, + 0.256575492104657, + 0.24707500803079696, + 0.2241172482256385, + 0.18967745729212915, + 0.14626024334832619, + 0.09674378883254962, + 0.044209509361482956, + -0.00823327044894154, + -0.05761803324395176, + -0.10127808535368477 + ], + [ + -0.13096468174943518, + -0.09341816596346665, + -0.04822085787410071, + 0.0022716100207446164, + 0.05528095770522729, + 0.10774865812501504, + 0.15649972810645998, + 0.19841943861188654, + 0.23063350923189954, + 0.2506818889186662, + 0.2566762997375786, + 0.24743234013685533, + 0.22256808600007377, + 0.18256273925541686, + 0.12877087581897034, + 0.06339013493636744, + -0.010617349295218181, + -0.08964697741323371, + -0.1696119802323752, + -0.246134617818378, + -0.31475910259630246, + -0.37117570680030565, + -0.41144469052055266, + -0.43220845214435083, + -0.4308806796227811, + -0.40580225753498556, + -0.35635521764627226, + -0.28302803533990717, + -0.187427969950852, + -0.0722388011028484, + 0.05887491198907235, + 0.20141317105264114, + 0.35022902170777614, + 0.49975144871271493, + 0.6442321103834694, + 0.7780040258931075, + 0.8957396184216221, + 0.992695449836068, + 1.0649315658049785, + 1.1094945766040856, + 1.124555367855928, + 1.1094945766040856, + 1.0649315658049785, + 0.992695449836068, + 0.8957396184216221, + 0.7780040258931075, + 0.6442321103834694, + 0.49975144871271493, + 0.35022902170777614, + 0.20141317105264114, + 0.05887491198907235, + -0.0722388011028484, + -0.187427969950852, + -0.28302803533990717, + -0.35635521764627226, + -0.40580225753498556, + -0.4308806796227811, + -0.43220845214435083, + -0.41144469052055266, + -0.37117570680030565, + -0.31475910259630246, + -0.246134617818378, + -0.1696119802323752, + -0.08964697741323371, + -0.010617349295218181, + 0.06339013493636744, + 0.12877087581897034, + 0.18256273925541686, + 0.22256808600007377, + 0.24743234013685533, + 0.2566762997375786, + 0.2506818889186662, + 0.23063350923189954, + 0.19841943861188654, + 0.15649972810645998, + 0.10774865812501504, + 0.05528095770522729, + 0.0022716100207446164, + -0.04822085787410071, + -0.09341816596346665 + ], + [ + -0.1254554756233313, + -0.08634370978474622, + -0.039868134180728126, + 0.011507919583092052, + 0.0649104168254659, + 0.11720338291232232, + 0.16515865057394133, + 0.20563779959612533, + 0.23577655069724138, + 0.2531614457800734, + 0.2559887694405144, + 0.2431963471432226, + 0.21456006847846779, + 0.17074867404778504, + 0.11333242903336224, + 0.044743679368913644, + -0.03181017613329085, + -0.11247819731414006, + -0.1929363397545002, + -0.268589046149572, + -0.33479237619194996, + -0.38708768931988075, + -0.42143408131469146, + -0.43442757176285574, + -0.42349546556438716, + -0.38705535500366767, + -0.324629843053556, + -0.23691017597600564, + -0.1257644689695074, + 0.005811034304373925, + 0.1537963512162099, + 0.3133036361206578, + 0.47877771528316526, + 0.6442321103834694, + 0.803509484779075, + 0.9505541014891831, + 1.0796831610910465, + 1.1858438330909473, + 1.2648434125627805, + 1.3135412961886945, + 1.3299933154720727, + 1.3135412961886945, + 1.2648434125627805, + 1.1858438330909473, + 1.0796831610910465, + 0.9505541014891831, + 0.803509484779075, + 0.6442321103834694, + 0.47877771528316526, + 0.3133036361206578, + 0.1537963512162099, + 0.005811034304373925, + -0.1257644689695074, + -0.23691017597600564, + -0.324629843053556, + -0.38705535500366767, + -0.42349546556438716, + -0.43442757176285574, + -0.42143408131469146, + -0.38708768931988075, + -0.33479237619194996, + -0.268589046149572, + -0.1929363397545002, + -0.11247819731414006, + -0.03181017613329085, + 0.044743679368913644, + 0.11333242903336224, + 0.17074867404778504, + 0.21456006847846779, + 0.2431963471432226, + 0.2559887694405144, + 0.2531614457800734, + 0.23577655069724138, + 0.20563779959612533, + 0.16515865057394133, + 0.11720338291232232, + 0.0649104168254659, + 0.011507919583092052, + -0.039868134180728126, + -0.08634370978474622 + ], + [ + -0.12058300781296416, + -0.08017262722723162, + -0.032657564269347995, + 0.019407660252202565, + 0.07306884206017318, + 0.12512633286074154, + 0.17230988766358785, + 0.21146505144444128, + 0.23974108638511749, + 0.25477004091850136, + 0.2548267267047997, + 0.23896010343988033, + 0.2070878465419809, + 0.16004763127913005, + 0.09960082298540655, + 0.02838670735216783, + -0.050171999808914604, + -0.132008995765264, + -0.2125937105436689, + -0.28714197491104243, + -0.35084804028714445, + -0.3991265770886398, + -0.42785247459104203, + -0.4335860886421158, + -0.4137720534188708, + -0.36690087535799776, + -0.29262421276448536, + -0.19181693290541052, + -0.06658162124929747, + 0.07980593576993696, + 0.24300880867803662, + 0.4177941096414197, + 0.5982441516081277, + 0.7780040258931075, + 0.9505541014891831, + 1.1094945766040856, + 1.2488284837498442, + 1.3632295064019535, + 1.4482816142111579, + 1.500678835049543, + 1.518375390968938, + 1.500678835049543, + 1.4482816142111579, + 1.3632295064019535, + 1.2488284837498442, + 1.1094945766040856, + 0.9505541014891831, + 0.7780040258931075, + 0.5982441516081277, + 0.4177941096414197, + 0.24300880867803662, + 0.07980593576993696, + -0.06658162124929747, + -0.19181693290541052, + -0.29262421276448536, + -0.36690087535799776, + -0.4137720534188708, + -0.4335860886421158, + -0.42785247459104203, + -0.3991265770886398, + -0.35084804028714445, + -0.28714197491104243, + -0.2125937105436689, + -0.132008995765264, + -0.050171999808914604, + 0.02838670735216783, + 0.09960082298540655, + 0.16004763127913005, + 0.2070878465419809, + 0.23896010343988033, + 0.2548267267047997, + 0.25477004091850136, + 0.23974108638511749, + 0.21146505144444128, + 0.17230988766358785, + 0.12512633286074154, + 0.07306884206017318, + 0.019407660252202565, + -0.032657564269347995, + -0.08017262722723162 + ], + [ + -0.1164544699167505, + -0.0750007897964791, + -0.026665677985416577, + 0.025921773001301992, + 0.07974244535617742, + 0.13154597877649798, + 0.17802983029511174, + 0.21602931256266372, + 0.242708395806646, + 0.2557406839380664, + 0.25347017586536014, + 0.23504220166614895, + 0.20049625055173417, + 0.15081422331281308, + 0.08791985781076668, + 0.014627580006334946, + -0.06545830501430487, + -0.14809048863531396, + -0.22856545626592412, + -0.30194177876754097, + -0.3632795822101567, + -0.407889497747319, + -0.43157859884674826, + -0.4308806796227811, + -0.40325873487122593, + -0.3472686537517362, + -0.2626748843273063, + -0.15051108239111077, + -0.0130814139378774, + 0.14609889758077332, + 0.32242214992953067, + 0.5103612401471838, + 0.7036898157513979, + 0.8957396184216221, + 1.0796831610910465, + 1.2488284837498442, + 1.3969119972732167, + 1.518375390968938, + 1.608613254431116, + 1.6641794167481594, + 1.682941969615793, + 1.6641794167481594, + 1.608613254431116, + 1.518375390968938, + 1.3969119972732167, + 1.2488284837498442, + 1.0796831610910465, + 0.8957396184216221, + 0.7036898157513979, + 0.5103612401471838, + 0.32242214992953067, + 0.14609889758077332, + -0.0130814139378774, + -0.15051108239111077, + -0.2626748843273063, + -0.3472686537517362, + -0.40325873487122593, + -0.4308806796227811, + -0.43157859884674826, + -0.407889497747319, + -0.3632795822101567, + -0.30194177876754097, + -0.22856545626592412, + -0.14809048863531396, + -0.06545830501430487, + 0.014627580006334946, + 0.08791985781076668, + 0.15081422331281308, + 0.20049625055173417, + 0.23504220166614895, + 0.25347017586536014, + 0.2557406839380664, + 0.242708395806646, + 0.21602931256266372, + 0.17802983029511174, + 0.13154597877649798, + 0.07974244535617742, + 0.025921773001301992, + -0.026665677985416577, + -0.0750007897964791 + ], + [ + -0.1131560467581887, + -0.07090368426500879, + -0.021950582012676394, + 0.031016232090896562, + 0.08492762656935865, + 0.13649472168344115, + 0.18239124981424537, + 0.21944644111666822, + 0.24483804991090943, + 0.2562747828163765, + 0.252157618714697, + 0.2317103248693539, + 0.19507084218595108, + 0.1433370736825879, + 0.07856287339249271, + 0.0037025838949493145, + -0.07749482277960204, + -0.16063822727306362, + -0.24088710992360066, + -0.31317589634427284, + -0.37245933283868765, + -0.41396693622794944, + -0.4334537754581445, + -0.4274347075936389, + -0.39338972722403176, + -0.32992927901128904, + -0.23691017597600564, + -0.11549507625799743, + 0.03184881503912622, + 0.20141317105264114, + 0.38837235101706136, + 0.5869627944413911, + 0.790710357098502, + 0.992695449836068, + 1.1858438330909473, + 1.3632295064019535, + 1.518375390968938, + 1.6455374774968983, + 1.7399588071171015, + 1.7980810383563555, + 1.8177033600622243, + 1.7980810383563555, + 1.7399588071171015, + 1.6455374774968983, + 1.518375390968938, + 1.3632295064019535, + 1.1858438330909473, + 0.992695449836068, + 0.790710357098502, + 0.5869627944413911, + 0.38837235101706136, + 0.20141317105264114, + 0.03184881503912622, + -0.11549507625799743, + -0.23691017597600564, + -0.32992927901128904, + -0.39338972722403176, + -0.4274347075936389, + -0.4334537754581445, + -0.41396693622794944, + -0.37245933283868765, + -0.31317589634427284, + -0.24088710992360066, + -0.16063822727306362, + -0.07749482277960204, + 0.0037025838949493145, + 0.07856287339249271, + 0.1433370736825879, + 0.19507084218595108, + 0.2317103248693539, + 0.252157618714697, + 0.2562747828163765, + 0.24483804991090943, + 0.21944644111666822, + 0.18239124981424537, + 0.13649472168344115, + 0.08492762656935865, + 0.031016232090896562, + -0.021950582012676394, + -0.07090368426500879 + ], + [ + -0.1107536917561867, + -0.06793803188546253, + -0.01855449981019833, + 0.03466854669458865, + 0.08862652853638416, + 0.14000357308347133, + 0.18545724476618586, + 0.22181346801290225, + 0.24626113579560338, + 0.25653555744366946, + 0.25108014921898075, + 0.22917661128094333, + 0.19103523332295086, + 0.13783886506830845, + 0.07173638515428266, + -0.004215913110515241, + -0.08616386191642225, + -0.1696119802323752, + -0.24962054293732017, + -0.3210343185560354, + -0.3787322233669178, + -0.417885750201407, + -0.434213248547002, + -0.42421701152445723, + -0.3853906832849483, + -0.3163857196862348, + -0.21712746254366178, + -0.08887373699192957, + 0.0657883626364726, + 0.24300880867803662, + 0.4378022692207818, + 0.6442321103834694, + 0.8556429685382863, + 1.0649315658049785, + 1.2648434125627805, + 1.4482816142111579, + 1.608613254431116, + 1.7399588071171015, + 1.8374507397311368, + 1.8974488797623419, + 1.917702154416812, + 1.8974488797623419, + 1.8374507397311368, + 1.7399588071171015, + 1.608613254431116, + 1.4482816142111579, + 1.2648434125627805, + 1.0649315658049785, + 0.8556429685382863, + 0.6442321103834694, + 0.4378022692207818, + 0.24300880867803662, + 0.0657883626364726, + -0.08887373699192957, + -0.21712746254366178, + -0.3163857196862348, + -0.3853906832849483, + -0.42421701152445723, + -0.434213248547002, + -0.417885750201407, + -0.3787322233669178, + -0.3210343185560354, + -0.24962054293732017, + -0.1696119802323752, + -0.08616386191642225, + -0.004215913110515241, + 0.07173638515428266, + 0.13783886506830845, + 0.19103523332295086, + 0.22917661128094333, + 0.25108014921898075, + 0.25653555744366946, + 0.24626113579560338, + 0.22181346801290225, + 0.18545724476618586, + 0.14000357308347133, + 0.08862652853638416, + 0.03466854669458865, + -0.01855449981019833, + -0.06793803188546253 + ], + [ + -0.10929387900894774, + -0.06614321685638791, + -0.016505930263581485, + 0.03686485131708162, + 0.09084339726921295, + 0.14209785531573388, + 0.18727640924644018, + 0.2232034254780841, + 0.24707500803079696, + 0.2566430509401283, + 0.25037713957121355, + 0.22759450814784551, + 0.18854967763954522, + 0.134477311926808, + 0.06758414818694233, + -0.009011537058698997, + -0.09139170665445415, + -0.17499760171649797, + -0.254829433326894, + -0.32567778292945404, + -0.382375848005458, + -0.4200602785751461, + -0.43442757176285574, + -0.42197287899622543, + -0.3801986514917913, + -0.3077817863653888, + -0.20468978410715197, + -0.0722388011028484, + 0.08691073780520595, + 0.2688222513075441, + 0.4684129583840573, + 0.6796406846183429, + 0.8957396184216221, + 1.1094945766040856, + 1.3135412961886945, + 1.500678835049543, + 1.6641794167481594, + 1.7980810383563555, + 1.8974488797623419, + 1.9585929762944412, + 1.9792316740361835, + 1.9585929762944412, + 1.8974488797623419, + 1.7980810383563555, + 1.6641794167481594, + 1.500678835049543, + 1.3135412961886945, + 1.1094945766040856, + 0.8957396184216221, + 0.6796406846183429, + 0.4684129583840573, + 0.2688222513075441, + 0.08691073780520595, + -0.0722388011028484, + -0.20468978410715197, + -0.3077817863653888, + -0.3801986514917913, + -0.42197287899622543, + -0.43442757176285574, + -0.4200602785751461, + -0.382375848005458, + -0.32567778292945404, + -0.254829433326894, + -0.17499760171649797, + -0.09139170665445415, + -0.009011537058698997, + 0.06758414818694233, + 0.134477311926808, + 0.18854967763954522, + 0.22759450814784551, + 0.25037713957121355, + 0.2566430509401283, + 0.24707500803079696, + 0.2232034254780841, + 0.18727640924644018, + 0.14209785531573388, + 0.09084339726921295, + 0.03686485131708162, + -0.016505930263581485, + -0.06614321685638791 + ], + [ + -0.10880422217787396, + -0.06554239869174844, + -0.015821288518275644, + 0.03759772656874239, + 0.09158188560927924, + 0.14279404657238684, + 0.18787932061729182, + 0.22366162672468853, + 0.24733956165584545, + 0.2566706526738519, + 0.25013332713993036, + 0.2270567942100705, + 0.18771045677679687, + 0.1333463922312941, + 0.0661907655654817, + -0.010617349295218181, + -0.09313849939964196, + -0.1767927226084377, + -0.2565601183892334, + -0.32721314035298743, + -0.3835697098652554, + -0.4207548585159486, + -0.43445783007337646, + -0.421171462695804, + -0.3784012476539641, + -0.30483270332925, + -0.20044755867978276, + -0.06658162124929747, + 0.0940800053732448, + 0.2775716305835139, + 0.47877771528316526, + 0.69162061945593, + 0.9092974268256817, + 1.124555367855928, + 1.3299933154720727, + 1.518375390968938, + 1.682941969615793, + 1.8177033600622243, + 1.917702154416812, + 1.9792316740361835, + null, + 1.9792316740361835, + 1.917702154416812, + 1.8177033600622243, + 1.682941969615793, + 1.518375390968938, + 1.3299933154720727, + 1.124555367855928, + 0.9092974268256817, + 0.69162061945593, + 0.47877771528316526, + 0.2775716305835139, + 0.0940800053732448, + -0.06658162124929747, + -0.20044755867978276, + -0.30483270332925, + -0.3784012476539641, + -0.421171462695804, + -0.43445783007337646, + -0.4207548585159486, + -0.3835697098652554, + -0.32721314035298743, + -0.2565601183892334, + -0.1767927226084377, + -0.09313849939964196, + -0.010617349295218181, + 0.0661907655654817, + 0.1333463922312941, + 0.18771045677679687, + 0.2270567942100705, + 0.25013332713993036, + 0.2566706526738519, + 0.24733956165584545, + 0.22366162672468853, + 0.18787932061729182, + 0.14279404657238684, + 0.09158188560927924, + 0.03759772656874239, + -0.015821288518275644, + -0.06554239869174844 + ], + [ + -0.10929387900894774, + -0.06614321685638791, + -0.016505930263581485, + 0.03686485131708162, + 0.09084339726921295, + 0.14209785531573388, + 0.18727640924644018, + 0.2232034254780841, + 0.24707500803079696, + 0.2566430509401283, + 0.25037713957121355, + 0.22759450814784551, + 0.18854967763954522, + 0.134477311926808, + 0.06758414818694233, + -0.009011537058698997, + -0.09139170665445415, + -0.17499760171649797, + -0.254829433326894, + -0.32567778292945404, + -0.382375848005458, + -0.4200602785751461, + -0.43442757176285574, + -0.42197287899622543, + -0.3801986514917913, + -0.3077817863653888, + -0.20468978410715197, + -0.0722388011028484, + 0.08691073780520595, + 0.2688222513075441, + 0.4684129583840573, + 0.6796406846183429, + 0.8957396184216221, + 1.1094945766040856, + 1.3135412961886945, + 1.500678835049543, + 1.6641794167481594, + 1.7980810383563555, + 1.8974488797623419, + 1.9585929762944412, + 1.9792316740361835, + 1.9585929762944412, + 1.8974488797623419, + 1.7980810383563555, + 1.6641794167481594, + 1.500678835049543, + 1.3135412961886945, + 1.1094945766040856, + 0.8957396184216221, + 0.6796406846183429, + 0.4684129583840573, + 0.2688222513075441, + 0.08691073780520595, + -0.0722388011028484, + -0.20468978410715197, + -0.3077817863653888, + -0.3801986514917913, + -0.42197287899622543, + -0.43442757176285574, + -0.4200602785751461, + -0.382375848005458, + -0.32567778292945404, + -0.254829433326894, + -0.17499760171649797, + -0.09139170665445415, + -0.009011537058698997, + 0.06758414818694233, + 0.134477311926808, + 0.18854967763954522, + 0.22759450814784551, + 0.25037713957121355, + 0.2566430509401283, + 0.24707500803079696, + 0.2232034254780841, + 0.18727640924644018, + 0.14209785531573388, + 0.09084339726921295, + 0.03686485131708162, + -0.016505930263581485, + -0.06614321685638791 + ], + [ + -0.1107536917561867, + -0.06793803188546253, + -0.01855449981019833, + 0.03466854669458865, + 0.08862652853638416, + 0.14000357308347133, + 0.18545724476618586, + 0.22181346801290225, + 0.24626113579560338, + 0.25653555744366946, + 0.25108014921898075, + 0.22917661128094333, + 0.19103523332295086, + 0.13783886506830845, + 0.07173638515428266, + -0.004215913110515241, + -0.08616386191642225, + -0.1696119802323752, + -0.24962054293732017, + -0.3210343185560354, + -0.3787322233669178, + -0.417885750201407, + -0.434213248547002, + -0.42421701152445723, + -0.3853906832849483, + -0.3163857196862348, + -0.21712746254366178, + -0.08887373699192957, + 0.0657883626364726, + 0.24300880867803662, + 0.4378022692207818, + 0.6442321103834694, + 0.8556429685382863, + 1.0649315658049785, + 1.2648434125627805, + 1.4482816142111579, + 1.608613254431116, + 1.7399588071171015, + 1.8374507397311368, + 1.8974488797623419, + 1.917702154416812, + 1.8974488797623419, + 1.8374507397311368, + 1.7399588071171015, + 1.608613254431116, + 1.4482816142111579, + 1.2648434125627805, + 1.0649315658049785, + 0.8556429685382863, + 0.6442321103834694, + 0.4378022692207818, + 0.24300880867803662, + 0.0657883626364726, + -0.08887373699192957, + -0.21712746254366178, + -0.3163857196862348, + -0.3853906832849483, + -0.42421701152445723, + -0.434213248547002, + -0.417885750201407, + -0.3787322233669178, + -0.3210343185560354, + -0.24962054293732017, + -0.1696119802323752, + -0.08616386191642225, + -0.004215913110515241, + 0.07173638515428266, + 0.13783886506830845, + 0.19103523332295086, + 0.22917661128094333, + 0.25108014921898075, + 0.25653555744366946, + 0.24626113579560338, + 0.22181346801290225, + 0.18545724476618586, + 0.14000357308347133, + 0.08862652853638416, + 0.03466854669458865, + -0.01855449981019833, + -0.06793803188546253 + ], + [ + -0.1131560467581887, + -0.07090368426500879, + -0.021950582012676394, + 0.031016232090896562, + 0.08492762656935865, + 0.13649472168344115, + 0.18239124981424537, + 0.21944644111666822, + 0.24483804991090943, + 0.2562747828163765, + 0.252157618714697, + 0.2317103248693539, + 0.19507084218595108, + 0.1433370736825879, + 0.07856287339249271, + 0.0037025838949493145, + -0.07749482277960204, + -0.16063822727306362, + -0.24088710992360066, + -0.31317589634427284, + -0.37245933283868765, + -0.41396693622794944, + -0.4334537754581445, + -0.4274347075936389, + -0.39338972722403176, + -0.32992927901128904, + -0.23691017597600564, + -0.11549507625799743, + 0.03184881503912622, + 0.20141317105264114, + 0.38837235101706136, + 0.5869627944413911, + 0.790710357098502, + 0.992695449836068, + 1.1858438330909473, + 1.3632295064019535, + 1.518375390968938, + 1.6455374774968983, + 1.7399588071171015, + 1.7980810383563555, + 1.8177033600622243, + 1.7980810383563555, + 1.7399588071171015, + 1.6455374774968983, + 1.518375390968938, + 1.3632295064019535, + 1.1858438330909473, + 0.992695449836068, + 0.790710357098502, + 0.5869627944413911, + 0.38837235101706136, + 0.20141317105264114, + 0.03184881503912622, + -0.11549507625799743, + -0.23691017597600564, + -0.32992927901128904, + -0.39338972722403176, + -0.4274347075936389, + -0.4334537754581445, + -0.41396693622794944, + -0.37245933283868765, + -0.31317589634427284, + -0.24088710992360066, + -0.16063822727306362, + -0.07749482277960204, + 0.0037025838949493145, + 0.07856287339249271, + 0.1433370736825879, + 0.19507084218595108, + 0.2317103248693539, + 0.252157618714697, + 0.2562747828163765, + 0.24483804991090943, + 0.21944644111666822, + 0.18239124981424537, + 0.13649472168344115, + 0.08492762656935865, + 0.031016232090896562, + -0.021950582012676394, + -0.07090368426500879 + ], + [ + -0.1164544699167505, + -0.0750007897964791, + -0.026665677985416577, + 0.025921773001301992, + 0.07974244535617742, + 0.13154597877649798, + 0.17802983029511174, + 0.21602931256266372, + 0.242708395806646, + 0.2557406839380664, + 0.25347017586536014, + 0.23504220166614895, + 0.20049625055173417, + 0.15081422331281308, + 0.08791985781076668, + 0.014627580006334946, + -0.06545830501430487, + -0.14809048863531396, + -0.22856545626592412, + -0.30194177876754097, + -0.3632795822101567, + -0.407889497747319, + -0.43157859884674826, + -0.4308806796227811, + -0.40325873487122593, + -0.3472686537517362, + -0.2626748843273063, + -0.15051108239111077, + -0.0130814139378774, + 0.14609889758077332, + 0.32242214992953067, + 0.5103612401471838, + 0.7036898157513979, + 0.8957396184216221, + 1.0796831610910465, + 1.2488284837498442, + 1.3969119972732167, + 1.518375390968938, + 1.608613254431116, + 1.6641794167481594, + 1.682941969615793, + 1.6641794167481594, + 1.608613254431116, + 1.518375390968938, + 1.3969119972732167, + 1.2488284837498442, + 1.0796831610910465, + 0.8957396184216221, + 0.7036898157513979, + 0.5103612401471838, + 0.32242214992953067, + 0.14609889758077332, + -0.0130814139378774, + -0.15051108239111077, + -0.2626748843273063, + -0.3472686537517362, + -0.40325873487122593, + -0.4308806796227811, + -0.43157859884674826, + -0.407889497747319, + -0.3632795822101567, + -0.30194177876754097, + -0.22856545626592412, + -0.14809048863531396, + -0.06545830501430487, + 0.014627580006334946, + 0.08791985781076668, + 0.15081422331281308, + 0.20049625055173417, + 0.23504220166614895, + 0.25347017586536014, + 0.2557406839380664, + 0.242708395806646, + 0.21602931256266372, + 0.17802983029511174, + 0.13154597877649798, + 0.07974244535617742, + 0.025921773001301992, + -0.026665677985416577, + -0.0750007897964791 + ], + [ + -0.12058300781296416, + -0.08017262722723162, + -0.032657564269347995, + 0.019407660252202565, + 0.07306884206017318, + 0.12512633286074154, + 0.17230988766358785, + 0.21146505144444128, + 0.23974108638511749, + 0.25477004091850136, + 0.2548267267047997, + 0.23896010343988033, + 0.2070878465419809, + 0.16004763127913005, + 0.09960082298540655, + 0.02838670735216783, + -0.050171999808914604, + -0.132008995765264, + -0.2125937105436689, + -0.28714197491104243, + -0.35084804028714445, + -0.3991265770886398, + -0.42785247459104203, + -0.4335860886421158, + -0.4137720534188708, + -0.36690087535799776, + -0.29262421276448536, + -0.19181693290541052, + -0.06658162124929747, + 0.07980593576993696, + 0.24300880867803662, + 0.4177941096414197, + 0.5982441516081277, + 0.7780040258931075, + 0.9505541014891831, + 1.1094945766040856, + 1.2488284837498442, + 1.3632295064019535, + 1.4482816142111579, + 1.500678835049543, + 1.518375390968938, + 1.500678835049543, + 1.4482816142111579, + 1.3632295064019535, + 1.2488284837498442, + 1.1094945766040856, + 0.9505541014891831, + 0.7780040258931075, + 0.5982441516081277, + 0.4177941096414197, + 0.24300880867803662, + 0.07980593576993696, + -0.06658162124929747, + -0.19181693290541052, + -0.29262421276448536, + -0.36690087535799776, + -0.4137720534188708, + -0.4335860886421158, + -0.42785247459104203, + -0.3991265770886398, + -0.35084804028714445, + -0.28714197491104243, + -0.2125937105436689, + -0.132008995765264, + -0.050171999808914604, + 0.02838670735216783, + 0.09960082298540655, + 0.16004763127913005, + 0.2070878465419809, + 0.23896010343988033, + 0.2548267267047997, + 0.25477004091850136, + 0.23974108638511749, + 0.21146505144444128, + 0.17230988766358785, + 0.12512633286074154, + 0.07306884206017318, + 0.019407660252202565, + -0.032657564269347995, + -0.08017262722723162 + ], + [ + -0.1254554756233313, + -0.08634370978474622, + -0.039868134180728126, + 0.011507919583092052, + 0.0649104168254659, + 0.11720338291232232, + 0.16515865057394133, + 0.20563779959612533, + 0.23577655069724138, + 0.2531614457800734, + 0.2559887694405144, + 0.2431963471432226, + 0.21456006847846779, + 0.17074867404778504, + 0.11333242903336224, + 0.044743679368913644, + -0.03181017613329085, + -0.11247819731414006, + -0.1929363397545002, + -0.268589046149572, + -0.33479237619194996, + -0.38708768931988075, + -0.42143408131469146, + -0.43442757176285574, + -0.42349546556438716, + -0.38705535500366767, + -0.324629843053556, + -0.23691017597600564, + -0.1257644689695074, + 0.005811034304373925, + 0.1537963512162099, + 0.3133036361206578, + 0.47877771528316526, + 0.6442321103834694, + 0.803509484779075, + 0.9505541014891831, + 1.0796831610910465, + 1.1858438330909473, + 1.2648434125627805, + 1.3135412961886945, + 1.3299933154720727, + 1.3135412961886945, + 1.2648434125627805, + 1.1858438330909473, + 1.0796831610910465, + 0.9505541014891831, + 0.803509484779075, + 0.6442321103834694, + 0.47877771528316526, + 0.3133036361206578, + 0.1537963512162099, + 0.005811034304373925, + -0.1257644689695074, + -0.23691017597600564, + -0.324629843053556, + -0.38705535500366767, + -0.42349546556438716, + -0.43442757176285574, + -0.42143408131469146, + -0.38708768931988075, + -0.33479237619194996, + -0.268589046149572, + -0.1929363397545002, + -0.11247819731414006, + -0.03181017613329085, + 0.044743679368913644, + 0.11333242903336224, + 0.17074867404778504, + 0.21456006847846779, + 0.2431963471432226, + 0.2559887694405144, + 0.2531614457800734, + 0.23577655069724138, + 0.20563779959612533, + 0.16515865057394133, + 0.11720338291232232, + 0.0649104168254659, + 0.011507919583092052, + -0.039868134180728126, + -0.08634370978474622 + ], + [ + -0.13096468174943518, + -0.09341816596346665, + -0.04822085787410071, + 0.0022716100207446164, + 0.05528095770522729, + 0.10774865812501504, + 0.15649972810645998, + 0.19841943861188654, + 0.23063350923189954, + 0.2506818889186662, + 0.2566762997375786, + 0.24743234013685533, + 0.22256808600007377, + 0.18256273925541686, + 0.12877087581897034, + 0.06339013493636744, + -0.010617349295218181, + -0.08964697741323371, + -0.1696119802323752, + -0.246134617818378, + -0.31475910259630246, + -0.37117570680030565, + -0.41144469052055266, + -0.43220845214435083, + -0.4308806796227811, + -0.40580225753498556, + -0.35635521764627226, + -0.28302803533990717, + -0.187427969950852, + -0.0722388011028484, + 0.05887491198907235, + 0.20141317105264114, + 0.35022902170777614, + 0.49975144871271493, + 0.6442321103834694, + 0.7780040258931075, + 0.8957396184216221, + 0.992695449836068, + 1.0649315658049785, + 1.1094945766040856, + 1.124555367855928, + 1.1094945766040856, + 1.0649315658049785, + 0.992695449836068, + 0.8957396184216221, + 0.7780040258931075, + 0.6442321103834694, + 0.49975144871271493, + 0.35022902170777614, + 0.20141317105264114, + 0.05887491198907235, + -0.0722388011028484, + -0.187427969950852, + -0.28302803533990717, + -0.35635521764627226, + -0.40580225753498556, + -0.4308806796227811, + -0.43220845214435083, + -0.41144469052055266, + -0.37117570680030565, + -0.31475910259630246, + -0.246134617818378, + -0.1696119802323752, + -0.08964697741323371, + -0.010617349295218181, + 0.06339013493636744, + 0.12877087581897034, + 0.18256273925541686, + 0.22256808600007377, + 0.24743234013685533, + 0.2566762997375786, + 0.2506818889186662, + 0.23063350923189954, + 0.19841943861188654, + 0.15649972810645998, + 0.10774865812501504, + 0.05528095770522729, + 0.0022716100207446164, + -0.04822085787410071, + -0.09341816596346665 + ], + [ + -0.13698176393514344, + -0.10127808535368477, + -0.05761803324395176, + -0.00823327044894154, + 0.044209509361482956, + 0.09674378883254962, + 0.14626024334832619, + 0.18967745729212915, + 0.2241172482256385, + 0.24707500803079696, + 0.256575492104657, + 0.25130504004127213, + 0.23071227369415243, + 0.19507084218595108, + 0.1454996929947382, + 0.08393854575868848, + 0.013078615468659323, + -0.06374895250625122, + -0.14272214282150672, + -0.21970771693043267, + -0.29046275344788247, + -0.35084804028714445, + -0.3970424421347404, + -0.42574709936268906, + -0.43436863670247905, + -0.421171462695804, + -0.3853906832849483, + -0.32729906443176787, + -0.24822376277499153, + -0.15051108239111077, + -0.03744017720227128, + 0.08691073780520595, + 0.21783961811686398, + 0.35022902170777614, + 0.47877771528316526, + 0.5982441516081277, + 0.7036898157513979, + 0.790710357098502, + 0.8556429685382863, + 0.8957396184216221, + 0.9092974268256817, + 0.8957396184216221, + 0.8556429685382863, + 0.790710357098502, + 0.7036898157513979, + 0.5982441516081277, + 0.47877771528316526, + 0.35022902170777614, + 0.21783961811686398, + 0.08691073780520595, + -0.03744017720227128, + -0.15051108239111077, + -0.24822376277499153, + -0.32729906443176787, + -0.3853906832849483, + -0.421171462695804, + -0.43436863670247905, + -0.42574709936268906, + -0.3970424421347404, + -0.35084804028714445, + -0.29046275344788247, + -0.21970771693043267, + -0.14272214282150672, + -0.06374895250625122, + 0.013078615468659323, + 0.08393854575868848, + 0.1454996929947382, + 0.19507084218595108, + 0.23071227369415243, + 0.25130504004127213, + 0.256575492104657, + 0.24707500803079696, + 0.2241172482256385, + 0.18967745729212915, + 0.14626024334832619, + 0.09674378883254962, + 0.044209509361482956, + -0.00823327044894154, + -0.05761803324395176, + -0.10127808535368477 + ], + [ + -0.14335579129849668, + -0.10978201113265723, + -0.06793803188546253, + -0.019915691575644292, + 0.031745840459068614, + 0.08418731130237875, + 0.13437885433763305, + 0.1792839709402817, + 0.21602931256266372, + 0.2420710146043941, + 0.255348298963932, + 0.25441554164532254, + 0.23854497801642713, + 0.20779364608280457, + 0.1630299764243758, + 0.10591753298818528, + 0.03885568116655977, + -0.03512071345143313, + -0.11247819731414006, + -0.18935183535374994, + -0.2617343483375656, + -0.32567778292945404, + -0.37749737145928347, + -0.41396693622794944, + -0.43249545715781157, + -0.4312752446188071, + -0.4093935036702951, + -0.36690087535799776, + -0.30483270332925, + -0.22518118755916025, + -0.13081912452072303, + -0.025378460035175753, + 0.08691073780520595, + 0.20141317105264114, + 0.3133036361206578, + 0.4177941096414197, + 0.5103612401471838, + 0.5869627944413911, + 0.6442321103834694, + 0.6796406846183429, + 0.69162061945593, + 0.6796406846183429, + 0.6442321103834694, + 0.5869627944413911, + 0.5103612401471838, + 0.4177941096414197, + 0.3133036361206578, + 0.20141317105264114, + 0.08691073780520595, + -0.025378460035175753, + -0.13081912452072303, + -0.22518118755916025, + -0.30483270332925, + -0.36690087535799776, + -0.4093935036702951, + -0.4312752446188071, + -0.43249545715781157, + -0.41396693622794944, + -0.37749737145928347, + -0.32567778292945404, + -0.2617343483375656, + -0.18935183535374994, + -0.11247819731414006, + -0.03512071345143313, + 0.03885568116655977, + 0.10591753298818528, + 0.1630299764243758, + 0.20779364608280457, + 0.23854497801642713, + 0.25441554164532254, + 0.255348298963932, + 0.2420710146043941, + 0.21602931256266372, + 0.1792839709402817, + 0.13437885433763305, + 0.08418731130237875, + 0.031745840459068614, + -0.019915691575644292, + -0.06793803188546253, + -0.10978201113265723 + ], + [ + -0.1499137997580331, + -0.11876378051842666, + -0.07903277128303789, + -0.032657564269347995, + 0.017966041941118966, + 0.07010183827093616, + 0.12081441070397907, + 0.16712567793535366, + 0.2061784643801796, + 0.23539823538075702, + 0.25264402764959015, + 0.2563400102730029, + 0.2455799958764798, + 0.22019854657881394, + 0.18080401871815463, + 0.12877087581897034, + 0.0661907655654817, + -0.004215913110515241, + -0.0792240541655952, + -0.15525760655490364, + -0.22856545626592412, + -0.29541051237375787, + -0.35226222727992795, + -0.39598244357893553, + -0.42399466300627076, + -0.43442757176285574, + -0.42622489689420734, + -0.39921534828629784, + -0.3541384336243295, + -0.29262421276448536, + -0.21712746254366178, + -0.13081912452072303, + -0.03744017720227128, + 0.05887491198907235, + 0.1537963512162099, + 0.24300880867803662, + 0.32242214992953067, + 0.38837235101706136, + 0.4378022692207818, + 0.4684129583840573, + 0.47877771528316526, + 0.4684129583840573, + 0.4378022692207818, + 0.38837235101706136, + 0.32242214992953067, + 0.24300880867803662, + 0.1537963512162099, + 0.05887491198907235, + -0.03744017720227128, + -0.13081912452072303, + -0.21712746254366178, + -0.29262421276448536, + -0.3541384336243295, + -0.39921534828629784, + -0.42622489689420734, + -0.43442757176285574, + -0.42399466300627076, + -0.39598244357893553, + -0.35226222727992795, + -0.29541051237375787, + -0.22856545626592412, + -0.15525760655490364, + -0.0792240541655952, + -0.004215913110515241, + 0.0661907655654817, + 0.12877087581897034, + 0.18080401871815463, + 0.22019854657881394, + 0.2455799958764798, + 0.2563400102730029, + 0.25264402764959015, + 0.23539823538075702, + 0.2061784643801796, + 0.16712567793535366, + 0.12081441070397907, + 0.07010183827093616, + 0.017966041941118966, + -0.032657564269347995, + -0.07903277128303789, + -0.11876378051842666 + ], + [ + -0.15646143337355978, + -0.12803192632998142, + -0.0907256642328181, + -0.046310064114579955, + 0.0029779491154211806, + 0.054541276561040686, + 0.10555493165712146, + 0.15311446345017118, + 0.1943926655354523, + 0.22679610352037188, + 0.24811283911536614, + 0.2566430509401283, + 0.25130504004127213, + 0.2317103248693539, + 0.1982031145119569, + 0.15186131748507978, + 0.09445829662141196, + 0.02838670735216783, + -0.043452159632214875, + -0.1177881852505473, + -0.19114437378651342, + -0.26001264723920775, + -0.3210343185560354, + -0.37117570680030565, + -0.407889497747319, + -0.42925310491460716, + -0.434076417833265, + -0.42197287899622543, + -0.39338972722403176, + -0.3495953826561967, + -0.29262421276448536, + -0.22518118755916025, + -0.15051108239111077, + -0.0722388011028484, + 0.005811034304373925, + 0.07980593576993696, + 0.14609889758077332, + 0.20141317105264114, + 0.24300880867803662, + 0.2688222513075441, + 0.2775716305835139, + 0.2688222513075441, + 0.24300880867803662, + 0.20141317105264114, + 0.14609889758077332, + 0.07980593576993696, + 0.005811034304373925, + -0.0722388011028484, + -0.15051108239111077, + -0.22518118755916025, + -0.29262421276448536, + -0.3495953826561967, + -0.39338972722403176, + -0.42197287899622543, + -0.434076417833265, + -0.42925310491460716, + -0.407889497747319, + -0.37117570680030565, + -0.3210343185560354, + -0.26001264723920775, + -0.19114437378651342, + -0.1177881852505473, + -0.043452159632214875, + 0.02838670735216783, + 0.09445829662141196, + 0.15186131748507978, + 0.1982031145119569, + 0.2317103248693539, + 0.25130504004127213, + 0.2566430509401283, + 0.24811283911536614, + 0.22679610352037188, + 0.1943926655354523, + 0.15311446345017118, + 0.10555493165712146, + 0.054541276561040686, + 0.0029779491154211806, + -0.046310064114579955, + -0.0907256642328181, + -0.12803192632998142 + ], + [ + -0.16278435980926842, + -0.13736985507049018, + -0.10281030706494565, + -0.060690608986011814, + -0.013073952151520388, + 0.03759772656874239, + 0.08862652853638416, + 0.13719827990417027, + 0.18053174205108255, + 0.21602931256266372, + 0.24142096714711753, + 0.254893432701845, + 0.25519727019112654, + 0.24172565029557566, + 0.21456006847846779, + 0.17447999195279823, + 0.12293536517635703, + 0.06198291759831892, + -0.005810793613848673, + -0.07749482277960204, + -0.14988136590815446, + -0.21970771693043267, + -0.2838041182964338, + -0.3392585664190622, + -0.3835697098652554, + -0.4147795406040892, + -0.43157859884674826, + -0.4333778373354074, + -0.4203430458705095, + -0.39338972722403176, + -0.3541384336243295, + -0.30483270332925, + -0.24822376277499153, + -0.187427969950852, + -0.1257644689695074, + -0.06658162124929747, + -0.0130814139378774, + 0.03184881503912622, + 0.0657883626364726, + 0.08691073780520595, + 0.0940800053732448, + 0.08691073780520595, + 0.0657883626364726, + 0.03184881503912622, + -0.0130814139378774, + -0.06658162124929747, + -0.1257644689695074, + -0.187427969950852, + -0.24822376277499153, + -0.30483270332925, + -0.3541384336243295, + -0.39338972722403176, + -0.4203430458705095, + -0.4333778373354074, + -0.43157859884674826, + -0.4147795406040892, + -0.3835697098652554, + -0.3392585664190622, + -0.2838041182964338, + -0.21970771693043267, + -0.14988136590815446, + -0.07749482277960204, + -0.005810793613848673, + 0.06198291759831892, + 0.12293536517635703, + 0.17447999195279823, + 0.21456006847846779, + 0.24172565029557566, + 0.25519727019112654, + 0.254893432701845, + 0.24142096714711753, + 0.21602931256266372, + 0.18053174205108255, + 0.13719827990417027, + 0.08862652853638416, + 0.03759772656874239, + -0.013073952151520388, + -0.060690608986011814, + -0.10281030706494565, + -0.13736985507049018 + ], + [ + -0.16865061331126227, + -0.14653700801271363, + -0.11505016730310495, + -0.07558080422426758, + -0.030004497243790427, + 0.019407660252202565, + 0.07010183827093616, + 0.11937185506223688, + 0.16450028494360933, + 0.20290271423033404, + 0.23226729318028777, + 0.2506818889186662, + 0.2567417315441088, + 0.24963143467045815, + 0.22917661128094333, + 0.19586192453391038, + 0.15081422331281308, + 0.0957513146109, + 0.032898814044057145, + -0.03512071345143313, + -0.10542055787501849, + -0.17499760171649797, + -0.24088710992360066, + -0.30031625065864676, + -0.35084804028714445, + -0.3905078789395116, + -0.417885750201407, + -0.43220845214435083, + -0.4333778373354074, + -0.42197287899622543, + -0.39921534828629784, + -0.36690087535799776, + -0.32729906443176787, + -0.28302803533990717, + -0.23691017597600564, + -0.19181693290541052, + -0.15051108239111077, + -0.11549507625799743, + -0.08887373699192957, + -0.0722388011028484, + -0.06658162124929747, + -0.0722388011028484, + -0.08887373699192957, + -0.11549507625799743, + -0.15051108239111077, + -0.19181693290541052, + -0.23691017597600564, + -0.28302803533990717, + -0.32729906443176787, + -0.36690087535799776, + -0.39921534828629784, + -0.42197287899622543, + -0.4333778373354074, + -0.43220845214435083, + -0.417885750201407, + -0.3905078789395116, + -0.35084804028714445, + -0.30031625065864676, + -0.24088710992360066, + -0.17499760171649797, + -0.10542055787501849, + -0.03512071345143313, + 0.032898814044057145, + 0.0957513146109, + 0.15081422331281308, + 0.19586192453391038, + 0.22917661128094333, + 0.24963143467045815, + 0.2567417315441088, + 0.2506818889186662, + 0.23226729318028777, + 0.20290271423033404, + 0.16450028494360933, + 0.11937185506223688, + 0.07010183827093616, + 0.019407660252202565, + -0.030004497243790427, + -0.07558080422426758, + -0.11505016730310495, + -0.14653700801271363 + ], + [ + -0.1738139924448547, + -0.15527119023634725, + -0.1271795169340972, + -0.0907256642328181, + -0.04758506314163741, + 0.0001569493213448689, + 0.05010748884225075, + 0.09968670899986165, + 0.14626024334832619, + 0.18727640924644018, + 0.22040074178662336, + 0.24364050109720906, + 0.2554522819126627, + 0.2548267267047997, + 0.2413455569066888, + 0.2152076253393881, + 0.17722237538812438, + 0.12877087581897034, + 0.07173638515428266, + 0.00840808631479302, + -0.05863687417657578, + -0.12666669235949252, + -0.1929363397545002, + -0.254829433326894, + -0.309992807249447, + -0.3564564355250057, + -0.39273214882544505, + -0.417885750201407, + -0.43157859884674826, + -0.434076417833265, + -0.42622489689420734, + -0.4093935036702951, + -0.3853906832849483, + -0.35635521764627226, + -0.324629843053556, + -0.29262421276448536, + -0.2626748843273063, + -0.23691017597600564, + -0.21712746254366178, + -0.20468978410715197, + -0.20044755867978276, + -0.20468978410715197, + -0.21712746254366178, + -0.23691017597600564, + -0.2626748843273063, + -0.29262421276448536, + -0.324629843053556, + -0.35635521764627226, + -0.3853906832849483, + -0.4093935036702951, + -0.42622489689420734, + -0.434076417833265, + -0.43157859884674826, + -0.417885750201407, + -0.39273214882544505, + -0.3564564355250057, + -0.309992807249447, + -0.254829433326894, + -0.1929363397545002, + -0.12666669235949252, + -0.05863687417657578, + 0.00840808631479302, + 0.07173638515428266, + 0.12877087581897034, + 0.17722237538812438, + 0.2152076253393881, + 0.2413455569066888, + 0.2548267267047997, + 0.2554522819126627, + 0.24364050109720906, + 0.22040074178662336, + 0.18727640924644018, + 0.14626024334832619, + 0.09968670899986165, + 0.05010748884225075, + 0.0001569493213448689, + -0.04758506314163741, + -0.0907256642328181, + -0.1271795169340972, + -0.15527119023634725 + ], + [ + -0.17801860199902664, + -0.16329221750830802, + -0.13890582780165694, + -0.10583439818051152, + -0.06554239869174844, + -0.019915691575644292, + 0.02883009042098063, + 0.07825990831739421, + 0.1258425822940911, + 0.16908036038891633, + 0.20563779959612533, + 0.23346296309158113, + 0.2508943222213973, + 0.25674750760048576, + 0.25037713957121355, + 0.2317103248693539, + 0.20124995852555586, + 0.16004763127913005, + 0.1096476200446325, + 0.05200503792795912, + -0.010617349295218181, + -0.0757679524450742, + -0.1409342819269669, + -0.2036729142303004, + -0.2617343483375656, + -0.31317589634427284, + -0.3564564355250057, + -0.3905078789395116, + -0.4147795406040892, + -0.42925310491460716, + -0.43442757176285574, + -0.4312752446188071, + -0.421171462695804, + -0.40580225753498556, + -0.38705535500366767, + -0.36690087535799776, + -0.3472686537517362, + -0.32992927901128904, + -0.3163857196862348, + -0.3077817863653888, + -0.30483270332925, + -0.3077817863653888, + -0.3163857196862348, + -0.32992927901128904, + -0.3472686537517362, + -0.36690087535799776, + -0.38705535500366767, + -0.40580225753498556, + -0.421171462695804, + -0.4312752446188071, + -0.43442757176285574, + -0.42925310491460716, + -0.4147795406040892, + -0.3905078789395116, + -0.3564564355250057, + -0.31317589634427284, + -0.2617343483375656, + -0.2036729142303004, + -0.1409342819269669, + -0.0757679524450742, + -0.010617349295218181, + 0.05200503792795912, + 0.1096476200446325, + 0.16004763127913005, + 0.20124995852555586, + 0.2317103248693539, + 0.25037713957121355, + 0.25674750760048576, + 0.2508943222213973, + 0.23346296309158113, + 0.20563779959612533, + 0.16908036038891633, + 0.1258425822940911, + 0.07825990831739421, + 0.02883009042098063, + -0.019915691575644292, + -0.06554239869174844, + -0.10583439818051152, + -0.13890582780165694, + -0.16329221750830802 + ], + [ + -0.18100457917857166, + -0.17030698199702413, + -0.1499137997580331, + -0.12058300781296416, + -0.08355939645450051, + -0.040517266401149735, + 0.0065202421682302655, + 0.05528095770522729, + 0.10335731863015635, + 0.14832776112580212, + 0.18787932061729182, + 0.21992483146863692, + 0.242708395806646, + 0.254893432701845, + 0.25562857790064414, + 0.24458792842044305, + 0.22198354690007724, + 0.18854967763954522, + 0.1454996929947382, + 0.09445829662141196, + 0.037372873633869375, + -0.02359098016854476, + -0.08616386191642225, + -0.14809048863531396, + -0.20724458052139974, + -0.2617343483375656, + -0.309992807249447, + -0.35084804028714445, + -0.3835697098652554, + -0.407889497747319, + -0.42399466300627076, + -0.43249545715781157, + -0.43436863670247905, + -0.4308806796227811, + -0.42349546556438716, + -0.4137720534188708, + -0.40325873487122593, + -0.39338972722403176, + -0.3853906832849483, + -0.3801986514917913, + -0.3784012476539641, + -0.3801986514917913, + -0.3853906832849483, + -0.39338972722403176, + -0.40325873487122593, + -0.4137720534188708, + -0.42349546556438716, + -0.4308806796227811, + -0.43436863670247905, + -0.43249545715781157, + -0.42399466300627076, + -0.407889497747319, + -0.3835697098652554, + -0.35084804028714445, + -0.309992807249447, + -0.2617343483375656, + -0.20724458052139974, + -0.14809048863531396, + -0.08616386191642225, + -0.02359098016854476, + 0.037372873633869375, + 0.09445829662141196, + 0.1454996929947382, + 0.18854967763954522, + 0.22198354690007724, + 0.24458792842044305, + 0.25562857790064414, + 0.254893432701845, + 0.242708395806646, + 0.21992483146863692, + 0.18787932061729182, + 0.14832776112580212, + 0.10335731863015635, + 0.05528095770522729, + 0.0065202421682302655, + -0.040517266401149735, + -0.08355939645450051, + -0.12058300781296416, + -0.1499137997580331, + -0.17030698199702413 + ], + [ + -0.18251498442862385, + -0.1760159755489718, + -0.15987112992755653, + -0.13461888616197776, + -0.10127808535368477, + -0.061301442485772274, + -0.016505930263581485, + 0.031016232090896562, + 0.07900122348247962, + 0.12512633286074154, + 0.16712567793535366, + 0.20290271423033404, + 0.23063350923189954, + 0.24885528388828942, + 0.25653555744366946, + 0.25311832399967577, + 0.23854497801642713, + 0.21324911772700825, + 0.17812580971586786, + 0.134477311926808, + 0.08393854575868848, + 0.02838670735216783, + -0.030159748399708135, + -0.08964697741323371, + -0.14809048863531396, + -0.2036729142303004, + -0.254829433326894, + -0.30031625065864676, + -0.3392585664190622, + -0.37117570680030565, + -0.39598244357893553, + -0.41396693622794944, + -0.42574709936268906, + -0.43220845214435083, + -0.43442757176285574, + -0.4335860886421158, + -0.4308806796227811, + -0.4274347075936389, + -0.42421701152445723, + -0.42197287899622543, + -0.421171462695804, + -0.42197287899622543, + -0.42421701152445723, + -0.4274347075936389, + -0.4308806796227811, + -0.4335860886421158, + -0.43442757176285574, + -0.43220845214435083, + -0.42574709936268906, + -0.41396693622794944, + -0.39598244357893553, + -0.37117570680030565, + -0.3392585664190622, + -0.30031625065864676, + -0.254829433326894, + -0.2036729142303004, + -0.14809048863531396, + -0.08964697741323371, + -0.030159748399708135, + 0.02838670735216783, + 0.08393854575868848, + 0.134477311926808, + 0.17812580971586786, + 0.21324911772700825, + 0.23854497801642713, + 0.25311832399967577, + 0.25653555744366946, + 0.24885528388828942, + 0.23063350923189954, + 0.20290271423033404, + 0.16712567793535366, + 0.12512633286074154, + 0.07900122348247962, + 0.031016232090896562, + -0.016505930263581485, + -0.061301442485772274, + -0.10127808535368477, + -0.13461888616197776, + -0.15987112992755653, + -0.1760159755489718 + ], + [ + -0.18230376872794093, + -0.18012123502583363, + -0.16843605361995675, + -0.14756752732225356, + -0.11830504740258321, + -0.08187218787401292, + -0.039868134180728126, + 0.0058103924762656495, + 0.05306249567952219, + 0.09968670899986165, + 0.14348926836260514, + 0.18239124981424537, + 0.2145288714461612, + 0.2383416766936446, + 0.25264402764959015, + 0.2566762997375786, + 0.25013332713993036, + 0.23316893482082693, + 0.2063767337439853, + 0.17074867404778504, + 0.12761407121954643, + 0.07856287339249271, + 0.02535776443828009, + -0.030159748399708135, + -0.08616386191642225, + -0.1409342819269669, + -0.1929363397545002, + -0.24088710992360066, + -0.2838041182964338, + -0.3210343185560354, + -0.35226222727992795, + -0.37749737145928347, + -0.3970424421347404, + -0.41144469052055266, + -0.42143408131469146, + -0.42785247459104203, + -0.43157859884674826, + -0.4334537754581445, + -0.434213248547002, + -0.43442757176285574, + -0.43445783007337646, + -0.43442757176285574, + -0.434213248547002, + -0.4334537754581445, + -0.43157859884674826, + -0.42785247459104203, + -0.42143408131469146, + -0.41144469052055266, + -0.3970424421347404, + -0.37749737145928347, + -0.35226222727992795, + -0.3210343185560354, + -0.2838041182964338, + -0.24088710992360066, + -0.1929363397545002, + -0.1409342819269669, + -0.08616386191642225, + -0.030159748399708135, + 0.02535776443828009, + 0.07856287339249271, + 0.12761407121954643, + 0.17074867404778504, + 0.2063767337439853, + 0.23316893482082693, + 0.25013332713993036, + 0.2566762997375786, + 0.25264402764959015, + 0.2383416766936446, + 0.2145288714461612, + 0.18239124981424537, + 0.14348926836260514, + 0.09968670899986165, + 0.05306249567952219, + 0.0058103924762656495, + -0.039868134180728126, + -0.08187218787401292, + -0.11830504740258321, + -0.14756752732225356, + -0.16843605361995675, + -0.18012123502583363 + ], + [ + -0.1801446545297837, + -0.18233559039097344, + -0.1752665961050691, + -0.15904136091487175, + -0.13421936300715656, + -0.10179031338845618, + -0.0631265026963309, + -0.019915691575644292, + 0.025921773001301992, + 0.07232710218505171, + 0.11720338291232232, + 0.15851669454452746, + 0.1943926655354523, + 0.2232034254780841, + 0.24364050109720906, + 0.25477004091850136, + 0.2560677827399544, + 0.24743234013685533, + 0.22917661128094333, + 0.20199833430642128, + 0.16693195814109418, + 0.12528500092613942, + 0.07856287339249271, + 0.02838670735216783, + -0.02359098016854476, + -0.0757679524450742, + -0.12666669235949252, + -0.17499760171649797, + -0.21970771693043267, + -0.26001264723920775, + -0.29541051237375787, + -0.32567778292945404, + -0.35084804028714445, + -0.37117570680030565, + -0.38708768931988075, + -0.3991265770886398, + -0.407889497747319, + -0.41396693622794944, + -0.417885750201407, + -0.4200602785751461, + -0.4207548585159486, + -0.4200602785751461, + -0.417885750201407, + -0.41396693622794944, + -0.407889497747319, + -0.3991265770886398, + -0.38708768931988075, + -0.37117570680030565, + -0.35084804028714445, + -0.32567778292945404, + -0.29541051237375787, + -0.26001264723920775, + -0.21970771693043267, + -0.17499760171649797, + -0.12666669235949252, + -0.0757679524450742, + -0.02359098016854476, + 0.02838670735216783, + 0.07856287339249271, + 0.12528500092613942, + 0.16693195814109418, + 0.20199833430642128, + 0.22917661128094333, + 0.24743234013685533, + 0.2560677827399544, + 0.25477004091850136, + 0.24364050109720906, + 0.2232034254780841, + 0.1943926655354523, + 0.15851669454452746, + 0.11720338291232232, + 0.07232710218505171, + 0.025921773001301992, + -0.019915691575644292, + -0.0631265026963309, + -0.10179031338845618, + -0.13421936300715656, + -0.15904136091487175, + -0.1752665961050691, + -0.18233559039097344 + ], + [ + -0.17584069010379264, + -0.18239300622958532, + -0.1800313728705813, + -0.16865061331126227, + -0.14858307017251748, + -0.12058300781296416, + -0.0857896329957062, + -0.045670869380806056, + -0.001951040868825416, + 0.043473546354522816, + 0.08862652853638416, + 0.13154597877649798, + 0.17037647050011587, + 0.20345392533496165, + 0.22937894091767205, + 0.24707500803079696, + 0.25582893038458626, + 0.2553118000893658, + 0.2455799958764798, + 0.2270567942100705, + 0.20049625055173417, + 0.16693195814109418, + 0.12761407121954643, + 0.08393854575868848, + 0.037372873633869375, + -0.010617349295218181, + -0.05863687417657578, + -0.10542055787501849, + -0.14988136590815446, + -0.19114437378651342, + -0.22856545626592412, + -0.2617343483375656, + -0.29046275344788247, + -0.31475910259630246, + -0.33479237619194996, + -0.35084804028714445, + -0.3632795822101567, + -0.37245933283868765, + -0.3787322233669178, + -0.382375848005458, + -0.3835697098652554, + -0.382375848005458, + -0.3787322233669178, + -0.37245933283868765, + -0.3632795822101567, + -0.35084804028714445, + -0.33479237619194996, + -0.31475910259630246, + -0.29046275344788247, + -0.2617343483375656, + -0.22856545626592412, + -0.19114437378651342, + -0.14988136590815446, + -0.10542055787501849, + -0.05863687417657578, + -0.010617349295218181, + 0.037372873633869375, + 0.08393854575868848, + 0.12761407121954643, + 0.16693195814109418, + 0.20049625055173417, + 0.2270567942100705, + 0.2455799958764798, + 0.2553118000893658, + 0.25582893038458626, + 0.24707500803079696, + 0.22937894091767205, + 0.20345392533496165, + 0.17037647050011587, + 0.13154597877649798, + 0.08862652853638416, + 0.043473546354522816, + -0.001951040868825416, + -0.045670869380806056, + -0.0857896329957062, + -0.12058300781296416, + -0.14858307017251748, + -0.16865061331126227, + -0.1800313728705813, + -0.18239300622958532 + ], + [ + -0.16923416092386775, + -0.1800597155006458, + -0.18242166855756492, + -0.1760159755489718, + -0.1609539875623888, + -0.1377563081818195, + -0.10732612754693129, + -0.07090368426500879, + -0.030004497243790427, + 0.013655158230898757, + 0.058241427706856384, + 0.1018902143955224, + 0.14279404657238684, + 0.1792839709402817, + 0.20990234059772522, + 0.23346296309158113, + 0.24909585663212155, + 0.2562747828163765, + 0.2548267267047997, + 0.24492352037505036, + 0.2270567942100705, + 0.20199833430642128, + 0.17074867404778504, + 0.134477311926808, + 0.09445829662141196, + 0.05200503792795912, + 0.00840808631479302, + -0.03512071345143313, + -0.07749482277960204, + -0.1177881852505473, + -0.15525760655490364, + -0.18935183535374994, + -0.21970771693043267, + -0.246134617818378, + -0.268589046149572, + -0.28714197491104243, + -0.30194177876754097, + -0.31317589634427284, + -0.3210343185560354, + -0.32567778292945404, + -0.32721314035298743, + -0.32567778292945404, + -0.3210343185560354, + -0.31317589634427284, + -0.30194177876754097, + -0.28714197491104243, + -0.268589046149572, + -0.246134617818378, + -0.21970771693043267, + -0.18935183535374994, + -0.15525760655490364, + -0.1177881852505473, + -0.07749482277960204, + -0.03512071345143313, + 0.00840808631479302, + 0.05200503792795912, + 0.09445829662141196, + 0.134477311926808, + 0.17074867404778504, + 0.20199833430642128, + 0.2270567942100705, + 0.24492352037505036, + 0.2548267267047997, + 0.2562747828163765, + 0.24909585663212155, + 0.23346296309158113, + 0.20990234059772522, + 0.1792839709402817, + 0.14279404657238684, + 0.1018902143955224, + 0.058241427706856384, + 0.013655158230898757, + -0.030004497243790427, + -0.07090368426500879, + -0.10732612754693129, + -0.1377563081818195, + -0.1609539875623888, + -0.1760159755489718, + -0.18242166855756492, + -0.1800597155006458 + ], + [ + -0.16021647158282734, + -0.1751457556394694, + -0.1821644169794075, + -0.18078273088932142, + -0.17090060569317098, + -0.1528102839666787, + -0.1271795169340972, + -0.0950164022704569, + -0.05761803324395176, + -0.016505930263581485, + 0.026648129724923395, + 0.07010183827093616, + 0.11212338767979044, + 0.1510696036571175, + 0.18545724476618586, + 0.21402402107025095, + 0.23577655069724138, + 0.25002327766855664, + 0.25639126767027576, + 0.2548267267047997, + 0.2455799958764798, + 0.22917661128094333, + 0.2063767337439853, + 0.17812580971586786, + 0.1454996929947382, + 0.1096476200446325, + 0.07173638515428266, + 0.032898814044057145, + -0.005810793613848673, + -0.043452159632214875, + -0.0792240541655952, + -0.11247819731414006, + -0.14272214282150672, + -0.1696119802323752, + -0.1929363397545002, + -0.2125937105436689, + -0.22856545626592412, + -0.24088710992360066, + -0.24962054293732017, + -0.254829433326894, + -0.2565601183892334, + -0.254829433326894, + -0.24962054293732017, + -0.24088710992360066, + -0.22856545626592412, + -0.2125937105436689, + -0.1929363397545002, + -0.1696119802323752, + -0.14272214282150672, + -0.11247819731414006, + -0.0792240541655952, + -0.043452159632214875, + -0.005810793613848673, + 0.032898814044057145, + 0.07173638515428266, + 0.1096476200446325, + 0.1454996929947382, + 0.17812580971586786, + 0.2063767337439853, + 0.22917661128094333, + 0.2455799958764798, + 0.2548267267047997, + 0.25639126767027576, + 0.25002327766855664, + 0.23577655069724138, + 0.21402402107025095, + 0.18545724476618586, + 0.1510696036571175, + 0.11212338767979044, + 0.07010183827093616, + 0.026648129724923395, + -0.016505930263581485, + -0.05761803324395176, + -0.0950164022704569, + -0.1271795169340972, + -0.1528102839666787, + -0.17090060569317098, + -0.18078273088932142, + -0.1821644169794075, + -0.1751457556394694 + ], + [ + -0.1487375524385824, + -0.16751643729146143, + -0.17903560277058095, + -0.1826358700412797, + -0.17801860199902664, + -0.16525654180237792, + -0.14478624788034108, + -0.11738288358628372, + -0.08411903827788304, + -0.046310064114579955, + -0.005449066140771361, + 0.03686485131708162, + 0.07900122348247962, + 0.11937185506223688, + 0.15649972810645998, + 0.1890798565922851, + 0.21602931256266372, + 0.2365243422174828, + 0.25002327766855664, + 0.2562747828163765, + 0.2553118000893658, + 0.24743234013685533, + 0.23316893482082693, + 0.21324911772700825, + 0.18854967763954522, + 0.16004763127913005, + 0.12877087581897034, + 0.0957513146109, + 0.06198291759831892, + 0.02838670735216783, + -0.004215913110515241, + -0.03512071345143313, + -0.06374895250625122, + -0.08964697741323371, + -0.11247819731414006, + -0.132008995765264, + -0.14809048863531396, + -0.16063822727306362, + -0.1696119802323752, + -0.17499760171649797, + -0.1767927226084377, + -0.17499760171649797, + -0.1696119802323752, + -0.16063822727306362, + -0.14809048863531396, + -0.132008995765264, + -0.11247819731414006, + -0.08964697741323371, + -0.06374895250625122, + -0.03512071345143313, + -0.004215913110515241, + 0.02838670735216783, + 0.06198291759831892, + 0.0957513146109, + 0.12877087581897034, + 0.16004763127913005, + 0.18854967763954522, + 0.21324911772700825, + 0.23316893482082693, + 0.24743234013685533, + 0.2553118000893658, + 0.2562747828163765, + 0.25002327766855664, + 0.2365243422174828, + 0.21602931256266372, + 0.1890798565922851, + 0.15649972810645998, + 0.11937185506223688, + 0.07900122348247962, + 0.03686485131708162, + -0.005449066140771361, + -0.046310064114579955, + -0.08411903827788304, + -0.11738288358628372, + -0.14478624788034108, + -0.16525654180237792, + -0.17801860199902664, + -0.1826358700412797, + -0.17903560277058095, + -0.16751643729146143 + ], + [ + -0.13481430178982187, + -0.15710321083861073, + -0.17287351607260815, + -0.18131560690315682, + -0.18194839266053625, + -0.17463748569481502, + -0.15959621882048483, + -0.13736985507049018, + -0.10880422217787396, + -0.0750007897964791, + -0.03726086233570953, + 0.0029779491154211806, + 0.044209509361482956, + 0.08492762656935865, + 0.12369173187889267, + 0.15918658398472915, + 0.1902732638436695, + 0.21602931256266372, + 0.23577655069724138, + 0.24909585663212155, + 0.25582893038458626, + 0.2560677827399544, + 0.25013332713993036, + 0.23854497801642713, + 0.22198354690007724, + 0.20124995852555586, + 0.17722237538812438, + 0.15081422331281308, + 0.12293536517635703, + 0.09445829662141196, + 0.0661907655654817, + 0.03885568116655977, + 0.013078615468659323, + -0.010617349295218181, + -0.03181017613329085, + -0.050171999808914604, + -0.06545830501430487, + -0.07749482277960204, + -0.08616386191642225, + -0.09139170665445415, + -0.09313849939964196, + -0.09139170665445415, + -0.08616386191642225, + -0.07749482277960204, + -0.06545830501430487, + -0.050171999808914604, + -0.03181017613329085, + -0.010617349295218181, + 0.013078615468659323, + 0.03885568116655977, + 0.0661907655654817, + 0.09445829662141196, + 0.12293536517635703, + 0.15081422331281308, + 0.17722237538812438, + 0.20124995852555586, + 0.22198354690007724, + 0.23854497801642713, + 0.25013332713993036, + 0.2560677827399544, + 0.25582893038458626, + 0.24909585663212155, + 0.23577655069724138, + 0.21602931256266372, + 0.1902732638436695, + 0.15918658398472915, + 0.12369173187889267, + 0.08492762656935865, + 0.044209509361482956, + 0.0029779491154211806, + -0.03726086233570953, + -0.0750007897964791, + -0.10880422217787396, + -0.13736985507049018, + -0.15959621882048483, + -0.17463748569481502, + -0.18194839266053625, + -0.18131560690315682, + -0.17287351607260815, + -0.15710321083861073 + ], + [ + -0.11853755153953285, + -0.14391335124448024, + -0.163591222139663, + -0.17663261032673944, + -0.18239300622958532, + -0.18054660691367944, + -0.17109514979541934, + -0.1543609103022869, + -0.13096468174943518, + -0.10179031338845618, + -0.06793803188546253, + -0.03066927919323432, + 0.008653858363151095, + 0.04863139306208121, + 0.0878871354792479, + 0.12512633286074154, + 0.15918658398472915, + 0.1890798565922851, + 0.21402402107025095, + 0.23346296309158113, + 0.24707500803079696, + 0.25477004091850136, + 0.2566762997375786, + 0.25311832399967577, + 0.24458792842044305, + 0.2317103248693539, + 0.2152076253393881, + 0.19586192453391038, + 0.17447999195279823, + 0.15186131748507978, + 0.12877087581897034, + 0.10591753298818528, + 0.08393854575868848, + 0.06339013493636744, + 0.044743679368913644, + 0.02838670735216783, + 0.014627580006334946, + 0.0037025838949493145, + -0.004215913110515241, + -0.009011537058698997, + -0.010617349295218181, + -0.009011537058698997, + -0.004215913110515241, + 0.0037025838949493145, + 0.014627580006334946, + 0.02838670735216783, + 0.044743679368913644, + 0.06339013493636744, + 0.08393854575868848, + 0.10591753298818528, + 0.12877087581897034, + 0.15186131748507978, + 0.17447999195279823, + 0.19586192453391038, + 0.2152076253393881, + 0.2317103248693539, + 0.24458792842044305, + 0.25311832399967577, + 0.2566762997375786, + 0.25477004091850136, + 0.24707500803079696, + 0.23346296309158113, + 0.21402402107025095, + 0.1890798565922851, + 0.15918658398472915, + 0.12512633286074154, + 0.0878871354792479, + 0.04863139306208121, + 0.008653858363151095, + -0.03066927919323432, + -0.06793803188546253, + -0.10179031338845618, + -0.13096468174943518, + -0.1543609103022869, + -0.17109514979541934, + -0.18054660691367944, + -0.18239300622958532, + -0.17663261032673944, + -0.163591222139663, + -0.14391335124448024 + ], + [ + -0.10007704610444179, + -0.12803786284735597, + -0.1511875643863488, + -0.16848219583369567, + -0.17913546063850083, + -0.18264893898060253, + -0.1788278960809016, + -0.16778234479339135, + -0.1499137997580331, + -0.1258888846262905, + -0.09660159075517502, + -0.0631265026963309, + -0.026665677985416577, + 0.011507919583092052, + 0.05010748884225075, + 0.0878871354792479, + 0.12369173187889267, + 0.15649972810645998, + 0.18545724476618586, + 0.20990234059772522, + 0.22937894091767205, + 0.24364050109720906, + 0.25264402764959015, + 0.25653555744366946, + 0.25562857790064414, + 0.25037713957121355, + 0.2413455569066888, + 0.22917661128094333, + 0.21456006847846779, + 0.1982031145119569, + 0.18080401871815463, + 0.1630299764243758, + 0.1454996929947382, + 0.12877087581897034, + 0.11333242903336224, + 0.09960082298540655, + 0.08791985781076668, + 0.07856287339249271, + 0.07173638515428266, + 0.06758414818694233, + 0.0661907655654817, + 0.06758414818694233, + 0.07173638515428266, + 0.07856287339249271, + 0.08791985781076668, + 0.09960082298540655, + 0.11333242903336224, + 0.12877087581897034, + 0.1454996929947382, + 0.1630299764243758, + 0.18080401871815463, + 0.1982031145119569, + 0.21456006847846779, + 0.22917661128094333, + 0.2413455569066888, + 0.25037713957121355, + 0.25562857790064414, + 0.25653555744366946, + 0.25264402764959015, + 0.24364050109720906, + 0.22937894091767205, + 0.20990234059772522, + 0.18545724476618586, + 0.15649972810645998, + 0.12369173187889267, + 0.0878871354792479, + 0.05010748884225075, + 0.011507919583092052, + -0.026665677985416577, + -0.0631265026963309, + -0.09660159075517502, + -0.1258888846262905, + -0.1499137997580331, + -0.16778234479339135, + -0.1788278960809016, + -0.18264893898060253, + -0.17913546063850083, + -0.16848219583369567, + -0.1511875643863488, + -0.12803786284735597 + ], + [ + -0.07968395387291566, + -0.10965701691843574, + -0.13575600794040762, + -0.15685668268767797, + -0.17205475511311313, + -0.1807007071005138, + -0.18242166855756492, + -0.17712974307464055, + -0.16501687105976595, + -0.14653700801271363, + -0.12237701362727325, + -0.09341816596346665, + -0.060690608986011814, + -0.02532329427921568, + 0.011507919583092052, + 0.04863139306208121, + 0.08492762656935865, + 0.11937185506223688, + 0.1510696036571175, + 0.1792839709402817, + 0.20345392533496165, + 0.2232034254780841, + 0.2383416766936446, + 0.24885528388828942, + 0.254893432701845, + 0.25674750760048576, + 0.2548267267047997, + 0.24963143467045815, + 0.24172565029557566, + 0.2317103248693539, + 0.22019854657881394, + 0.20779364608280457, + 0.19507084218595108, + 0.18256273925541686, + 0.17074867404778504, + 0.16004763127913005, + 0.15081422331281308, + 0.1433370736825879, + 0.13783886506830845, + 0.134477311926808, + 0.1333463922312941, + 0.134477311926808, + 0.13783886506830845, + 0.1433370736825879, + 0.15081422331281308, + 0.16004763127913005, + 0.17074867404778504, + 0.18256273925541686, + 0.19507084218595108, + 0.20779364608280457, + 0.22019854657881394, + 0.2317103248693539, + 0.24172565029557566, + 0.24963143467045815, + 0.2548267267047997, + 0.25674750760048576, + 0.254893432701845, + 0.24885528388828942, + 0.2383416766936446, + 0.2232034254780841, + 0.20345392533496165, + 0.1792839709402817, + 0.1510696036571175, + 0.11937185506223688, + 0.08492762656935865, + 0.04863139306208121, + 0.011507919583092052, + -0.02532329427921568, + -0.060690608986011814, + -0.09341816596346665, + -0.12237701362727325, + -0.14653700801271363, + -0.16501687105976595, + -0.17712974307464055, + -0.18242166855756492, + -0.1807007071005138, + -0.17205475511311313, + -0.15685668268767797, + -0.13575600794040762, + -0.10965701691843574 + ], + [ + -0.05769048962428924, + -0.08904297911487404, + -0.11749065565570795, + -0.14185512230149663, + -0.16113955966514656, + -0.17456713788189782, + -0.18160802037610754, + -0.18199408570471504, + -0.17572115154133375, + -0.16303912773542587, + -0.14443111863131364, + -0.12058300781296416, + -0.09234546620178369, + -0.060690608986011814, + -0.026665677985416577, + 0.008653858363151095, + 0.044209509361482956, + 0.07900122348247962, + 0.11212338767979044, + 0.14279404657238684, + 0.17037647050011587, + 0.1943926655354523, + 0.2145288714461612, + 0.23063350923189954, + 0.242708395806646, + 0.2508943222213973, + 0.2554522819126627, + 0.2567417315441088, + 0.25519727019112654, + 0.25130504004127213, + 0.2455799958764798, + 0.23854497801642713, + 0.23071227369415243, + 0.22256808600007377, + 0.21456006847846779, + 0.2070878465419809, + 0.20049625055173417, + 0.19507084218595108, + 0.19103523332295086, + 0.18854967763954522, + 0.18771045677679687, + 0.18854967763954522, + 0.19103523332295086, + 0.19507084218595108, + 0.20049625055173417, + 0.2070878465419809, + 0.21456006847846779, + 0.22256808600007377, + 0.23071227369415243, + 0.23854497801642713, + 0.2455799958764798, + 0.25130504004127213, + 0.25519727019112654, + 0.2567417315441088, + 0.2554522819126627, + 0.2508943222213973, + 0.242708395806646, + 0.23063350923189954, + 0.2145288714461612, + 0.1943926655354523, + 0.17037647050011587, + 0.14279404657238684, + 0.11212338767979044, + 0.07900122348247962, + 0.044209509361482956, + 0.008653858363151095, + -0.026665677985416577, + -0.060690608986011814, + -0.09234546620178369, + -0.12058300781296416, + -0.14443111863131364, + -0.16303912773542587, + -0.17572115154133375, + -0.18199408570471504, + -0.18160802037610754, + -0.17456713788189782, + -0.16113955966514656, + -0.14185512230149663, + -0.11749065565570795, + -0.08904297911487404 + ], + [ + -0.0345063152690242, + -0.06655906279410359, + -0.09668883252747353, + -0.12368964794720452, + -0.1464987033293174, + -0.1642373823959323, + -0.17624240938958516, + -0.18208605074549258, + -0.18158488243001691, + -0.1747972342928682, + -0.16200998595397612, + -0.1437158894806465, + -0.12058300781296416, + -0.09341816596346665, + -0.0631265026963309, + -0.03066927919323432, + 0.0029779491154211806, + 0.03686485131708162, + 0.07010183827093616, + 0.1018902143955224, + 0.13154597877649798, + 0.15851669454452746, + 0.18239124981424537, + 0.20290271423033404, + 0.21992483146863692, + 0.23346296309158113, + 0.24364050109720906, + 0.2506818889186662, + 0.254893432701845, + 0.2566430509401283, + 0.2563400102730029, + 0.25441554164532254, + 0.25130504004127213, + 0.24743234013685533, + 0.2431963471432226, + 0.23896010343988033, + 0.23504220166614895, + 0.2317103248693539, + 0.22917661128094333, + 0.22759450814784551, + 0.2270567942100705, + 0.22759450814784551, + 0.22917661128094333, + 0.2317103248693539, + 0.23504220166614895, + 0.23896010343988033, + 0.2431963471432226, + 0.24743234013685533, + 0.25130504004127213, + 0.25441554164532254, + 0.2563400102730029, + 0.2566430509401283, + 0.254893432701845, + 0.2506818889186662, + 0.24364050109720906, + 0.23346296309158113, + 0.21992483146863692, + 0.20290271423033404, + 0.18239124981424537, + 0.15851669454452746, + 0.13154597877649798, + 0.1018902143955224, + 0.07010183827093616, + 0.03686485131708162, + 0.0029779491154211806, + -0.03066927919323432, + -0.0631265026963309, + -0.09341816596346665, + -0.12058300781296416, + -0.1437158894806465, + -0.16200998595397612, + -0.1747972342928682, + -0.18158488243001691, + -0.18208605074549258, + -0.17624240938958516, + -0.1642373823959323, + -0.1464987033293174, + -0.12368964794720452, + -0.09668883252747353, + -0.06655906279410359 + ], + [ + -0.01061150357619211, + -0.042655257000177006, + -0.07374973820785838, + -0.10268778525178764, + -0.1283676319466868, + -0.14983554931501694, + -0.16632015713858264, + -0.17725715646546372, + -0.18230376872794093, + -0.18134271385500067, + -0.17447608825271163, + -0.16200998595397612, + -0.14443111863131364, + -0.12237701362727325, + -0.09660159075517502, + -0.06793803188546253, + -0.03726086233570953, + -0.005449066140771361, + 0.026648129724923395, + 0.058241427706856384, + 0.08862652853638416, + 0.11720338291232232, + 0.14348926836260514, + 0.16712567793535366, + 0.18787932061729182, + 0.20563779959612533, + 0.22040074178662336, + 0.23226729318028777, + 0.24142096714711753, + 0.24811283911536614, + 0.25264402764959015, + 0.255348298963932, + 0.256575492104657, + 0.2566762997375786, + 0.2559887694405144, + 0.2548267267047997, + 0.25347017586536014, + 0.252157618714697, + 0.25108014921898075, + 0.25037713957121355, + 0.25013332713993036, + 0.25037713957121355, + 0.25108014921898075, + 0.252157618714697, + 0.25347017586536014, + 0.2548267267047997, + 0.2559887694405144, + 0.2566762997375786, + 0.256575492104657, + 0.255348298963932, + 0.25264402764959015, + 0.24811283911536614, + 0.24142096714711753, + 0.23226729318028777, + 0.22040074178662336, + 0.20563779959612533, + 0.18787932061729182, + 0.16712567793535366, + 0.14348926836260514, + 0.11720338291232232, + 0.08862652853638416, + 0.058241427706856384, + 0.026648129724923395, + -0.005449066140771361, + -0.03726086233570953, + -0.06793803188546253, + -0.09660159075517502, + -0.12237701362727325, + -0.14443111863131364, + -0.16200998595397612, + -0.17447608825271163, + -0.18134271385500067, + -0.18230376872794093, + -0.17725715646546372, + -0.16632015713858264, + -0.14983554931501694, + -0.1283676319466868, + -0.10268778525178764, + -0.07374973820785838, + -0.042655257000177006 + ], + [ + 0.013454008098850966, + -0.017859822184363938, + -0.04916880920228074, + -0.07929019757294747, + -0.10711012813756442, + -0.1316269478872783, + -0.15198770280837584, + -0.16751643729146143, + -0.17773339606034183, + -0.18236471957976835, + -0.18134271385500067, + -0.1747972342928682, + -0.16303912773542587, + -0.14653700801271363, + -0.1258888846262905, + -0.10179031338845618, + -0.0750007897964791, + -0.046310064114579955, + -0.016505930263581485, + 0.013655158230898757, + 0.043473546354522816, + 0.07232710218505171, + 0.09968670899986165, + 0.12512633286074154, + 0.14832776112580212, + 0.16908036038891633, + 0.18727640924644018, + 0.20290271423033404, + 0.21602931256266372, + 0.22679610352037188, + 0.23539823538075702, + 0.2420710146043941, + 0.24707500803079696, + 0.2506818889186662, + 0.2531614457800734, + 0.25477004091850136, + 0.2557406839380664, + 0.2562747828163765, + 0.25653555744366946, + 0.2566430509401283, + 0.2566706526738519, + 0.2566430509401283, + 0.25653555744366946, + 0.2562747828163765, + 0.2557406839380664, + 0.25477004091850136, + 0.2531614457800734, + 0.2506818889186662, + 0.24707500803079696, + 0.2420710146043941, + 0.23539823538075702, + 0.22679610352037188, + 0.21602931256266372, + 0.20290271423033404, + 0.18727640924644018, + 0.16908036038891633, + 0.14832776112580212, + 0.12512633286074154, + 0.09968670899986165, + 0.07232710218505171, + 0.043473546354522816, + 0.013655158230898757, + -0.016505930263581485, + -0.046310064114579955, + -0.0750007897964791, + -0.10179031338845618, + -0.1258888846262905, + -0.14653700801271363, + -0.16303912773542587, + -0.1747972342928682, + -0.18134271385500067, + -0.18236471957976835, + -0.17773339606034183, + -0.16751643729146143, + -0.15198770280837584, + -0.1316269478872783, + -0.10711012813756442, + -0.07929019757294747, + -0.04916880920228074, + -0.017859822184363938 + ], + [ + 0.037104384846577534, + 0.007233082355737275, + -0.023527608249201665, + -0.054043516875550875, + -0.08321475815193494, + -0.11001880232017779, + -0.13354819579908725, + -0.15304146672549196, + -0.167906160972842, + -0.17773339606034183, + -0.18230376872794093, + -0.18158488243001691, + -0.17572115154133375, + -0.16501687105976595, + -0.1499137997580331, + -0.13096468174943518, + -0.10880422217787396, + -0.08411903827788304, + -0.05761803324395176, + -0.030004497243790427, + -0.001951040868825416, + 0.025921773001301992, + 0.05306249567952219, + 0.07900122348247962, + 0.10335731863015635, + 0.1258425822940911, + 0.14626024334832619, + 0.16450028494360933, + 0.18053174205108255, + 0.1943926655354523, + 0.2061784643801796, + 0.21602931256266372, + 0.2241172482256385, + 0.23063350923189954, + 0.23577655069724138, + 0.23974108638511749, + 0.242708395806646, + 0.24483804991090943, + 0.24626113579560338, + 0.24707500803079696, + 0.24733956165584545, + 0.24707500803079696, + 0.24626113579560338, + 0.24483804991090943, + 0.242708395806646, + 0.23974108638511749, + 0.23577655069724138, + 0.23063350923189954, + 0.2241172482256385, + 0.21602931256266372, + 0.2061784643801796, + 0.1943926655354523, + 0.18053174205108255, + 0.16450028494360933, + 0.14626024334832619, + 0.1258425822940911, + 0.10335731863015635, + 0.07900122348247962, + 0.05306249567952219, + 0.025921773001301992, + -0.001951040868825416, + -0.030004497243790427, + -0.05761803324395176, + -0.08411903827788304, + -0.10880422217787396, + -0.13096468174943518, + -0.1499137997580331, + -0.16501687105976595, + -0.17572115154133375, + -0.18158488243001691, + -0.18230376872794093, + -0.17773339606034183, + -0.167906160972842, + -0.15304146672549196, + -0.13354819579908725, + -0.11001880232017779, + -0.08321475815193494, + -0.054043516875550875, + -0.023527608249201665, + 0.007233082355737275 + ], + [ + 0.059725017515438364, + 0.03197958453286062, + 0.0025207381574719806, + -0.027588123185645037, + -0.0572857273340844, + -0.08555491563889543, + -0.1114606806231028, + -0.13418273806183595, + -0.15304146672549196, + -0.16751643729146143, + -0.17725715646546372, + -0.18208605074549258, + -0.18199408570471504, + -0.17712974307464055, + -0.16778234479339135, + -0.1543609103022869, + -0.13736985507049018, + -0.11738288358628372, + -0.0950164022704569, + -0.07090368426500879, + -0.045670869380806056, + -0.019915691575644292, + 0.0058103924762656495, + 0.031016232090896562, + 0.05528095770522729, + 0.07825990831739421, + 0.09968670899986165, + 0.11937185506223688, + 0.13719827990417027, + 0.15311446345017118, + 0.16712567793535366, + 0.1792839709402817, + 0.18967745729212915, + 0.19841943861188654, + 0.20563779959612533, + 0.21146505144444128, + 0.21602931256266372, + 0.21944644111666822, + 0.22181346801290225, + 0.2232034254780841, + 0.22366162672468853, + 0.2232034254780841, + 0.22181346801290225, + 0.21944644111666822, + 0.21602931256266372, + 0.21146505144444128, + 0.20563779959612533, + 0.19841943861188654, + 0.18967745729212915, + 0.1792839709402817, + 0.16712567793535366, + 0.15311446345017118, + 0.13719827990417027, + 0.11937185506223688, + 0.09968670899986165, + 0.07825990831739421, + 0.05528095770522729, + 0.031016232090896562, + 0.0058103924762656495, + -0.019915691575644292, + -0.045670869380806056, + -0.07090368426500879, + -0.0950164022704569, + -0.11738288358628372, + -0.13736985507049018, + -0.1543609103022869, + -0.16778234479339135, + -0.17712974307464055, + -0.18199408570471504, + -0.18208605074549258, + -0.17725715646546372, + -0.16751643729146143, + -0.15304146672549196, + -0.13418273806183595, + -0.1114606806231028, + -0.08555491563889543, + -0.0572857273340844, + -0.027588123185645037, + 0.0025207381574719806, + 0.03197958453286062 + ], + [ + 0.08069235790121831, + 0.05570574218106777, + 0.028270310898122826, + -0.0006409754282528475, + -0.03002807965783915, + -0.05890402451081101, + -0.08633239590937543, + -0.1114606806231028, + -0.13354819579908725, + -0.15198770280837584, + -0.16632015713858264, + -0.17624240938958516, + -0.18160802037610754, + -0.18242166855756492, + -0.1788278960809016, + -0.17109514979541934, + -0.15959621882048483, + -0.14478624788034108, + -0.1271795169340972, + -0.10732612754693129, + -0.0857896329957062, + -0.0631265026963309, + -0.039868134180728126, + -0.016505930263581485, + 0.0065202421682302655, + 0.02883009042098063, + 0.05010748884225075, + 0.07010183827093616, + 0.08862652853638416, + 0.10555493165712146, + 0.12081441070397907, + 0.13437885433763305, + 0.14626024334832619, + 0.15649972810645998, + 0.16515865057394133, + 0.17230988766358785, + 0.17802983029511174, + 0.18239124981424537, + 0.18545724476618586, + 0.18727640924644018, + 0.18787932061729182, + 0.18727640924644018, + 0.18545724476618586, + 0.18239124981424537, + 0.17802983029511174, + 0.17230988766358785, + 0.16515865057394133, + 0.15649972810645998, + 0.14626024334832619, + 0.13437885433763305, + 0.12081441070397907, + 0.10555493165712146, + 0.08862652853638416, + 0.07010183827093616, + 0.05010748884225075, + 0.02883009042098063, + 0.0065202421682302655, + -0.016505930263581485, + -0.039868134180728126, + -0.0631265026963309, + -0.0857896329957062, + -0.10732612754693129, + -0.1271795169340972, + -0.14478624788034108, + -0.15959621882048483, + -0.17109514979541934, + -0.1788278960809016, + -0.18242166855756492, + -0.18160802037610754, + -0.17624240938958516, + -0.16632015713858264, + -0.15198770280837584, + -0.13354819579908725, + -0.1114606806231028, + -0.08633239590937543, + -0.05890402451081101, + -0.03002807965783915, + -0.0006409754282528475, + 0.028270310898122826, + 0.05570574218106777 + ], + [ + 0.0993958462307399, + 0.07773008237271903, + 0.05298490441364873, + 0.026026147564044762, + -0.0022274559793407315, + -0.030841885736018544, + -0.05890402451081101, + -0.08555491563889543, + -0.11001880232017779, + -0.1316269478872783, + -0.14983554931501694, + -0.1642373823959323, + -0.17456713788189782, + -0.1807007071005138, + -0.18264893898060253, + -0.18054660691367944, + -0.17463748569481502, + -0.16525654180237792, + -0.1528102839666787, + -0.1377563081818195, + -0.12058300781296416, + -0.10179031338845618, + -0.08187218787401292, + -0.061301442485772274, + -0.040517266401149735, + -0.019915691575644292, + 0.0001569493213448689, + 0.019407660252202565, + 0.03759772656874239, + 0.054541276561040686, + 0.07010183827093616, + 0.08418731130237875, + 0.09674378883254962, + 0.10774865812501504, + 0.11720338291232232, + 0.12512633286074154, + 0.13154597877649798, + 0.13649472168344115, + 0.14000357308347133, + 0.14209785531573388, + 0.14279404657238684, + 0.14209785531573388, + 0.14000357308347133, + 0.13649472168344115, + 0.13154597877649798, + 0.12512633286074154, + 0.11720338291232232, + 0.10774865812501504, + 0.09674378883254962, + 0.08418731130237875, + 0.07010183827093616, + 0.054541276561040686, + 0.03759772656874239, + 0.019407660252202565, + 0.0001569493213448689, + -0.019915691575644292, + -0.040517266401149735, + -0.061301442485772274, + -0.08187218787401292, + -0.10179031338845618, + -0.12058300781296416, + -0.1377563081818195, + -0.1528102839666787, + -0.16525654180237792, + -0.17463748569481502, + -0.18054660691367944, + -0.18264893898060253, + -0.1807007071005138, + -0.17456713788189782, + -0.1642373823959323, + -0.14983554931501694, + -0.1316269478872783, + -0.11001880232017779, + -0.08555491563889543, + -0.05890402451081101, + -0.030841885736018544, + -0.0022274559793407315, + 0.026026147564044762, + 0.05298490441364873, + 0.07773008237271903 + ], + [ + 0.11526115097856116, + 0.09738828403656238, + 0.0759235678781371, + 0.05161237775613617, + 0.025275083284098894, + -0.0022274559793407315, + -0.03002807965783915, + -0.0572857273340844, + -0.08321475815193494, + -0.10711012813756442, + -0.1283676319466868, + -0.1464987033293174, + -0.16113955966514656, + -0.17205475511311313, + -0.17913546063850083, + -0.18239300622958532, + -0.18194839266053625, + -0.17801860199902664, + -0.17090060569317098, + -0.1609539875623888, + -0.14858307017251748, + -0.13421936300715656, + -0.11830504740258321, + -0.10127808535368477, + -0.08355939645450051, + -0.06554239869174844, + -0.04758506314163741, + -0.030004497243790427, + -0.013073952151520388, + 0.0029779491154211806, + 0.017966041941118966, + 0.031745840459068614, + 0.044209509361482956, + 0.05528095770522729, + 0.0649104168254659, + 0.07306884206017318, + 0.07974244535617742, + 0.08492762656935865, + 0.08862652853638416, + 0.09084339726921295, + 0.09158188560927924, + 0.09084339726921295, + 0.08862652853638416, + 0.08492762656935865, + 0.07974244535617742, + 0.07306884206017318, + 0.0649104168254659, + 0.05528095770522729, + 0.044209509361482956, + 0.031745840459068614, + 0.017966041941118966, + 0.0029779491154211806, + -0.013073952151520388, + -0.030004497243790427, + -0.04758506314163741, + -0.06554239869174844, + -0.08355939645450051, + -0.10127808535368477, + -0.11830504740258321, + -0.13421936300715656, + -0.14858307017251748, + -0.1609539875623888, + -0.17090060569317098, + -0.17801860199902664, + -0.18194839266053625, + -0.18239300622958532, + -0.17913546063850083, + -0.17205475511311313, + -0.16113955966514656, + -0.1464987033293174, + -0.1283676319466868, + -0.10711012813756442, + -0.08321475815193494, + -0.0572857273340844, + -0.03002807965783915, + -0.0022274559793407315, + 0.025275083284098894, + 0.05161237775613617, + 0.0759235678781371, + 0.09738828403656238 + ], + [ + 0.12777380562398274, + 0.11405907878471819, + 0.09636827159298987, + 0.07531659368730659, + 0.05161237775613617, + 0.026026147564044762, + -0.0006409754282528475, + -0.027588123185645037, + -0.054043516875550875, + -0.07929019757294747, + -0.10268778525178764, + -0.12368964794720452, + -0.14185512230149663, + -0.15685668268767797, + -0.16848219583369567, + -0.17663261032673944, + -0.18131560690315682, + -0.1826358700412797, + -0.18078273088932142, + -0.1760159755489718, + -0.16865061331126227, + -0.15904136091487175, + -0.14756752732225356, + -0.13461888616197776, + -0.12058300781296416, + -0.10583439818051152, + -0.0907256642328181, + -0.07558080422426758, + -0.060690608986011814, + -0.046310064114579955, + -0.032657564269347995, + -0.019915691575644292, + -0.00823327044894154, + 0.0022716100207446164, + 0.011507919583092052, + 0.019407660252202565, + 0.025921773001301992, + 0.031016232090896562, + 0.03466854669458865, + 0.03686485131708162, + 0.03759772656874239, + 0.03686485131708162, + 0.03466854669458865, + 0.031016232090896562, + 0.025921773001301992, + 0.019407660252202565, + 0.011507919583092052, + 0.0022716100207446164, + -0.00823327044894154, + -0.019915691575644292, + -0.032657564269347995, + -0.046310064114579955, + -0.060690608986011814, + -0.07558080422426758, + -0.0907256642328181, + -0.10583439818051152, + -0.12058300781296416, + -0.13461888616197776, + -0.14756752732225356, + -0.15904136091487175, + -0.16865061331126227, + -0.1760159755489718, + -0.18078273088932142, + -0.1826358700412797, + -0.18131560690315682, + -0.17663261032673944, + -0.16848219583369567, + -0.15685668268767797, + -0.14185512230149663, + -0.12368964794720452, + -0.10268778525178764, + -0.07929019757294747, + -0.054043516875550875, + -0.027588123185645037, + -0.0006409754282528475, + 0.026026147564044762, + 0.05161237775613617, + 0.07531659368730659, + 0.09636827159298987, + 0.11405907878471819 + ], + [ + 0.13650222610828716, + 0.12719030582037316, + 0.1136526088802527, + 0.09636827159298987, + 0.0759235678781371, + 0.05298490441364873, + 0.028270310898122826, + 0.0025207381574719806, + -0.023527608249201665, + -0.04916880920228074, + -0.07374973820785838, + -0.09668883252747353, + -0.11749065565570795, + -0.13575600794040762, + -0.1511875643863488, + -0.163591222139663, + -0.17287351607260815, + -0.17903560277058095, + -0.1821644169794075, + -0.18242166855756492, + -0.1800313728705813, + -0.1752665961050691, + -0.16843605361995675, + -0.15987112992755653, + -0.1499137997580331, + -0.13890582780165694, + -0.1271795169340972, + -0.11505016730310495, + -0.10281030706494565, + -0.0907256642328181, + -0.07903277128303789, + -0.06793803188546253, + -0.05761803324395176, + -0.04822085787410071, + -0.039868134180728126, + -0.032657564269347995, + -0.026665677985416577, + -0.021950582012676394, + -0.01855449981019833, + -0.016505930263581485, + -0.015821288518275644, + -0.016505930263581485, + -0.01855449981019833, + -0.021950582012676394, + -0.026665677985416577, + -0.032657564269347995, + -0.039868134180728126, + -0.04822085787410071, + -0.05761803324395176, + -0.06793803188546253, + -0.07903277128303789, + -0.0907256642328181, + -0.10281030706494565, + -0.11505016730310495, + -0.1271795169340972, + -0.13890582780165694, + -0.1499137997580331, + -0.15987112992755653, + -0.16843605361995675, + -0.1752665961050691, + -0.1800313728705813, + -0.18242166855756492, + -0.1821644169794075, + -0.17903560277058095, + -0.17287351607260815, + -0.163591222139663, + -0.1511875643863488, + -0.13575600794040762, + -0.11749065565570795, + -0.09668883252747353, + -0.07374973820785838, + -0.04916880920228074, + -0.023527608249201665, + 0.0025207381574719806, + 0.028270310898122826, + 0.05298490441364873, + 0.0759235678781371, + 0.09636827159298987, + 0.1136526088802527, + 0.12719030582037316 + ], + [ + 0.14111903500315878, + 0.13632396086944565, + 0.12719030582037316, + 0.11405907878471819, + 0.09738828403656238, + 0.07773008237271903, + 0.05570574218106777, + 0.03197958453286062, + 0.007233082355737275, + -0.017859822184363938, + -0.042655257000177006, + -0.06655906279410359, + -0.08904297911487404, + -0.10965701691843574, + -0.12803786284735597, + -0.14391335124448024, + -0.15710321083861073, + -0.16751643729146143, + -0.1751457556394694, + -0.1800597155006458, + -0.18239300622958532, + -0.18233559039097344, + -0.18012123502583363, + -0.1760159755489718, + -0.17030698199702413, + -0.16329221750830802, + -0.15527119023634725, + -0.14653700801271363, + -0.13736985507049018, + -0.12803192632998142, + -0.11876378051842666, + -0.10978201113265723, + -0.10127808535368477, + -0.09341816596346665, + -0.08634370978474622, + -0.08017262722723162, + -0.0750007897964791, + -0.07090368426500879, + -0.06793803188546253, + -0.06614321685638791, + -0.06554239869174844, + -0.06614321685638791, + -0.06793803188546253, + -0.07090368426500879, + -0.0750007897964791, + -0.08017262722723162, + -0.08634370978474622, + -0.09341816596346665, + -0.10127808535368477, + -0.10978201113265723, + -0.11876378051842666, + -0.12803192632998142, + -0.13736985507049018, + -0.14653700801271363, + -0.15527119023634725, + -0.16329221750830802, + -0.17030698199702413, + -0.1760159755489718, + -0.18012123502583363, + -0.18233559039097344, + -0.18239300622958532, + -0.1800597155006458, + -0.1751457556394694, + -0.16751643729146143, + -0.15710321083861073, + -0.14391335124448024, + -0.12803786284735597, + -0.10965701691843574, + -0.08904297911487404, + -0.06655906279410359, + -0.042655257000177006, + -0.017859822184363938, + 0.007233082355737275, + 0.03197958453286062, + 0.05570574218106777, + 0.07773008237271903, + 0.09738828403656238, + 0.11405907878471819, + 0.12719030582037316, + 0.13632396086944565 + ] + ], + "zmax": null, + "zmin": null + } + ], + "layout": { + "legend": { + "bgcolor": "#151516", + "font": { + "color": "#D9D9D9" + } + }, + "margin": { + "b": 0, + "l": 0, + "r": 0, + "t": 0 + }, + "paper_bgcolor": "#151516", + "plot_bgcolor": "#151516", + "title": "Cufflinks - Surface Plot", + "titlefont": { + "color": "#D9D9D9" + }, + "xaxis1": { + "gridcolor": "#434343", + "showgrid": true, + "tickfont": { + "color": "#C2C2C2" + }, + "title": "", + "titlefont": { + "color": "#D9D9D9" + }, + "zerolinecolor": "#666570" + }, + "yaxis1": { + "gridcolor": "#434343", + "showgrid": true, + "tickfont": { + "color": "#C2C2C2" + }, + "title": "", + "titlefont": { + "color": "#D9D9D9" + }, + "zerolinecolor": "#666570" + } + } + }, "text/html": [ - "" + "
" ], - "text/plain": [ - "" + "text/vnd.plotly.v1+html": [ + "
" ] }, - "execution_count": 30, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "cf.datagen.sinwave(10,.25).iplot(kind='surface',theme='solar',colorscale='brbg',title='Cufflinks - Surface Plot',\n", " margin=(0,0,0,0))" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.10" + "pygments_lexer": "ipython3", + "version": "3.5.2" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } diff --git a/cufflinks/datagen.py b/cufflinks/datagen.py index f912938..0e0abcc 100644 --- a/cufflinks/datagen.py +++ b/cufflinks/datagen.py @@ -299,7 +299,7 @@ def histogram(n_traces=1,n=500,mode=None): 'abc' for alphabet columns 'stocks' for random stock names """ - df=pd.DataFrame(np.random.randn(n,n_traces)+np.random.randint(-1,2), + df=pd.DataFrame(np.random.randn(n,n_traces)+np.random.randint(-2,2, n_traces), columns=getName(n_traces,mode=mode)) return df diff --git a/cufflinks/plotlytools.py b/cufflinks/plotlytools.py index 6bf8282..49f444b 100644 --- a/cufflinks/plotlytools.py +++ b/cufflinks/plotlytools.py @@ -4,6 +4,7 @@ import copy # from plotly.graph_objs import * import plotly.graph_objs as go +import plotly.figure_factory as ff from collections import defaultdict from IPython.display import display,Image from .exceptions import CufflinksError @@ -672,6 +673,7 @@ def _iplot(self,kind='scatter',data=None,layout=None,filename='',sharing=None,ti # Valid Kwargs valid_kwargs = ['color','opacity','column','columns','labels','text','world_readable','colorbar'] TRACE_KWARGS = ['hoverinfo','connectgaps'] + VIOLIN_KWARGS = ['rugplot'] HEATMAP_SURFACE_KWARGS = ['center_scale','zmin','zmax'] PIE_KWARGS=['sort','pull','hole','textposition','textinfo','linecolor','linewidth','textcolor'] OHLC_KWARGS=['up_color','down_color','open','high','low','close','volume','name','decreasing','increasing'] @@ -682,7 +684,7 @@ def _iplot(self,kind='scatter',data=None,layout=None,filename='',sharing=None,ti 'error_width','error_opacity'] EXPORT_KWARGS=['display_image','scale'] kwargs_list = [tools.__LAYOUT_KWARGS,TRACE_KWARGS, - OHLC_KWARGS,PIE_KWARGS,HEATMAP_SURFACE_KWARGS,SUBPLOT_KWARGS,GEO_KWARGS,ERROR_KWARGS,EXPORT_KWARGS] + OHLC_KWARGS,VIOLIN_KWARGS,PIE_KWARGS,HEATMAP_SURFACE_KWARGS,SUBPLOT_KWARGS,GEO_KWARGS,ERROR_KWARGS,EXPORT_KWARGS] [valid_kwargs.extend(_) for _ in kwargs_list] dict_modifiers_keys = ['line'] @@ -868,7 +870,7 @@ def get_marker(marker={}): line=go.Line(width=width)) trace=go.Scatter(x=x,y=y,marker=marker,mode='markers',text=labels) data=go.Data([trace]) - elif kind in ('box','histogram','hist'): + elif kind in ('box','histogram','hist','violin'): if isinstance(self,pd.core.series.Series): df=pd.DataFrame({self.name:self}) else: @@ -883,6 +885,20 @@ def get_marker(marker={}): if kind=='box': __=go.Box(y=df[_].values.tolist(),marker=go.Marker(color=clrs[_]),name=_, line=go.Line(width=width),boxpoints=boxpoints) + elif kind=='violin': + dimensions = dimensions if dimensions else (None, None) + kw = check_kwargs(kwargs,VIOLIN_KWARGS) + rugplot = kw.pop('rugplot', True) + figure = ff.create_violin(df.melt(), data_header='value', group_header='variable', + title=title, colors=colors, rugplot=rugplot, + width = dimensions[0], height=dimensions[1]) + if asFigure: + return figure + else: + return iplot(figure,validate=validate,sharing=sharing,filename=filename, + online=online,asImage=asImage,asUrl=asUrl,asPlot=asPlot, + dimensions=dimensions,display_image=kwargs.get('display_image',True)) + else: __=go.Histogram(x=df[_].values.tolist(),name=_, marker=go.Marker(color=clrs[_], line=go.Line(width=width)), diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..cf0348a --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +doctrees \ No newline at end of file diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..fae9340 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = Cufflinks +SOURCEDIR = source +BUILDDIR = . + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..66992af --- /dev/null +++ b/docs/README.md @@ -0,0 +1,33 @@ +# Cufflinks Documentation + +Generated using Sphinx. + +### Creating Documentation Scaffold + +We first create the configuration as outlined [here](https://gisellezeno.com/tutorials/sphinx-for-python-documentation.html). +We create a docs folder and using the configuration in this tutorial we run: + +``` +sphinx-quickstart +``` + +We then have to setup the conf.py file in /source as detailed in the above link. + +We create the .rst files which outline how the documentation is to be compiled. +From the docs folder, we run: + +``` +sphinx-apidoc -f --separate -o source/ ../cufflinks/ +``` + +### Generation of Documentation + +To generate the documentation from the .rst templates, run the following from /docs: + +``` +make html +``` + +Documentation should be generated in a folder called html! + +The "source" folder contains the templates to generate the documentation, and can be edited to customize as desired. diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo new file mode 100644 index 0000000..35f7f2c --- /dev/null +++ b/docs/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 9aeeea96b82e1b044d706099b086a1b0 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/html/.nojekyll b/docs/html/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/html/_modules/cufflinks/auth.html b/docs/html/_modules/cufflinks/auth.html new file mode 100644 index 0000000..62c15e5 --- /dev/null +++ b/docs/html/_modules/cufflinks/auth.html @@ -0,0 +1,279 @@ + + + + + + + + cufflinks.auth — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.auth

+"""
+Based in Plotly's tools module
+"""
+
+
+import os
+import json
+import warnings
+from .offline import go_offline
+
+package='cufflinks'
+
+if os.path.exists(os.path.join(os.path.expanduser('~'),os.path.join('Dropbox','AppData'))):
+	AUTH_DIR=os.path.join(os.path.join(os.path.expanduser('~'),os.path.join('Dropbox','AppData')),'.'+package)
+else:
+	AUTH_DIR = os.path.join(os.path.expanduser("~"), "."+package)
+
+CREDENTIALS_FILE = os.path.join(AUTH_DIR, ".credentials")
+CONFIG_FILE = os.path.join(AUTH_DIR, ".config")
+TEST_DIR = os.path.join(os.path.expanduser("~"), ".test")
+PICKLE_FILE=os.path.join(AUTH_DIR,".pickle")
+TEST_FILE = os.path.join(AUTH_DIR, ".permission_test")
+
+_FILE_CONTENT = {
+				 CONFIG_FILE: {
+				 		"sharing" : "public",
+				 		"theme" : "pearl",
+				 		"colorscale" : "dflt",
+				 		"offline" : False,
+				 		"offline_url":'',
+				 		"offline_show_link" : True,
+				 		"offline_link_text" : 'Export to plot.ly',
+				 		"datagen_mode" : 'stocks',
+				 		"dimensions" : None,
+						"margin" : None
+						}
+				 }
+
+try:
+	os.mkdir(TEST_DIR)
+	os.rmdir(TEST_DIR)
+	if not os.path.exists(AUTH_DIR):
+		os.mkdir(AUTH_DIR)
+	f = open(TEST_FILE, 'w')
+	f.write('testing\n')
+	f.close()
+	os.remove(TEST_FILE)
+	_file_permissions = True
+except:
+	_file_permissions = False                 
+
+
+
[docs]def get_path(): + return AUTH_DIR
+ +
[docs]def get_pickle_path(): + return PICKLE_FILE
+ +
[docs]def check_file_permissions(): + return _file_permissions
+ +
[docs]def ensure_local_files(): + """ + Ensure that filesystem is setup/filled out in a valid way + """ + if _file_permissions: + if not os.path.isdir(AUTH_DIR): + os.mkdir(AUTH_DIR) + for fn in [CONFIG_FILE]: + contents = load_json_dict(fn) + for key, val in list(_FILE_CONTENT[fn].items()): + if key not in contents: + contents[key] = val + contents_keys = list(contents.keys()) + for key in contents_keys: + if key not in _FILE_CONTENT[fn]: + del contents[key] + save_json_dict(fn, contents) + else: + warnings.warn("Looks like you don't have 'read-write' permission to " + "your 'home' ('~') directory")
+ + +
[docs]def set_config_file(sharing=None,theme=None,colorscale=None,offline=None, + offline_url=None,offline_show_link=None,offline_link_text=None, + datagen_mode=None,**kwargs): + """ + Set the keyword-value pairs in `~/.config`. + + sharing : string + Sets the sharing level permission + public - anyone can see this chart + private - only you can see this chart + secret - only people with the link can see the chart + theme : string + Sets the default theme + See cufflinks.getThemes() for available themes + colorscale : string + Sets the default colorscale + See cufflinks.scales() + offline : bool + If true then the charts are rendered + locally. + offline_show_link : bool + If true then the chart will show a link to + plot.ly at the bottom right of the chart + offline_link_text : string + Text to display as link at the bottom + right of the chart + datagen_mode : string + Mode in which the data is generated + by the datagen module + stocks : random stock names are used for the index + abc : alphabet values are used for the index + dimensions : tuple + Sets the default (width,height) of the chart + margin : dict or tuple + Dictionary (l,r,b,t) or + Tuple containing the left, + right, bottom and top margins + """ + if not _file_permissions: + raise Exception("You don't have proper file permissions " + "to run this function.") + valid_kwargs=['world_readable','dimensions','margin'] + for key in list(kwargs.keys()): + if key not in valid_kwargs: + raise Exception("Invalid keyword : '{0}'".format(key)) + if all(['world_readable' in kwargs,sharing is None]): + sharing=kwargs['world_readable'] + if isinstance(sharing,bool): + if sharing: + sharing='public' + else: + sharing='private' + config = get_config_file() + if sharing is not None: + config['sharing'] = sharing + if theme: + config['theme']=theme + if colorscale: + config['colorscale']=colorscale + if offline is not None: + config['offline']=offline + if offline: + go_offline() + if datagen_mode: + config['datagen_mode']=datagen_mode + if offline_url: + config['offline_url']=offline_url + if offline_show_link is not None: + config['offline_show_link']=offline_show_link + if offline_link_text: + config['offline_link_text']=offline_link_text + for _ in valid_kwargs: + if _ in kwargs: + config[_]=kwargs[_] + save_json_dict(CONFIG_FILE, config) + ensure_local_files()
+ + +
[docs]def get_config_file(*args): + """ + Return specified args from `~/.confg`. as dict. + Returns all if no arguments are specified. + + Example: + get_config_file('sharing') + + """ + if _file_permissions: + ensure_local_files() + return load_json_dict(CONFIG_FILE, *args) + else: + return _FILE_CONTENT[CONFIG_FILE]
+ + +
[docs]def load_json_dict(filename, *args): + """Checks if file exists. Returns {} if something fails.""" + data = {} + if os.path.exists(filename): + with open(filename, "r") as f: + try: + data = json.load(f) + if not isinstance(data, dict): + data = {} + except: + pass + if args: + return {key: data[key] for key in args if key in data} + return data
+ + +
[docs]def save_json_dict(filename, json_dict): + """Will error if filename is not appropriate, but it's checked elsewhere. + """ + if isinstance(json_dict, dict): + with open(filename, "w") as f: + f.write(json.dumps(json_dict, indent=4)) + else: + raise TypeError("json_dict was not a dictionay. couldn't save.")
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/colors.html b/docs/html/_modules/cufflinks/colors.html new file mode 100644 index 0000000..53d9ba7 --- /dev/null +++ b/docs/html/_modules/cufflinks/colors.html @@ -0,0 +1,820 @@ + + + + + + + + cufflinks.colors — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.colors

+##
+# Special thanks to @krey for the python3 support
+##
+
+import numpy as np
+import colorsys
+import colorlover as cl
+import operator
+import copy
+
+from collections import deque
+from six import string_types
+from IPython.display import HTML, display
+
+from . import themes
+from .utils import inverseDict
+from .auth import get_config_file
+
+
+
[docs]class CufflinksError(Exception): + pass
+ + +
[docs]def to_rgba(color, alpha): + """ + Converts from hex|rgb to rgba + + Parameters: + ----------- + color : string + Color representation on hex or rgb + alpha : float + Value from 0 to 1.0 that represents the + alpha value. + + Example: + to_rgba('#E1E5ED',0.6) + to_rgba('#f03',0.7) + to_rgba('rgb(23,23,23)',.5) + """ + if type(color) == tuple: + color, alpha = color + color = color.lower() + if 'rgba' in color: + cl = list(eval(color.replace('rgba', ''))) + if alpha: + cl[3] = alpha + return 'rgba' + str(tuple(cl)) + elif 'rgb' in color: + r, g, b = eval(color.replace('rgb', '')) + return 'rgba' + str((r, g, b, alpha)) + else: + return to_rgba(hex_to_rgb(color), alpha)
+ + +
[docs]def hex_to_rgb(color): + """ + Converts from hex to rgb + + Parameters: + ----------- + color : string + Color representation on hex or rgb + + Example: + hex_to_rgb('#E1E5ED') + hex_to_rgb('#f03') + """ + color = normalize(color) + color = color[1:] + # return 'rgb'+str(tuple(ord(c) for c in color.decode('hex'))) + return 'rgb' + str((int(color[0:2], base=16), int(color[2:4], base=16), int(color[4:6], base=16)))
+ + +
[docs]def normalize(color): + """ + Returns an hex color + + Parameters: + ----------- + color : string + Color representation in rgba|rgb|hex + + Example: + normalize('#f03') + """ + if type(color) == tuple: + color = to_rgba(*color) + if 'rgba' in color: + return rgb_to_hex(rgba_to_rgb(color)) + elif 'rgb' in color: + return rgb_to_hex(color) + elif '#' in color: + if len(color) == 7: + return color + else: + color = color[1:] + return '#' + ''.join([x * 2 for x in list(color)]) + else: + try: + return normalize(cnames[color.lower()]) + except: + raise CufflinksError('Not a valid color: ' + color)
+ + +
[docs]def rgb_to_hex(color): + """ + Converts from rgb to hex + + Parameters: + ----------- + color : string + Color representation on hex or rgb + + Example: + rgb_to_hex('rgb(23,25,24)') + """ + rgb = eval(color.replace('rgb', '')) + # return '#'+''.join(map(chr, rgb)).encode('hex') + return '#' + ''.join(['{0:02x}'.format(x).upper() for x in rgb])
+ + +
[docs]def rgba_to_rgb(color, bg='rgb(255,255,255)'): + """ + Converts from rgba to rgb + + Parameters: + ----------- + color : string + Color representation in rgba + bg : string + Color representation in rgb + + Example: + rgba_to_rgb('rgb(23,25,24,.4)'' + """ + def c_tup(c): + return eval(c[c.find('('):]) + color = c_tup(color) + bg = hex_to_rgb(normalize(bg)) + bg = c_tup(bg) + a = color[3] + r = [int((1 - a) * bg[i] + a * color[i]) for i in range(3)] + return 'rgb' + str(tuple(r))
+ + +
[docs]def hex_to_hsv(color): + """ + Converts from hex to hsv + + Parameters: + ----------- + color : string + Color representation on color + + Example: + hex_to_hsv('#ff9933') + """ + color = normalize(color) + color = color[1:] + # color=tuple(ord(c)/255.0 for c in color.decode('hex')) + color = (int(color[0:2], base=16) / 255.0, int(color[2:4], + base=16) / 255.0, int(color[4:6], base=16) / 255.0) + return colorsys.rgb_to_hsv(*color)
+ + +
[docs]def color_range(color, N=20): + """ + Generates a scale of colours from a base colour + + Parameters: + ----------- + color : string + Color representation in hex + N : int + number of colours to generate + + Example: + color_range('#ff9933',20) + """ + color = normalize(color) + org = color + color = hex_to_hsv(color) + HSV_tuples = [(color[0], x, color[2]) for x in np.arange(0, 1, 2.0 / N)] + HSV_tuples.extend([(color[0], color[1], x) + for x in np.arange(0, 1, 2.0 / N)]) + hex_out = [] + for c in HSV_tuples: + c = colorsys.hsv_to_rgb(*c) + c = [int(_ * 255) for _ in c] + # hex_out.append("#"+"".join([chr(x).encode('hex') for x in c])) + hex_out.append("#" + "".join(['{0:02x}'.format(x) for x in c])) + if org not in hex_out: + hex_out.append(org) + hex_out.sort() + return hex_out
+ + +
[docs]def color_table(color, N=1, sort=False, sort_values=False, inline=False, as_html=False): + """ + Generates a colour table + + Parameters: + ----------- + color : string | list | dict + Color representation in rgba|rgb|hex + If a list of colors is passed then these + are displayed in a table + N : int + number of colours to generate + When color is not a list then it generaes + a range of N colors + sort : bool + if True then items are sorted + sort_values : bool + if True then items are sorted by color values. + Only applies if color is a dictionary + inline : bool + if True it returns single line color blocks + as_html : bool + if True it returns the HTML code + + Example: + color_table('#ff9933') + color_table(cufflinks.cnames) + color_table(['pink','salmon','yellow']) + Note: + This function only works in iPython Notebook + """ + if isinstance(color, list): + c_ = '' + rgb_tup = [normalize(c) for c in color] + if sort: + rgb_tup.sort() + elif isinstance(color, dict): + c_ = '' + items = [(k, normalize(v), hex_to_hsv(normalize(v))) + for k, v in list(color.items())] + if sort_values: + items = sorted(items, key=operator.itemgetter(2)) + elif sort: + items = sorted(items, key=operator.itemgetter(0)) + rgb_tup = [(k, v) for k, v, _ in items] + else: + c_ = normalize(color) + if N > 1: + rgb_tup = np.array(color_range(c_, N))[::-1] + else: + rgb_tup = [c_] + + def _color(c): + if hex_to_hsv(c)[2] < .5: + color = "#ffffff" + shadow = '0 1px 0 #000' + else: + color = "#000000" + shadow = '0 1px 0 rgba(255,255,255,0.6)' + if c == c_: + border = " border: 1px solid #ffffff;" + else: + border = '' + return color, shadow, border + + s = '<ul style="list-style-type: none;">' if not inline else '' + for c in rgb_tup: + if isinstance(c, tuple): + k, c = c + k += ' : ' + else: + k = '' + if inline: + s += '<div style="background-color:{0};height:20px;width:20px;display:inline-block;"></div>'.format( + c) + else: + color, shadow, border = _color(c) + s += """<li style="text-align:center;""" + border + """line-height:30px;background-color:""" + c + """;"> + <span style=" text-shadow:""" + shadow + """; color:""" + color + """;">""" + k + c.upper() + """</span> + </li>""" + s += '</ul>' if not inline else '' + if as_html: + return s + return display(HTML(s))
+ + +
[docs]def colorgen(colors=None, n=None, scale=None, theme=None): + """ + Returns a generator with a list of colors + and gradients of those colors + + Parameters: + ----------- + colors : list(colors) + List of colors to use + + Example: + colorgen() + colorgen(['blue','red','pink']) + colorgen(['#f03','rgb(23,25,25)']) + """ + step = .1 + if not colors: + if not scale: + if not theme: + scale = get_config_file()['colorscale'] + else: + scale = themes.THEMES[theme]['colorscale'] + colors = get_scales(scale) + dq = deque(colors) + if n: + step = len(dq) * 0.8 / n if len(dq) * 8 < n else .1 + for i in np.arange(.2, 1, step): + for y in dq: + yield to_rgba(y, 1 - i + .2) + dq.rotate(1)
+ +# NEW STUFF + + +# Color Names +# --------------------------------- + + +cnames = {'aliceblue': '#F0F8FF', + 'antiquewhite': '#FAEBD7', + 'aqua': '#00FFFF', + 'aquamarine': '#7FFFD4', + 'azure': '#F0FFFF', + 'beige': '#F5F5DC', + 'bisque': '#FFE4C4', + 'black': '#000000', + 'blanchedalmond': '#FFEBCD', + 'blue': '#3780bf', + 'bluegray': '#565656', + 'bluepurple': '#6432AB', + 'blueviolet': '#8A2BE2', + 'brick': '#E24A33', + 'brightblue': '#0000FF', + 'brightred': '#FF0000', + 'brown': '#A52A2A', + 'burlywood': '#DEB887', + 'cadetblue': '#5F9EA0', + 'charcoal': '#151516', + 'chartreuse': '#7FFF00', + 'chocolate': '#D2691E', + 'coral': '#FF7F50', + 'cornflowerblue': '#6495ED', + 'cornsilk': '#FFF8DC', + 'crimson': '#DC143C', + 'cyan': '#00FFFF', + 'darkblue': '#00008B', + 'darkcyan': '#008B8B', + 'darkgoldenrod': '#B8860B', + 'darkgray': '#A9A9A9', + 'darkgreen': '#006400', + 'darkgrey': '#A9A9A9', + 'darkkhaki': '#BDB76B', + 'darkmagenta': '#8B008B', + 'darkolivegreen': '#556B2F', + 'darkorange': '#FF8C00', + 'darkorchid': '#9932CC', + 'darkred': '#8B0000', + 'darksalmon': '#E9967A', + 'darkseagreen': '#8FBC8F', + 'darkslateblue': '#483D8B', + 'darkslategray': '#2F4F4F', + 'darkslategrey': '#2F4F4F', + 'darkturquoise': '#00CED1', + 'darkviolet': '#9400D3', + 'deeppink': '#FF1493', + 'deepskyblue': '#00BFFF', + 'dimgray': '#696969', + 'dimgrey': '#696969', + 'dodgerblue': '#1E90FF', + 'firebrick': '#B22222', + 'floralwhite': '#FFFAF0', + 'forestgreen': '#228B22', + 'fuchsia': '#FF00FF', + 'gainsboro': '#DCDCDC', + 'ghostwhite': '#F8F8FF', + 'gold': '#FFD700', + 'goldenrod': '#DAA520', + 'grassgreen': '#32ab60', + 'gray': '#808080', + 'green': '#008000', + 'greenyellow': '#ADFF2F', + 'grey': '#808080', + 'grey01': '#0A0A0A', + 'grey02': '#151516', + 'grey03': '#1A1A1C', + 'grey04': '#1E1E21', + 'grey05': '#252529', + 'grey06': '#36363C', + 'grey07': '#3C3C42', + 'grey08': '#434343', + 'grey09': '#666570', + 'grey10': '#666666', + 'grey11': '#8C8C8C', + 'grey12': '#C2C2C2', + 'grey13': '#E2E2E2', + 'grey14': '#E5E5E5', + 'honeydew': '#F0FFF0', + 'hotpink': '#FF69B4', + 'indianred': '#CD5C5C', + 'indigo': '#4B0082', + 'ivory': '#FFFFF0', + 'java': '#17BECF', + 'khaki': '#F0E68C', + 'lavender': '#E6E6FA', + 'lavenderblush': '#FFF0F5', + 'lawngreen': '#7CFC00', + 'lemonchiffon': '#FFFACD', + 'lightpink2': '#fccde5', + 'lightpurple': '#bc80bd', + 'lightblue': '#ADD8E6', + 'lightcoral': '#F08080', + 'lightcyan': '#E0FFFF', + 'lightgoldenrodyellow': '#FAFAD2', + 'lightgray': '#D3D3D3', + 'lightgreen': '#90EE90', + 'lightgrey': '#D3D3D3', + 'lightivory': '#F6F6F6', + 'lightpink': '#FFB6C1', + 'lightsalmon': '#FFA07A', + 'lightseagreen': '#20B2AA', + 'lightskyblue': '#87CEFA', + 'lightslategray': '#778899', + 'lightslategrey': '#778899', + 'lightsteelblue': '#B0C4DE', + 'lightteal': '#8dd3c7', + 'lightyellow': '#FFFFE0', + 'lightblue2': '#80b1d3', + 'lightviolet': '#8476CA', + 'lime': '#00FF00', + 'lime2': '#8EBA42', + 'limegreen': '#32CD32', + 'linen': '#FAF0E6', + 'magenta': '#FF00FF', + 'maroon': '#800000', + 'mediumaquamarine': '#66CDAA', + 'mediumblue': '#0000CD', + 'mediumgray': '#656565', + 'mediumorchid': '#BA55D3', + 'mediumpurple': '#9370DB', + 'mediumseagreen': '#3CB371', + 'mediumslateblue': '#7B68EE', + 'mediumspringgreen': '#00FA9A', + 'mediumturquoise': '#48D1CC', + 'mediumvioletred': '#C71585', + 'midnightblue': '#191970', + 'mintcream': '#F5FFFA', + 'mistyrose': '#FFE4E1', + 'moccasin': '#FFE4B5', + 'mustard': '#FBC15E', + 'navajowhite': '#FFDEAD', + 'navy': '#000080', + 'oldlace': '#FDF5E6', + 'olive': '#808000', + 'olivedrab': '#6B8E23', + 'orange': '#ff9933', + 'orangered': '#FF4500', + 'orchid': '#DA70D6', + 'palegoldenrod': '#EEE8AA', + 'palegreen': '#98FB98', + 'paleolive': '#b3de69', + 'paleturquoise': '#AFEEEE', + 'palevioletred': '#DB7093', + 'papayawhip': '#FFEFD5', + 'peachpuff': '#FFDAB9', + 'pearl': '#D9D9D9', + 'pearl02': '#F5F6F9', + 'pearl03': '#E1E5ED', + 'pearl04': '#9499A3', + 'pearl05': '#6F7B8B', + 'pearl06': '#4D5663', + 'peru': '#CD853F', + 'pink': '#ff0088', + 'pinksalmon': '#FFB5B8', + 'plum': '#DDA0DD', + 'polar': '#ACAFB5', + 'polarblue': '#0080F0', + 'polarbluelight': '#46A0F0', + 'polarcyan': '#ADFCFC', + 'polardark': '#484848', + 'polardiv': '#D5D8DB', + 'polardust': '#F2F3F7', + 'polargrey': '#505050', + 'polargreen': '#309054', + 'polarorange': '#EE7600', + 'polarpurple': '#6262DE', + 'polarred': '#D94255', + 'powderblue': '#B0E0E6', + 'purple': '#800080', + 'red': '#db4052', + 'rose': '#FFC0CB', + 'rosybrown': '#BC8F8F', + 'royalblue': '#4169E1', + 'saddlebrown': '#8B4513', + 'salmon': '#fb8072', + 'sandybrown': '#FAA460', + 'seaborn': '#EAE7E4', + 'seagreen': '#2E8B57', + 'seashell': '#FFF5EE', + 'sienna': '#A0522D', + 'silver': '#C0C0C0', + 'skyblue': '#87CEEB', + 'slateblue': '#6A5ACD', + 'slategray': '#708090', + 'slategrey': '#708090', + 'smurf': '#3E6FB0', + 'snow': '#FFFAFA', + 'springgreen': '#00FF7F', + 'steelblue': '#4682B4', + 'tan': '#D2B48C', + 'teal': '#008080', + 'thistle': '#D8BFD8', + 'tomato': '#FF6347', + 'turquoise': '#40E0D0', + 'violet': '#EE82EE', + 'wheat': '#F5DEB3', + 'white': '#FFFFFF', + 'whitesmoke': '#F5F5F5', + 'yellow': '#ffff33', + 'yellowgreen': '#9ACD32', + "henanigans_bg": "#242424", + "henanigans_blue1": "#5F95DE", + "henanigans_blue2": "#93B6E6", + "henanigans_cyan1": "#7EC4CF", + "henanigans_cyan2": "#B6ECF3", + "henanigans_dark1": "#040404", + "henanigans_dark2": "#141414", + "henanigans_dialog1": "#444459", + "henanigans_dialog2": "#5D5D7A", + "henanigans_green1": "#8BD155", + "henanigans_green2": "#A0D17B", + "henanigans_grey1": "#343434", + "henanigans_grey2": "#444444", + "henanigans_light1": "#A4A4A4", + "henanigans_light2": "#F4F4F4", + "henanigans_orange1": "#EB9E58", + "henanigans_orange2": "#EBB483", + "henanigans_purple1": "#C98FDE", + "henanigans_purple2": "#AC92DE", + "henanigans_red1": "#F77E70", + "henanigans_red2": "#DE958E", + "henanigans_yellow1": "#E8EA7E", + "henanigans_yellow2": "#E9EABE" + } + +# Custom Color Scales +# --------------------------------- + +_custom_scales = { + 'qual': { + # dflt only exists to keep backward compatibility after issue 91 + 'dflt': ['orange', 'blue', 'grassgreen', 'purple', 'red', 'teal', 'yellow', 'olive', 'salmon', 'lightblue2'], + 'original': ['orange', 'blue', 'grassgreen', 'purple', 'red', 'teal', 'yellow', 'olive', 'salmon', 'lightblue2'], + 'ggplot': ['brick', 'smurf', 'lightviolet', 'mediumgray', 'mustard', 'lime2', 'pinksalmon'], + 'polar': ['polarblue', 'polarorange', 'polargreen', 'polarpurple', 'polarred', 'polarcyan', 'polarbluelight'] + }, + 'div': { + + }, + 'seq': { + + } + +} + + +# --------------------------------------------------------------- +# The below functions are based in colorlover by Jack Parmer +# https://github.com/jackparmer/colorlover/ +# --------------------------------------------------------------- + + +_scales = None +_scales_names = None + + +
[docs]def interp(colors, N): + def _interp(colors, N): + try: + return cl.interp(colors, N) + except: + return _interp(colors, N + 1) + c = _interp(colors, N) + return list(map(rgb_to_hex, cl.to_rgb(c)))
+ + +
[docs]def scales(scale=None): + """ + Displays a color scale (HTML) + + Parameters: + ----------- + scale : str + Color scale name + If no scale name is provided then all scales are returned + (max number for each scale) + If scale='all' then all scale combinations available + will be returned + + Example: + scales('accent') + scales('all') + scales() + """ + if scale: + if scale == 'all': + display(HTML(cl.to_html(_scales))) + else: + display(HTML(cl.to_html(get_scales(scale)))) + else: + s = '' + keys = list(_scales_names.keys()) + keys.sort() + for k in keys: + scale = get_scales(k) + s += '<div style="display:inline-block;padding:10px;"><div>{0}</div>{1}</div>'.format( + k, cl.to_html(scale)) + display(HTML(s))
+ +# Scales Dictionary +# --------------------------------- + + +
[docs]def reset_scales(): + global _scales + global _scales_names + scale_cpy = cl.scales.copy() + + # Add custom scales + for k, v in list(_custom_scales.items()): + if v: + for k_, v_ in list(v.items()): + if str(len(v_)) not in scale_cpy: + scale_cpy[str(len(v_))] = {} + scale_cpy[str(len(v_))][k][k_] = [ + hex_to_rgb(normalize(_)) for _ in v_] + + # Dictionary by Type > Name > N + _scales = {} + for k, v in list(scale_cpy.items()): + for k_, v_ in list(v.items()): + if k_ not in _scales: + _scales[k_] = {} + for k__, v__ in list(v_.items()): + if k__ not in _scales[k_]: + _scales[k_][k__] = {} + _scales[k_][k__][k] = v__ + + # Dictionary by Name > N + _scales_names = {} + for k, v in list(scale_cpy.items()): + for k_, v_ in list(v.items()): + for k__, v__ in list(v_.items()): + k__ = k__.lower() + if k__ not in _scales_names: + _scales_names[k__] = {} + _scales_names[k__][k] = v__
+ + +
[docs]def get_scales(scale=None, n=None): + """ + Returns a color scale + + Parameters: + ----------- + scale : str + Color scale name + If the color name is preceded by a minus (-) + then the scale is inversed + n : int + Number of colors + If n < number of colors available for a given scale then + the minimum number will be returned + If n > number of colors available for a given scale then + the maximum number will be returned + + Example: + get_scales('accent',8) + get_scales('pastel1') + """ + if scale: + is_reverse = False + if scale[0] == '-': + scale = scale[1:] + is_reverse = True + d = copy.deepcopy(_scales_names[scale.lower()]) + keys = list(map(int, list(d.keys()))) + cs = None + if n: + if n in keys: + cs = d[str(n)] + elif n < min(keys): + cs = d[str(min(keys))] + if cs is None: + cs = d[str(max(keys))] + if is_reverse: + cs.reverse() + return cs + else: + d = {} + for k, v in list(_scales_names.items()): + if isinstance(v, dict): + keys = list(map(int, list(v.keys()))) + d[k] = v[str(max(keys))] + else: + d[k] = v + return d
+ + +
[docs]def get_colorscale(scale): + """ + Returns a color scale to be used for a plotly figure + + Parameters: + ----------- + scale : str or list + Color scale name + If the color name is preceded by a minus (-) + then the scale is inversed. + Also accepts a list of colors (rgb,rgba,hex) + + Example: + get_colorscale('accent') + get_colorscale(['rgb(127,201,127)','rgb(190,174,212)','rgb(253,192,134)']) + """ + + if type(scale) in string_types: + scale = get_scales(scale) + else: + if type(scale) != list: + raise Exception( + "scale needs to be either a scale name or list of colors") + + cs = [[1.0 * c / (len(scale) - 1), scale[c]] for c in range(len(scale))] + cs.sort() + return cs
+ + +reset_scales() +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/datagen.html b/docs/html/_modules/cufflinks/datagen.html new file mode 100644 index 0000000..0abd040 --- /dev/null +++ b/docs/html/_modules/cufflinks/datagen.html @@ -0,0 +1,439 @@ + + + + + + + + cufflinks.datagen — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.datagen

+import os
+import string
+
+import numpy as np
+import pandas as pd
+
+from .auth import get_config_file
+from .exceptions import CufflinksError
+
+
+
[docs]def scattergeo(): + """ + Returns + """ + path=os.path.join(os.path.dirname(__file__), '../data/scattergeo.csv') + df=pd.read_csv(path) + del df['Unnamed: 0'] + df['text'] = df['airport'] + ' ' + df['city'] + ', ' + df['state'] + ' ' + 'Arrivals: ' + df['cnt'].astype(str) + df=df.rename(columns={'cnt':'z','long':'lon'}) + return df
+ +
[docs]def choropleth(): + """ + Returns + """ + path=os.path.join(os.path.dirname(__file__), '../data/choropleth.csv') + df=pd.read_csv(path) + del df['Unnamed: 0'] + df['z']=[np.random.randint(0,100) for _ in range(len(df))] + return df
+ +
[docs]def scatter3d(n_categories=5,n=10,prefix='category',mode=None): + """ + Returns a DataFrame with the required format for + a scatter3d plot + + Parameters: + ----------- + n_categories : int + Number of categories + n : int + Number of points for each trace + prefix : string + Name for each trace + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + categories=[] + for i in range(n_categories): + categories.extend([prefix+str(i+1)]*n) + return pd.DataFrame({'x':np.random.randn(n*n_categories), + 'y':np.random.randn(n*n_categories), + 'z':np.random.randn(n*n_categories), + 'text':getName(n*n_categories,mode=mode), + 'categories':categories})
+ +
[docs]def bubble3d(n_categories=5,n=10,prefix='category',mode=None): + """ + Returns a DataFrame with the required format for + a bubble3d plot + + Parameters: + ----------- + n_categories : int + Number of categories + n : int + Number of points for each trace + prefix : string + Name for each trace + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + categories=[] + for i in range(n_categories): + categories.extend([prefix+str(i+1)]*n) + return pd.DataFrame({'x':np.random.randn(n*n_categories), + 'y':np.random.randn(n*n_categories), + 'z':np.random.randn(n*n_categories), + 'size':np.random.randint(1,100,n*n_categories), + 'text':getName(n*n_categories,mode=mode), + 'categories':categories})
+ +
[docs]def bubble(n_categories=5,n=10,prefix='category',mode=None): + """ + Returns a DataFrame with the required format for + a bubble plot + + Parameters: + ----------- + n_categories : int + Number of categories + n : int + Number of points for each category + prefix : string + Name for each category + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + categories=[] + for i in range(n_categories): + categories.extend([prefix+str(i+1)]*n) + return pd.DataFrame({'x':np.random.randn(n*n_categories), + 'y':np.random.randn(n*n_categories), + 'size':np.random.randint(1,100,n*n_categories), + 'text':getName(n*n_categories,mode=mode), + 'categories':categories})
+ +
[docs]def pie(n_labels=5,mode=None): + """ + Returns a DataFrame with the required format for + a pie plot + + Parameters: + ----------- + n_labels : int + Number of labels + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + return pd.DataFrame({'values':np.random.randint(1,100,n_labels), + 'labels':getName(n_labels,mode=mode)})
+ +
[docs]def scatter(n_categories=5,n=10,prefix='category',mode=None): + """ + Returns a DataFrame with the required format for + a scatter plot + + Parameters: + ----------- + n_categories : int + Number of categories + n : int + Number of points for each category + prefix : string + Name for each category + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + categories=[] + for i in range(n_categories): + categories.extend([prefix+str(i+1)]*n) + return pd.DataFrame({'x':np.random.randn(n*n_categories), + 'y':np.random.randn(n*n_categories), + 'text':getName(n*n_categories,mode=mode), + 'categories':categories})
+ +
[docs]def heatmap(n_x=5,n_y=10): + """ + Returns a DataFrame with the required format for + a heatmap plot + + Parameters: + ----------- + n_x : int + Number of x categories + n_y : int + Number of y categories + """ + x=['x_'+str(_) for _ in range(n_x)] + y=['y_'+str(_) for _ in range(n_y)] + return pd.DataFrame(surface(n_x-1,n_y-1).values,index=x,columns=y)
+ +
[docs]def lines(n_traces=5,n=100,columns=None,dateIndex=True,mode=None): + """ + Returns a DataFrame with the required format for + a scatter (lines) plot + + Parameters: + ----------- + n_traces : int + Number of traces + n : int + Number of points for each trace + columns : [str] + List of column names + dateIndex : bool + If True it will return a datetime index + if False it will return a enumerated index + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + index=pd.date_range('1/1/15',periods=n) if dateIndex else list(range(n)) + df=pd.DataFrame(np.random.randn(n,n_traces),index=index, + columns=getName(n_traces,columns=columns,mode=mode)) + return df.cumsum()
+ +
[docs]def bars(n=3,n_categories=3,prefix='category',columns=None,mode='abc'): + """ + Returns a DataFrame with the required format for + a bar plot + + Parameters: + ----------- + n : int + Number of points for each trace + n_categories : int + Number of categories for each point + prefix : string + Name for each category + columns : [str] + List of column names + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + categories=[] + if not columns: + columns=getName(n,mode=mode) + for i in range(n_categories): + categories.extend([prefix+str(i+1)]) + data=dict([(x,np.random.randint(1,100,n_categories)) for x in columns]) + return pd.DataFrame(data,index=categories)
+ +
[docs]def ohlc(n=100): + """ + Returns a DataFrame with the required format for + a candlestick or ohlc plot + df[['open','high','low','close']] + + Parameters: + ----------- + n : int + Number of ohlc points + + """ + index=pd.date_range('1/1/15',periods=n*288,freq='5min',tz='utc') + data=np.random.randn(n*288) + data[0]=np.array([100]) + df=pd.DataFrame(data,index=index, + columns=['a']) + df=df.cumsum() + df=df.resample('1d').ohlc() + df.index=df.index.date + df.index=pd.to_datetime(df.index) + return df['a']
+ +
[docs]def ohlcv(n=100): + """ + Returns a DataFrame with the required format for + a candlestick or ohlc plot + df[['open','high','low','close','volume'] + + Parameters: + ----------- + n : int + Number of ohlc points + + """ + df=ohlc() + df['volume']=[np.random.randint(1000,10000) for _ in range(len(df))] + return df
+ +
[docs]def box(n_traces=5,n=100,mode=None): + """ + Returns a DataFrame with the required format for + a box plot + + Parameters: + ----------- + n_traces : int + Number of traces + n : int + Number of points for each trace + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + df=pd.DataFrame([np.random.chisquare(np.random.randint(2,10),n_traces) for _ in range(n)], + columns=getName(n_traces,mode=mode)) + return df
+ +
[docs]def histogram(n_traces=1,n=500,mode=None): + """ + Returns a DataFrame with the required format for + a box plot + + Parameters: + ----------- + n_traces : int + Number of traces + n : int + Number of points for each trace + mode : string + Format for each item + 'abc' for alphabet columns + 'stocks' for random stock names + """ + df=pd.DataFrame(np.random.randn(n,n_traces)+np.random.randint(-2,2, n_traces), + columns=getName(n_traces,mode=mode)) + return df
+ +
[docs]def surface(n_x=20,n_y=20): + """ + Returns a DataFrame with the required format for + a surface plot + + Parameters: + ----------- + n_x : int + Number of points along the X axis + n_y : int + Number of points along the Y axis + """ + x=[float(np.random.randint(0,100))] + for i in range(n_x): + x.append(x[:1][0]+np.random.randn()*np.random.randint(1,10)) + df=pd.DataFrame(x) + for i in range(n_y): + df[i+1]=df[i].map(lambda x:x+np.random.randn()*np.random.randint(1,10)) + return df
+ +
[docs]def sinwave(n=4,inc=.25): + """ + Returns a DataFrame with the required format for + a surface (sine wave) plot + + Parameters: + ----------- + n : int + Ranges for X and Y axis (-n,n) + n_y : int + Size of increment along the axis + """ + x=np.arange(-n,n,inc) + y=np.arange(-n,n,inc) + X,Y=np.meshgrid(x,y) + R = np.sqrt(X**2 + Y**2) + Z = np.sin(R)/(.5*R) + return pd.DataFrame(Z,index=x,columns=y)
+ +
[docs]def getName(n=1,name=3,exchange=2,columns=None,mode='abc'): + if columns: + if isinstance(columns,str): + columns=[columns] + if n != len(columns): + raise CufflinksError("Length of column names needs to be the \n" + "same length of traces") + else: + if mode is None: + mode=get_config_file()['datagen_mode'] + if mode=='abc': + columns=list(string.ascii_letters[:n]) + elif mode=='stocks': + columns=[''.join(np.random.choice(list(string.ascii_uppercase),name)) + '.' + ''.join(np.random.choice(list(string.ascii_uppercase),exchange)) for _ in range(n)] + else: + raise CufflinksError("Unknown mode: {0}".format(mode)) + return columns
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/date_tools.html b/docs/html/_modules/cufflinks/date_tools.html new file mode 100644 index 0000000..d135c57 --- /dev/null +++ b/docs/html/_modules/cufflinks/date_tools.html @@ -0,0 +1,140 @@ + + + + + + + + cufflinks.date_tools — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.date_tools

+import datetime as dt
+
+
+
[docs]def getDatefromDate(date,delta,strfmt='%Y%m%d'): + if type(date)==str: + date=stringToDate(date,strfmt) + return (date + dt.timedelta(delta)).strftime(strfmt)
+ +
[docs]def getDateFromToday(delta,strfmt='%Y%m%d'): + """ Returns a string that represents a date n numbers of days from today. + Parameters: + ----------- + delta : int + number of days + strfmt : string + format in which the date will be represented + """ + return (dt.date.today() + dt.timedelta(delta)).strftime(strfmt)
+ +
[docs]def stringToDate(stringDate,strfmt='%Y%m%d'): + """ Converts a string format date into datetime + Parameters: + ----------- + stringDate : string + date in string format + strfmt : string + format in which the input date is represented + """ + return dt.datetime.strptime(stringDate,strfmt).date()
+ +
[docs]def intToDate(intDate): + """ Converts an int format date into datetime + Parameters: + ----------- + intDate : int + date in int format + Example: + intDate(20151023) + """ + return stringToDate(str(intDate))
+ +
[docs]def dateToInt(date,strfmt='%Y%m%d'): + """ Converts a datetime date into int + Parameters: + ----------- + date : datetime + date in datetime format + strfmt : string + format in which the int date will be generated + Example: + dateToInt(dt.date(2015,10,23),'%Y') + """ + return int(date.strftime(strfmt))
+ +
[docs]def dateToString(date,strfmt='%Y%m%d'): + return dt.datetime.strftime(date,strfmt)
+ +
[docs]def stringToString(date,from_strfmt='%d%b%y',to_strfmt='%Y%m%d'): + return dt.datetime.strftime(stringToDate(date,from_strfmt),to_strfmt)
+ + + +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/exceptions.html b/docs/html/_modules/cufflinks/exceptions.html new file mode 100644 index 0000000..11fe6c9 --- /dev/null +++ b/docs/html/_modules/cufflinks/exceptions.html @@ -0,0 +1,80 @@ + + + + + + + + cufflinks.exceptions — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.exceptions

+
[docs]class CufflinksError(Exception): + pass
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/extract.html b/docs/html/_modules/cufflinks/extract.html new file mode 100644 index 0000000..ee2d496 --- /dev/null +++ b/docs/html/_modules/cufflinks/extract.html @@ -0,0 +1,147 @@ + + + + + + + + cufflinks.extract — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.extract

+import pandas as pd
+
+
+
[docs]def to_df(figure): + """ + Extracts the data from a Plotly Figure + + Parameters + ---------- + figure : plotly_figure + Figure from which data will be + extracted + + Returns a DataFrame or list of DataFrame + """ + dfs=[] + for trace in figure['data']: + if 'scatter' in trace['type']: + try: + if type(trace['x'][0])==float: + index=trace['x'] + else: + index=pd.to_datetime(trace['x']) + except: + index=trace['x'] + if 'marker' in trace: + d={} + if 'size' in trace['marker']: + size=trace['marker']['size'] + if type(size)!=list: + size=[size]*len(index) + d['size']=size + if 'text' in trace: + d['text']=trace['text'] + if 'name' in trace: + name=trace['name'] + if type(name)!=list: + name=[name]*len(index) + d['categories']=name + d['y']=trace['y'] + d['x']=trace['x'] + if 'z' in trace: + d['z']=trace['z'] + df=pd.DataFrame(d) + else: + df=pd.Series(trace['y'],index=index,name=trace['name']) + dfs.append(df) + elif trace['type'] in ('heatmap','surface'): + df=pd.DataFrame(trace['z'].transpose(),index=trace['x'],columns=trace['y']) + dfs.append(df) + elif trace['type'] in ('box','histogram'): + vals=trace['x'] if 'x' in trace else trace['y'] + df=pd.DataFrame({trace['name']:vals}) + dfs.append(df) + if max(list(map(len,dfs)))==min(list(map(len,dfs))): + if len(dfs)==1: + return dfs[0] + else: + if type(dfs[0])==pd.core.series.Series: + return pd.concat(dfs,axis=1) + if all(dfs[0].columns==dfs[1].columns): + return pd.concat(dfs,axis=0) + else: + return pd.concat(dfs,axis=1) + else: + try: + return pd.concat(dfs) + except: + return dfs
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/offline.html b/docs/html/_modules/cufflinks/offline.html new file mode 100644 index 0000000..18211eb --- /dev/null +++ b/docs/html/_modules/cufflinks/offline.html @@ -0,0 +1,106 @@ + + + + + + + + cufflinks.offline — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.offline

+import plotly.offline as py_offline
+
+### Offline Mode	
+
+
[docs]def go_offline(connected=False): + try: + py_offline.init_notebook_mode(connected) + except TypeError: + #For older versions of plotly + py_offline.init_notebook_mode() + py_offline.__PLOTLY_OFFLINE_INITIALIZED=True
+ +
[docs]def go_online(): + py_offline.__PLOTLY_OFFLINE_INITIALIZED=False
+ +
[docs]def is_offline(): + return py_offline.__PLOTLY_OFFLINE_INITIALIZED
+ +
[docs]def upgrade(url=None): + from .auth import get_config_file + if not url: + if 'http' not in get_config_file()['offline_url']: + raise Exception("No default offline URL set \n" + "Please run cf.set_config_file(offline_url=xx) to set \n" + "the default offline URL.") + else: + url=get_config_file()['offline_url'] + py_offline.download_plotlyjs(url)
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/pandastools.html b/docs/html/_modules/cufflinks/pandastools.html new file mode 100644 index 0000000..64adf80 --- /dev/null +++ b/docs/html/_modules/cufflinks/pandastools.html @@ -0,0 +1,193 @@ + + + + + + + + cufflinks.pandastools — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.pandastools

+import pandas as pd
+import re
+
+
+
+def _screen(self,include=True,**kwargs):
+	"""
+	Filters a DataFrame for columns that contain the given strings. 
+	Parameters:
+	-----------
+		include : bool
+			If False then it will exclude items that match 
+			the given filters.
+			This is the same as passing a regex ^keyword
+		kwargs : 
+			Key value pairs that indicate the column and 
+			value to screen for
+
+	Example:
+		df.screen(col1='string_to_match',col2=['string1','string2'])
+	"""
+	df=self.copy()
+	for k,v in list(kwargs.items()):
+		v=[v] if type(v)!=list else v
+		if include:
+			df=df[df[k].str.contains('|'.join(v),flags=re.IGNORECASE).fillna(False)]
+		else:
+			df=df[df[k].str.contains('|'.join(v),flags=re.IGNORECASE).fillna(False)==False]
+	return df
+
+def _swapcolumns(self):
+	"""
+	Swaps first and second columns. 
+	Useful for inverting axis when plotting. 
+
+	Example:
+		df.swapcolumns()
+
+	Returns : DataFrame
+
+	"""
+	return self.reindex_axis([self.columns[1],self.columns[0]],axis=1)
+
+
[docs]def bestfit(self): + """ + Returns a series with the bestfit values. + + Example: + Series.bestfit() + + Returns: series + The returned series contains a parameter + called 'formula' which includes the string representation + of the bestfit line. + """ + # statsmodel cannot be included on requirements.txt + # see https://github.com/scikit-learn/scikit-learn/issues/4164 + # which shares the same issue as statsmodel + try: + import statsmodels.api as sm + except: + raise Exception("statsmodels is required: " \ + "please run " \ + "pip install statsmodels" ) + + x=pd.Series(list(range(1,len(self)+1)),index=self.index) + x=sm.add_constant(x) + model=sm.OLS(self,x) + fit=model.fit() + vals=fit.params.values + best_fit=fit.fittedvalues + # the below methods have been deprecated in Pandas + # model=pd.ols(x=x,y=self,intercept=True) + # best_fit=model.y_fitted + best_fit.formula='%.2f*x+%.2f' % (vals[0],vals[1]) + return best_fit
+ +
[docs]def normalize(self,asOf=None,multiplier=100): + """ + Returns a normalized series or DataFrame + + Example: + Series.normalize() + + Returns: series of DataFrame + + Parameters: + ----------- + asOf : string + Date format + '2015-02-29' + multiplier : int + Factor by which the results will be adjusted + """ + if not asOf: + x0=self.ix[0] + else: + x0=self.ix[asOf] + return self/x0*multiplier
+ +
[docs]def read_google(url,**kwargs): + """ + Reads a google sheet + """ + if url[-1]!='/': + url+='/' + return pd.read_csv(url+'export?gid=0&format=csv',**kwargs)
+ +pd.DataFrame.screen=_screen +pd.DataFrame.swapcolumns=_swapcolumns +pd.DataFrame.normalize=normalize +pd.read_google=read_google +pd.Series.normalize=normalize +pd.Series.bestfit=bestfit + +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/plotlytools.html b/docs/html/_modules/cufflinks/plotlytools.html new file mode 100644 index 0000000..00b7540 --- /dev/null +++ b/docs/html/_modules/cufflinks/plotlytools.html @@ -0,0 +1,1720 @@ + + + + + + + + cufflinks.plotlytools — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.plotlytools

+import pandas as pd
+import plotly.plotly as py
+import time
+import copy
+# from plotly.graph_objs import *
+import plotly.graph_objs as go
+import plotly.figure_factory as ff
+from collections import defaultdict
+from IPython.display import display,Image
+from .exceptions import CufflinksError
+from .colors import normalize,get_scales,colorgen,to_rgba,get_colorscale
+from .utils import check_kwargs, deep_update, kwargs_from_keyword
+from . import tools 
+from . import offline
+from . import auth
+from . import ta
+
+
+__TA_KWARGS = ['min_period','center','freq','how','rsi_upper','rsi_lower','boll_std','fast_period',
+			   'slow_period','signal_period','initial','af','open','high','low','close']
+
+
+
[docs]def iplot_to_dict(data): + d=defaultdict(dict) + for i in data: + for k,v in list(i.items()): + d[i['name']][k]=v + return d
+ +
[docs]def dict_to_iplot(d): + l=[] + for v in list(d.values()): + l.append(v) + return go.Data(l)
+ + +def _to_iplot(self,colors=None,colorscale=None,kind='scatter',mode='lines',interpolation='linear',symbol='dot',size='12',fill=False, + width=3,dash='solid',sortbars=False,keys=False,bestfit=False,bestfit_colors=None, + mean=False,mean_colors=None,asDates=False,asTimestamp=False,text=None,**kwargs): + """ + Generates a plotly Data object + + Parameters + ---------- + colors : list or dict + {key:color} to specify the color for each column + [colors] to use the colors in the defined order + colorscale : str + Color scale name + Only valid if 'colors' is null + See cufflinks.colors.scales() for available scales + kind : string + Kind of chart + scatter + bar + mode : string + Plotting mode for scatter trace + lines + markers + lines+markers + lines+text + markers+text + lines+markers+text + interpolation : string + Positioning of the connecting lines + linear + spline + vhv + hvh + vh + hv + symbol : string + The symbol that is drawn on the plot for each marker + Valid only when mode includes markers + dot + cross + diamond + square + triangle-down + triangle-left + triangle-right + triangle-up + x + size : string or int + Size of marker + Valid only if marker in mode + fill : bool + Filled Traces + width : int + Line width + dash : string + Drawing style of lines + solid + dash + dashdot + dot + sortbars : bool + Sort bars in descending order + * Only valid when kind='bar' + keys : list of columns + List of columns to chart. + Also can be usded for custom sorting. + bestfit : boolean or list + If True then a best fit line will be generated for + all columns. + If list then a best fit line will be generated for + each key on the list. + bestfit_colors : list or dict + {key:color} to specify the color for each column + [colors] to use the colors in the defined order + asDates : bool + If true it forces truncates times from a DatetimeIndex + + """ + df=self.copy() + + if asTimestamp: + x=[_ for _ in df.index] + elif df.index.__class__.__name__ in ('PeriodIndex','DatetimeIndex'): + if asDates: + df.index=df.index.date + x=df.index.format() + elif isinstance(df.index,pd.MultiIndex): + x=['({0})'.format(','.join([str(__) for __ in _])) for _ in df.index.values] + else: + x = df.index.values + lines={} + if type(df)==pd.core.series.Series: + df=pd.DataFrame({df.name:df}) + + if not keys: + if 'bar' in kind: + if sortbars: + keys=list(df.sum().sort_values(ascending=False).keys()) + else: + keys=list(df.keys()) + else: + keys=list(df.keys()) + + colors=get_colors(colors,colorscale,keys) + dash=get_items_as_list(dash,keys,'dash') + symbol=get_items_as_list(symbol,keys,'symbol') + mode=get_items_as_list(mode,keys,'mode') + interpolation=get_items_as_list(interpolation,keys,'interpolation') + width=get_items_as_list(width,keys,'width') + for key in keys: + lines[key]={} + lines[key]["x"]=x + lines[key]["y"]=df[key].fillna('').values + lines[key]["name"]=str(key) + if text is not None: + lines[key]["text"]=text + if 'bar' in kind: + lines[key]["marker"]={'color':to_rgba(colors[key],.6),'line':{'color':colors[key],'width':1}} + else: + lines[key]["line"]={'color':colors[key],'width':width[key],'dash':dash[key], 'shape':interpolation[key]} + lines[key]["mode"]=mode[key] + if 'marker' in mode[key]: + lines[key]["marker"]=go.Marker(symbol=symbol[key],size=size) + if fill: + lines[key]["fill"]='tonexty' if kind=='area' else 'tozeroy' + lines[key]["fillcolor"]=to_rgba(colors[key],kwargs['opacity'] if 'opacity' in kwargs else .3 ) + if 'bar' in kind: + lines_plotly=[go.Bar(lines[key]) for key in keys] + else: + lines_plotly=[go.Scatter(lines[key]) for key in keys] + for trace in lines_plotly: + if isinstance(trace['name'],pd.Timestamp): + trace.update(name=str(trace['name'])) + + if bestfit: + if type(bestfit)==list: + keys=bestfit + d={} + for key in keys: + bestfit=df[key].bestfit() + d[bestfit.formula]=bestfit + bestfit_lines=pd.DataFrame(d).to_iplot(bestfit=False,colors=bestfit_colors,kind='scatter',asTimestamp=asTimestamp) + for line in bestfit_lines: + line['line']['dash']='dash' + if not bestfit_colors: + line['line']['color']=to_rgba(line['line']['color'],.6) + data=go.Data(lines_plotly) + data.extend(bestfit_lines) + return data + + if mean: + if type(mean)==list: + keys=mean + d={} + for key in keys: + mean=df[key].mean() + d['MEAN({key})'.format(key=key)]=pd.Series([mean]*len(df[key]),index=df[key].index) + mean_lines=pd.DataFrame(d).to_iplot(mean=False,colors=mean_colors,kind='scatter',asTimestamp=asTimestamp) + for line in mean_lines: + line['line']['dash']='dash' + if not mean_colors: + line['line']['color']=to_rgba(line['line']['color'],.6) + data=go.Data(lines_plotly) + data.extend(mean_lines) + return data + return go.Data(lines_plotly) + +def _iplot(self,kind='scatter',data=None,layout=None,filename='',sharing=None,title='',xTitle='',yTitle='',zTitle='',theme=None,colors=None,colorscale=None,fill=False,width=None, + dash='solid',mode='lines',interpolation='linear',symbol='dot',size=12,barmode='',sortbars=False,bargap=None,bargroupgap=None,bins=None,histnorm='', + histfunc='count',orientation='v',boxpoints=False,annotations=None,keys=False,bestfit=False, + bestfit_colors=None,mean=False,mean_colors=None,categories='',x='',y='',z='',text='',gridcolor=None, + zerolinecolor=None,margin=None,labels=None,values=None,secondary_y='',secondary_y_title='',subplots=False,shape=None,error_x=None, + error_y=None,error_type='data',locations=None,lon=None,lat=None,asFrame=False,asDates=False,asFigure=False, + asImage=False,dimensions=None,asPlot=False,asUrl=False,online=None,**kwargs): + """ + Returns a plotly chart either as inline chart, image of Figure object + + Parameters: + ----------- + kind : string + Kind of chart + scatter + bar + box + spread + ratio + heatmap + surface + histogram + bubble + bubble3d + scatter3d + scattergeo + ohlc + candle + pie + choroplet + data : Data + Plotly Data Object. + If not entered then the Data object will be automatically + generated from the DataFrame. + layout : Layout + Plotly layout Object + If not entered then the Layout objet will be automatically + generated from the DataFrame. + filename : string + Filename to be saved as in plotly account + sharing : string + Sets the sharing level permission + public - anyone can see this chart + private - only you can see this chart + secret - only people with the link can see the chart + title : string + Chart Title + xTitle : string + X Axis Title + yTitle : string + Y Axis Title + zTitle : string + zTitle : string + Z Axis Title + Applicable only for 3d charts + theme : string + Layout Theme + solar + pearl + white + see cufflinks.getThemes() for all + available themes + colors : dict, list or string + {key:color} to specify the color for each column + [colors] to use the colors in the defined order + colorscale : string + Color scale name + If the color name is preceded by a minus (-) + then the scale is inversed + Only valid if 'colors' is null + See cufflinks.colors.scales() for available scales + fill : bool + Filled Traces + width : dict, list or string + string : applies to all traces + list : applies to each trace in the order + specified + dict: {column:value} for each column in + the dataframe + Line width + dash : dict, list or string + string : applies to all traces + list : applies to each trace in the order + specified + dict: {column:value} for each column in + the dataframe + Drawing style of lines + solid + dash + dashdot + dot + mode : dict, list or string + string : applies to all traces + list : applies to each trace in the order + specified + dict: {column:value} for each column in + the dataframe + Plotting mode for scatter trace + lines + markers + lines+markers + lines+text + markers+text + lines+markers+text + interpolation : dict, list, or string + string : applies to all traces + list : applies to each trace in the order + specified + dict: {column:value} for each column in + the dataframe + Positioning of the connecting lines + linear + spline + vhv + hvh + vh + hv + symbol : dict, list or string + string : applies to all traces + list : applies to each trace in the order + specified + dict: {column:value} for each column in + the dataframe + The symbol that is drawn on the plot for each marker + Valid only when mode includes markers + dot + cross + diamond + square + triangle-down + triangle-left + triangle-right + triangle-up + x + size : string or int + Size of marker + Valid only if marker in mode + barmode : string + Mode when displaying bars + group + stack + overlay + * Only valid when kind='bar' + sortbars : bool + Sort bars in descending order + * Only valid when kind='bar' + bargap : float + Sets the gap between bars + [0,1) + * Only valid when kind is 'histogram' or 'bar' + bargroupgap : float + Set the gap between groups + [0,1) + * Only valid when kind is 'histogram' or 'bar' + bins : int or tuple + if int: + Specifies the number of bins + if tuple: + (start, end, size) + start : starting value + end: end value + size: bin size + * Only valid when kind='histogram' + + histnorm : string + '' (frequency) + percent + probability + density + probability density + Sets the type of normalization for an histogram trace. By default + the height of each bar displays the frequency of occurrence, i.e., + the number of times this value was found in the + corresponding bin. If set to 'percent', the height of each bar + displays the percentage of total occurrences found within the + corresponding bin. If set to 'probability', the height of each bar + displays the probability that an event will fall into the + corresponding bin. If set to 'density', the height of each bar is + equal to the number of occurrences in a bin divided by the size of + the bin interval such that summing the area of all bins will yield + the total number of occurrences. If set to 'probability density', + the height of each bar is equal to the number of probability that an + event will fall into the corresponding bin divided by the size of + the bin interval such that summing the area of all bins will yield + 1. + * Only valid when kind='histogram' + histfunc : string + count + sum + avg + min + max + Sets the binning function used for an histogram trace. + * Only valid when kind='histogram' + orientation : string + h + v + Sets the orientation of the bars. If set to 'v', the length of each + | bar will run vertically. If set to 'h', the length of each bar will + | run horizontally + * Only valid when kind is 'histogram','bar' or 'box' + boxpoints : string + Displays data points in a box plot + outliers + all + suspectedoutliers + False + annotations : dictionary + Dictionary of annotations + {x_point : text} + keys : list of columns + List of columns to chart. + Also can be usded for custom sorting. + bestfit : boolean or list + If True then a best fit line will be generated for + all columns. + If list then a best fit line will be generated for + each key on the list. + bestfit_colors : list or dict + {key:color} to specify the color for each column + [colors] to use the colors in the defined order + categories : string + Name of the column that contains the categories + x : string + Name of the column that contains the x axis values + y : string + Name of the column that contains the y axis values + z : string + Name of the column that contains the z axis values + text : string + Name of the column that contains the text values + gridcolor : string + Grid color + zerolinecolor : string + Zero line color + margin : dict or tuple + Dictionary (l,r,b,t) or + Tuple containing the left, + right, bottom and top margins + labels : string + Name of the column that contains the labels. + * Only valid when kind='pie' + values : string + Name of the column that contains the values. + * Only valid when kind='pie' + secondary_y : string or list(string) + Name(s) of the column to be charted on the + right hand side axis + secondary_y_title : string + Title of the secondary axis + subplots : bool + If true then each trace is placed in + subplot layout + shape : (rows,cols) + Tuple indicating the size of rows and columns + If omitted then the layout is automatically set + * Only valid when subplots=True + error_x : int or float or [int or float] + error values for the x axis + error_y : int or float or [int or float] + error values for the y axis + error_type : string + type of error bars + 'data' + 'constant' + 'percent' + 'sqrt' + 'continuous' + 'continuous_percent' + asFrame : bool + If true then the data component of Figure will + be of Pandas form (Series) otherwise they will + be index values + asDates : bool + If true it truncates times from a DatetimeIndex + asFigure : bool + If True returns plotly Figure + asImage : bool + If True it returns an Image (png) + In ONLINE mode: + Image file is saved in the working directory + Accepts: + filename + dimensions + scale + display_image + In OFFLINE mode: + Image file is downloaded (downloads folder) and a + regular plotly chart is displayed in Jupyter + Accepts: + filename + dimensions + dimensions : tuple(int,int) + Dimensions for image / chart + (width,height) + asPlot : bool + If True the chart opens in browser + asUrl : bool + If True the chart url/path is returned. No chart is displayed. + If Online : the URL is returned + If Offline : the local path is returned + online : bool + If True then the chart/image is rendered on the server + even when running in offline mode. + + Other Kwargs + ============ + Line, Scatter + connectgaps : bool + If True, empty values are connected + Pie charts + sort : bool + If True it sorts the labels by value + pull : float [0-1] + Pulls the slices from the centre + hole : float [0-1] + Sets the size of the inner hole + linecolor : string + Sets the color for the contour line of the slices + linewidth : string + Sets the width for the contour line of the slices + textcolor : string + Sets the color for the text in the slices + textposition : string + Sets the position of the legends for each slice + outside + inner + textinfo : string + Sets the information to be displayed on + the legends + label + percent + value + * or ony combination of the above using + '+' between each item + ie 'label+percent' + + Histogram + line_color : string + specifies the line color of the histogram + + Heatmap and Surface + center_scale : float + Centers the colorscale at a specific value + Automatically sets the (zmin,zmax) values + zmin : float + Defines the minimum range for the z values. + This affects the range for the colorscale + zmax : float + Defines the maximum range for the z values. + This affects the range for the colorscale + + Error Bars + error_trace : string + Name of the column for which error should be + plotted. If omitted then errors apply to all + traces. + error_values_minus : int or float or [int or float] + Values corresponding to the span of the error bars + below the trace coordinates + error_color : string + Color for error bars + error_thickness : float + Sets the line thickness of the error bars + error_width : float + Sets the width (in pixels) of the cross-bar at both + ends of the error bars + error_opacity : float [0,1] + Opacity for the error bars + + Subplots + horizontal_spacing : float [0,1] + Space between subplot columns. + vertical_spacing : float [0,1] + Space between subplot rows. + subplot_titles : bool + If True, chart titles are plotted + at the top of each subplot + shared_xaxes : bool + Assign shared x axes. + If True, subplots in the same grid column have one common + shared x-axis at the bottom of the grid. + shared_yaxes : bool + Assign shared y axes. + If True, subplots in the same grid row have one common + shared y-axis on the left-hand side of the grid. + + Shapes + hline : int, list or dict + Draws a horizontal line at the + indicated y position(s) + Extra parameters can be passed in + the form of a dictionary (see shapes) + vline : int, list or dict + Draws a vertical line at the + indicated x position(s) + Extra parameters can be passed in + the form of a dictionary (see shapes) + hpsan : (y0,y1) + Draws a horizontal rectangle at the + indicated (y0,y1) positions. + Extra parameters can be passed in + the form of a dictionary (see shapes) + vspan : (x0,x1) + Draws a vertical rectangle at the + indicated (x0,x1) positions. + Extra parameters can be passed in + the form of a dictionary (see shapes) + shapes : dict or list(dict) + List of dictionaries with the + specifications of a given shape. + See help(cufflinks.tools.get_shape) + for more information + + Axis Ranges + xrange : [lower_bound,upper_bound] + Sets the range for the x axis + yrange : [lower_bound,upper_bound] + Sets the range for the y axis + zrange : [lower_bound,upper_bound] + Sets the range for the z axis + + Explicit Layout Updates + layout_update : dict + The layout will be modified with all + the explicit values stated in the + dictionary. + It will not apply if layout is passed + as parameter. + + + Range Selector + rangeselector : dict + Defines a rangeselector object + see help(cf.tools.get_range_selector) for more information + Example: + {'steps':['1y','2 months','5 weeks','ytd','2mtd'], + 'axis':'xaxis1', 'bgcolor' : ('blue',.3), + 'x': 0.2 , 'y' : 0.9} + + Range Slider + rangeslider : bool or dict + Defines if a rangeslider is displayed + If bool: + True : Makes it visible + if dict: + Rangeslider object + Example: + {'bgcolor':('blue',.3),'autorange':True} + + Annotations + fontcolor : str + Text color for annotations + fontsize : int + Text size for annotations + textangle : int + Textt angle + See https://plot.ly/python/reference/#layout-annotations + for a complete list of valid parameters. + + Exports + display_image : bool + If True then the image if displayed after being saved + ** only valid if asImage=True + scale : integer + Increase the resolution of the image by `scale` amount + Only valid when asImage=True + """ + + # Valid Kwargs + valid_kwargs = ['color','opacity','column','columns','labels','text','world_readable','colorbar'] + TRACE_KWARGS = ['hoverinfo','connectgaps'] + HEATMAP_SURFACE_KWARGS = ['center_scale','zmin','zmax'] + PIE_KWARGS=['sort','pull','hole','textposition','textinfo','linecolor','linewidth','textcolor'] + OHLC_KWARGS=['up_color','down_color','open','high','low','close','volume','name','decreasing','increasing'] + SUBPLOT_KWARGS=['horizontal_spacing', 'vertical_spacing', + 'specs', 'insets','start_cell','shared_xaxes','shared_yaxes','subplot_titles'] + GEO_KWARGS=['locationmode','locationsrc','geo','lon','lat'] + ERROR_KWARGS=['error_trace','error_values_minus','error_color','error_thickness', + 'error_width','error_opacity'] + EXPORT_KWARGS=['display_image','scale'] + kwargs_list = [tools.__LAYOUT_KWARGS,TRACE_KWARGS, + OHLC_KWARGS,PIE_KWARGS,HEATMAP_SURFACE_KWARGS,SUBPLOT_KWARGS,GEO_KWARGS,ERROR_KWARGS,EXPORT_KWARGS] + [valid_kwargs.extend(_) for _ in kwargs_list] + + dict_modifiers_keys = ['line'] + dict_modifiers={} + + for k in dict_modifiers_keys: + dict_modifiers[k]=kwargs_from_keyword(kwargs,{},k,True) + + + for key in list(kwargs.keys()): + if key not in valid_kwargs: + raise Exception("Invalid keyword : '{0}'".format(key)) + + # Setting default values + if not colors: + colors=kwargs['color'] if 'color' in kwargs else colors + if isinstance(colors,str): + colors=[colors] + opacity=kwargs['opacity'] if 'opacity' in kwargs else 0.8 + if not dimensions: + dimensions=auth.get_config_file()['dimensions'] + + # Get values from config theme + if theme is None: + theme = auth.get_config_file()['theme'] + theme_config=tools.getTheme(theme) + if colorscale is None: + config_colorscale=auth.get_config_file()['colorscale'] + if config_colorscale in ('dflt',None): + colorscale=theme_config['colorscale'] if 'colorscale' in theme_config else 'original' + else: + colorscale=config_colorscale + if width is None: + if kind != 'pie': + width=theme_config['linewidth'] if 'linewidth' in theme_config else 2 + if margin is None: + margin=auth.get_config_file().get('margin',None) + + + # In case column was used instead of keys + if 'column' in kwargs: + keys=[kwargs['column']] if isinstance(kwargs['column'],str) else kwargs['column'] + if 'columns' in kwargs: + keys=[kwargs['columns']] if isinstance(kwargs['columns'],str) else kwargs['columns'] + kind='line' if kind=='lines' else kind + + # Figure generators + def get_marker(marker={}): + if 'line' in dict_modifiers: + if 'color' not in dict_modifiers['line']: + if 'linecolor' in tools.getTheme(theme=theme): + linecolor=normalize(tools.getTheme(theme=theme)['linecolor']) + else: + linecolor=tools.getLayout(theme=theme)['xaxis1']['titlefont']['color'] + dict_modifiers['line']['color']=linecolor + dict_modifiers['line']=tools.updateColors(dict_modifiers['line']) + marker['line']=deep_update(marker['line'],dict_modifiers['line']) + return marker + + # We assume we are good citizens + validate=True + + + if not layout: + l_kwargs=dict([(k,kwargs[k]) for k in tools.__LAYOUT_KWARGS if k in kwargs]) + if annotations: + ann_kwargs=check_kwargs(kwargs,tools.__ANN_KWARGS,clean_origin=True) + annotations=tools.getAnnotations(self.copy(),annotations,kind=kind,theme=theme,**ann_kwargs) + + + layout=tools.getLayout(kind=kind,theme=theme,xTitle=xTitle,yTitle=yTitle,zTitle=zTitle,title=title,barmode=barmode, + bargap=bargap,bargroupgap=bargroupgap,annotations=annotations,gridcolor=gridcolor, + dimensions=dimensions, + zerolinecolor=zerolinecolor,margin=margin,is3d='3d' in kind,**l_kwargs) + + if not data: + if categories: + data=go.Data() + if 'bar' in kind: + df=self.copy() + df=df.set_index(categories) + fig=df.figure(kind=kind,colors=colors,colorscale=colorscale,fill=fill,width=width,sortbars=sortbars, + asDates=asDates,mode=mode,symbol=symbol,size=size,text=text,barmode=barmode,orientation=orientation) + data=fig['data'] + else: + _keys=pd.unique(self[categories]) + colors=get_colors(colors,colorscale,_keys) + mode='markers' if 'markers' not in mode else mode + for _ in _keys: + __=self[self[categories]==_].copy() + if text: + _text=__[text] if asFrame else __[text].values + _x=__[x] if asFrame else __[x].values + _y=__[y] if asFrame else __[y].values + if z: + _z=__[z] if asFrame else __[z].values + if 'bubble' in kind: + rg=__[size].values + rgo=self[size].values + _size=[int(100*(float(i)-rgo.min())/(rgo.max()-rgo.min()))+12 for i in rg] + else: + _size=size + _data=go.Scatter3d(x=_x,y=_y,mode=mode,name=_, + marker=go.Marker(color=colors[_],symbol=symbol,size=_size,opacity=opacity, + line=go.Line(width=width)),textfont=tools.getLayout(theme=theme)['xaxis1']['titlefont']) + if '3d' in kind: + _data=go.Scatter3d(x=_x,y=_y,z=_z,mode=mode,name=_, + marker=go.Marker(color=colors[_],symbol=symbol,size=_size,opacity=opacity, + line=go.Line(width=width)),textfont=tools.getLayout(theme=theme)['xaxis1']['titlefont']) + else: + _data=go.Scatter(x=_x,y=_y,mode=mode,name=_, + marker=go.Marker(color=colors[_],symbol=symbol,size=_size,opacity=opacity, + line=go.Line(width=width)),textfont=tools.getLayout(theme=theme)['xaxis1']['titlefont']) + if text: + _data.update(text=_text) + data.append(_data) + else: + if kind in ('scatter','spread','ratio','bar','barh','area','line'): + df=self.copy() + if type(df)==pd.core.series.Series: + df=pd.DataFrame({df.name:df}) + if x: + df=df.set_index(x) + if y: + df=df[y] + if kind=='area': + df=df.transpose().fillna(0).cumsum().transpose() + if text: + if not isinstance(text,list): + text=self[text].values + data=df.to_iplot(colors=colors,colorscale=colorscale,kind=kind,interpolation=interpolation,fill=fill,width=width,dash=dash,sortbars=sortbars,keys=keys, + bestfit=bestfit,bestfit_colors=bestfit_colors,mean=mean,mean_colors=mean_colors,asDates=asDates,mode=mode,symbol=symbol,size=size, + text=text,**kwargs) + trace_kw=check_kwargs(kwargs,TRACE_KWARGS) + for trace in data: + trace.update(**trace_kw) + + if kind in ('spread','ratio'): + if kind=='spread': + trace=self.apply(lambda x:x[0]-x[1],axis=1) + positive=trace.apply(lambda x:x if x>=0 else pd.np.nan) + negative=trace.apply(lambda x:x if x<0 else pd.np.nan) + trace=pd.DataFrame({'positive':positive,'negative':negative}) + trace=trace.to_iplot(colors={'positive':'green','negative':'red'},width=0.5) + else: + trace=self.apply(lambda x:x[0]*1.0/x[1],axis=1).to_iplot(colors=['green'],width=1) + trace.update({'xaxis':'x2','yaxis':'y2','fill':'tozeroy', + 'name':kind.capitalize(),'connectgaps':False,'showlegend':False}) + data.append(go.Scatter(trace[0])) + if kind=='spread': + data.append(go.Scatter(trace[1])) + layout['yaxis1'].update({'domain':[.3,1]}) + layout['yaxis2']=copy.deepcopy(layout['yaxis1']) + layout['xaxis2']=copy.deepcopy(layout['xaxis1']) + layout['yaxis2'].update(domain=[0,.25],title=kind.capitalize()) + layout['xaxis2'].update(anchor='y2',showticklabels=False) + layout['hovermode']='x' + if 'bar' in kind: + if 'stack' in barmode: + layout['legend'].update(traceorder='normal') + orientation = 'h' if kind=='barh' else orientation + for trace in data: + trace.update(orientation=orientation) + if kind=='barh': + trace['x'],trace['y']=trace['y'],trace['x'] + + elif kind=='bubble': + mode='markers' if 'markers' not in mode else mode + x=self[x].values.tolist() + y=self[y].values.tolist() + z=size if size else z + rg=self[z].values + if len(rg) > 1: + z=[int(100*(float(_)-rg.min())/(rg.max()-rg.min()))+12 for _ in rg] + else: + z=[12] if len(rg) else [] + text=kwargs['labels'] if 'labels' in kwargs else text + labels=self[text].values.tolist() if text else '' + clrs=colors if colors else get_scales(colorscale) + clrs=[clrs] if not isinstance(clrs,list) else clrs + clrs=[clrs[0]]*len(x) + marker=go.Marker(color=clrs,size=z,symbol=symbol, + line=go.Line(width=width)) + trace=go.Scatter(x=x,y=y,marker=marker,mode='markers',text=labels) + data=go.Data([trace]) + elif kind in ('box','histogram','hist','violin'): + if isinstance(self,pd.core.series.Series): + df=pd.DataFrame({self.name:self}) + else: + df=self.copy() + data=go.Data() + clrs=get_colors(colors,colorscale,df.columns) + if 'hist' in kind: + barmode = 'overlay' if barmode=='' else barmode + layout.update(barmode=barmode) + columns=keys if keys else df.columns + for _ in columns: + if kind=='box': + __=go.Box(y=df[_].values.tolist(),marker=go.Marker(color=clrs[_]),name=_, + line=go.Line(width=width),boxpoints=boxpoints) + elif kind=='violin': + figure = ff.create_violin(df.melt(), data_header='value', group_header='variable', + theme=theme,xTitle=xTitle,yTitle=yTitle,zTitle=zTitle,title=title) + if asFigure: + return figure + else: + return iplot(figure,validate=validate,sharing=sharing,filename=filename, + online=online,asImage=asImage,asUrl=asUrl,asPlot=asPlot, + dimensions=dimensions,display_image=kwargs.get('display_image',True)) + + else: + __=go.Histogram(x=df[_].values.tolist(),name=_, + marker=go.Marker(color=clrs[_], line=go.Line(width=width)), + orientation=orientation, + opacity=kwargs['opacity'] if 'opacity' in kwargs else .8, histfunc=histfunc, + histnorm=histnorm) + + __['marker']=get_marker(__['marker']) + + if orientation=='h': + __['y']=__['x'] + del __['x'] + if bins: + if type(bins) in (tuple,list): + try: + _bins={'start':bins[0],'end':bins[1],'size':bins[2]} + if orientation=='h': + __.update(ybins=_bins,autobiny=False) + else: + __.update(xbins=_bins,autobinx=False) + except: + print("Invalid format for bins generation") + else: + if orientation=='h': + __.update(nbinsy=bins) + else: + __.update(nbinsx=bins) + data.append(__) + + elif kind in ('heatmap','surface'): + if x: + x=self[x].values.tolist() + else: + if self.index.__class__.__name__ in ('PeriodIndex','DatetimeIndex'): + x=self.index.format() + else: + x=self.index.values.tolist() + y=self[y].values.tolist() if y else self.columns.values.tolist() + z=self[z].values.tolist() if z else self.values.transpose() + scale=get_scales('rdbu') if not colorscale else get_scales(colorscale) + colorscale=[[float(_)/(len(scale)-1),scale[_]] for _ in range(len(scale))] + center_scale = kwargs.get('center_scale',None) + zmin=z.min() + zmax=z.max() + if center_scale is not None: + if center_scale<=zmin+(zmax-zmin)/2: + zmin=center_scale*2-zmax + else: + zmax=center_scale*2-zmin + zmin=kwargs.get('zmin',zmin) + zmax=kwargs.get('zmax',zmax) + if kind=='heatmap': + data=go.Data([go.Heatmap(z=z,x=x,y=y,zmin=zmin,zmax=zmax,colorscale=colorscale)]) + else: + data=go.Data([go.Surface(z=z,x=x,y=y,zmin=zmin,zmax=zmax,colorscale=colorscale)]) + + elif kind in ('scatter3d','bubble3d'): + data=go.Data() + keys=self[text].values if text else list(range(len(self))) + colors=get_colors(colors,colorscale,keys,asList=True) + mode='markers' if 'markers' not in mode else mode + df=self.copy() + df['index']=keys + if kind=='bubble3d': + rg=self[size].values + size=[int(100*(float(_)-rg.min())/(rg.max()-rg.min()))+12 for _ in rg] + else: + size=[size for _ in range(len(keys))] + + _data=go.Scatter3d(x=df[x].values.tolist(),y=df[y].values.tolist(),z=df[z].values.tolist(),mode=mode,name=keys, + marker=go.Marker(color=colors,symbol=symbol,size=size,opacity=.8)) + if text: + _data.update(text=keys) + data.append(_data) + + elif kind=='pie': + if not labels: + raise CufflinksError('Missing: labels') + if not values: + raise CufflinksError('Missing: values') + labels=self[labels].values.tolist() + values=self[values].values.tolist() + marker=go.Marker(colors=get_colors(colors,colorscale,labels,asList=True)) + marker.update(line=go.Line(color=kwargs.pop('linecolor',None),width=kwargs.pop('linewidth',width))) + pie=go.Pie(values=values,labels=labels,name='',marker=marker) + + kw=check_kwargs(kwargs,PIE_KWARGS) + kw['textfont']={'color':kw.pop('textcolor',None)} + pie.update(kw) + data=go.Data() + del layout['xaxis1'] + del layout['yaxis1'] + data.append(pie) + validate=False + + elif kind in ('old_candle','old_ohlc'): + d=ta._ohlc_dict(self) + if len(list(d.keys()))!=4: + raise Exception("OHLC type of charts require an Open, High, Low and Close column") + ohlc_kwargs=check_kwargs(kwargs,OHLC_KWARGS) + if kind=='old_candle': + fig=tools.get_candle(self,theme=theme,layout=layout,**ohlc_kwargs) + else: + fig=tools.get_ohlc(self,theme=theme,layout=layout,**ohlc_kwargs) + if bestfit: + df=self.copy() + bf=_to_iplot(self[d['close']],bestfit=True,bestfit_colors=bestfit_colors,asTimestamp=True) + fig['data'].append(bf[1]) + data=fig['data'] + layout=fig['layout'] + + elif kind in ('candle','ohlc','candlestick'): + kind='candlestick' if kind=='candle' else kind + kw=check_kwargs(kwargs,OHLC_KWARGS) + d=ta._ohlc_dict(self,validate='ohlc',**kw) + _d=dict(type=kind, + open=self[d['open']].values, + high=self[d['high']].values, + low=self[d['low']].values, + close=self[d['close']].values, + x=self.index + ) + if 'name' in kw: + _d['name']=kw['name'] + + showlegend=False + if 'showlegend' in kwargs: + showlegend=kwargs['showlegend'] + else: + if 'legend' in kwargs: + if type(kwargs['legend'])==bool: + showlegend=kwargs['legend'] + + _d['increasing']=dict(line=dict(color=kw['up_color']) if 'up_color' in kw else dict(),showlegend=showlegend) + _d['decreasing']=dict(line=dict(color=kw['down_color']) if 'down_color' in kw else dict(),showlegend=showlegend) + for k in ('increasing','decreasing'): + if k in kw: + _d[k]=deep_update(_d[k],kw[k]) + + _d['yaxis']='y2' + data=[_d] + + + + elif kind in ('choropleth','scattergeo'): + kw=check_kwargs(kwargs,GEO_KWARGS) + if kind=='choropleth': + if not all([x!=None for x in (locations,z)]): + raise Exception("Choropleth maps require a 'location' and 'z' column names specified") + geo_data={'type':'choropleth','locations':self[locations],'z':self[z], + 'colorscale':get_colorscale(colorscale), + 'marker':get_marker(go.Marker(line=go.Line(width=width)))} + elif kind=='scattergeo': + if not all([x!=None for x in (lon,lat)]): + raise Exception("Scattergeo maps require a 'lon' and 'lat' column names specified") + geo_data={'type':'scattergeo','lat':self[lat],'lon':self[lon], + 'marker':get_marker(go.Marker(line=go.Line(width=width), + symbol=symbol,colorscale=get_colorscale(colorscale), + color=self[z] if z else None))} + if 'colorbar' in kwargs: + geo_data['colorbar']=kwargs['colorbar'] + geo_data.update(kw) + if text: + geo_data.update(text=self[text]) + validate=False + data=go.Data() + data.append(geo_data) + +## Sharing Values + if all(['world_readable' in kwargs,sharing is None]): + sharing=kwargs['world_readable'] + if isinstance(sharing,bool): + if sharing: + sharing='public' + else: + sharing='private' + if sharing is None: + sharing=auth.get_config_file()['sharing'] + + if not filename: + if title: + filename=title + else: + filename='Plotly Playground {0}'.format(time.strftime("%Y-%m-%d %H:%M:%S")) + + + +## Figure defintion + figure=go.Figure() + figure['data']=data + figure['layout']=layout + +## Check secondary axis + if secondary_y: + figure=figure.set_axis(secondary_y,side='right') + if secondary_y_title: + figure.layout.yaxis2.title=secondary_y_title + +## Error Bars + if kind in ('scatter','bar','barh','lines'): + if any([error_x,error_y]): + def set_error(axis,**kwargs): + return tools.set_errors(figure,axis=axis,**kwargs) + kw=check_kwargs(kwargs,ERROR_KWARGS) + kw=dict([(k.replace('error_',''),v) for k,v in list(kw.items())]) + kw['type']=error_type + if error_x: + kw['values']=error_x + figure=set_error('x',**kw) + if error_y: + kw['values']=error_y + figure=set_error('y',**kw) +## Subplots + + if subplots: + fig=tools.strip_figures(figure) + kw=check_kwargs(kwargs,SUBPLOT_KWARGS) + if 'subplot_titles' in kwargs: + if kwargs['subplot_titles']==True: + kw['subplot_titles']=[d['name'] for d in data] + else: + kw['subplot_titles']=kwargs['subplot_titles'] + figure=tools.subplots(fig,shape,base_layout=layout,theme=theme,**kw) + + +## Exports + validate = False if 'shapes' in layout else validate + + if asFigure: + return figure + else: + return iplot(figure,validate=validate,sharing=sharing,filename=filename, + online=online,asImage=asImage,asUrl=asUrl,asPlot=asPlot, + dimensions=dimensions,display_image=kwargs.get('display_image',True)) + + +
[docs]def get_colors(colors,colorscale,keys,asList=False): + if type(colors)!=dict: + if not colors: + if colorscale: + colors=get_scales(colorscale,len(keys)) + clrgen=colorgen(colors,len(keys)) + if asList: + colors=[next(clrgen) for _ in keys] + else: + colors={} + for key in keys: + colors[key]=next(clrgen) + return colors
+ +
[docs]def get_items_as_list(items,keys,items_names='styles'): + """ + Returns a dict with an item per key + + Parameters: + ----------- + items : string, list or dict + Items (ie line styles) + keys: list + List of keys + items_names : string + Name of items + """ + if type(items)!=dict: + if type(items)==list: + if len(items)!=len(keys): + raise Exception('List of {0} is not the same length as keys'.format(items_names)) + else: + items=dict(zip(keys,items)) + else: + items=dict(zip(keys,[items]*len(keys))) + return items
+ + +def _scatter_matrix(self,theme=None,bins=10,color='grey',size=2, asFigure=False, **iplot_kwargs): + """ + Displays a matrix with scatter plot for each pair of + Series in the DataFrame. + The diagonal shows a histogram for each of the Series + + Parameters: + ----------- + df : DataFrame + Pandas DataFrame + theme : string + Theme to be used (if not the default) + bins : int + Number of bins to use for histogram + color : string + Color to be used for each scatter plot + size : int + Size for each marker on the scatter plot + iplot_kwargs : key-value pairs + Keyword arguments to pass through to `iplot` + """ + sm=tools.scatter_matrix(self,theme=theme,bins=bins,color=color,size=size) + if asFigure: + return sm + else: + return iplot(sm,**iplot_kwargs) + +def _figure(self,**kwargs): + """ + Generates a Plotly figure for the given DataFrame + + Parameters: + ----------- + All properties avaialbe can be seen with + help(cufflinks.pd.DataFrame.iplot) + """ + kwargs['asFigure']=True + return self.iplot(**kwargs) + +def _layout(self,**kwargs): + """ + Generates a Plotly layout for the given DataFrame + + Parameters: + ----------- + All properties avaialbe can be seen with + help(cufflinks.pd.DataFrame.iplot) + """ + kwargs['asFigure']=True + return self.iplot(**kwargs)['layout'] + + +# ONLINE +# py.iplot(filename,fileopt,sharing,world_readable) +# py.plot(filename,fileopt,auto_open,sharing,world_readable) +# py.image.ishow(figure,format,width,height,scale) +# py.image.save_as(figure,filename,format,width,height,scale) + +# OFFLINE +# py_offline.iplot(figure,show_link,link_text,validate,image,filename,image_width,image_height,config) +# py_offline.plot(figure,show_link,link_text,validate,output_type,include_plotlyjs,filename,auto_open,image,image_filename,image_width,image_height,config) + + +
[docs]def iplot(figure,validate=True,sharing=None,filename='', + online=None,asImage=False,asUrl=False,asPlot=False, + dimensions=None,display_image=True,**kwargs): + """ + Plots a figure in IPython, creates an HTML or generates an Image + + figure : figure + Plotly figure to be charted + validate : bool + If True then all values are validated before + it is charted + sharing : string + Sets the sharing level permission + public - anyone can see this chart + private - only you can see this chart + secret - only people with the link can see the chart + filename : string + Name to be used to save the file in the server, or as an image + online : bool + If True then the chart/image is rendered on the server + even when running in offline mode. + asImage : bool + If True it returns an Image (png) + In ONLINE mode: + Image file is saved in the working directory + Accepts: + filename + dimensions + scale + display_image + In OFFLINE mode: + Image file is downloaded (downloads folder) and a + regular plotly chart is displayed in Jupyter + Accepts: + filename + dimensions + asUrl : bool + If True the chart url/path is returned. No chart is displayed. + If Online : the URL is returned + If Offline : the local path is returned + asPlot : bool + If True the chart opens in browser + dimensions : tuple(int,int) + Dimensions for image + (width,height) + display_image : bool + If true, then the image is displayed after it has been saved + Requires Jupyter Notebook + Only valid when asImage=True + + Other Kwargs + ============ + legend : bool + If False then the legend will not be shown + scale : integer + Increase the resolution of the image by `scale` amount + Only valid when asImage=True + """ + valid_kwargs=['world_readable','legend','scale'] + + for key in list(kwargs.keys()): + if key not in valid_kwargs: + raise Exception("Invalid keyword : '{0}'".format(key)) + + if 'legend' in kwargs: + if 'layout' in figure: + figure['layout'].update(showlegend=kwargs['legend']) + + ## Sharing Values + if all(['world_readable' in kwargs,sharing is None]): + sharing=kwargs['world_readable'] + if isinstance(sharing,bool): + if sharing: + sharing='public' + else: + sharing='private' + if sharing is None: + sharing=auth.get_config_file()['sharing'] + + ## Filename Handling + if not filename: + if figure['layout']['title']: + filename=figure['layout']['title'] + else: + filename='Plotly Playground {0}'.format(time.strftime("%Y-%m-%d %H:%M:%S")) + + ## Dimensions + if not dimensions: + dimensions=(800,500) if not auth.get_config_file()['dimensions'] else auth.get_config_file()['dimensions'] + + ## Offline Links + show_link = auth.get_config_file()['offline_show_link'] + link_text = auth.get_config_file()['offline_link_text'] + + ## Remove validation if shapes are present + if 'layout' in figure: + validate = False if 'shapes' in figure['layout'] else validate + + ## asURL + auto_open=True + if asUrl: + asPlot=True + auto_open=False + + ## Exports + if asImage: + if offline.is_offline() and not online: + return offline.py_offline.iplot(figure,validate=validate, filename=filename, show_link=show_link,link_text=link_text, + image='png',image_width=dimensions[0],image_height=dimensions[1]) + else: + try: + py.image.save_as(figure,filename='img/'+filename,format='png', + width=dimensions[0],height=dimensions[1],scale=kwargs.get('scale',None)) + path='img/'+filename+'.png' + except: + py.image.save_as(figure,filename=filename,format='png', + width=dimensions[0],height=dimensions[1],scale=kwargs.get('scale',None)) + path=filename+'.png' + if display_image: + return display(Image(path)) + else: + print('Image saved : {0}'.format(path)) + return None + + ## asPlot and asUrl + if asPlot: + filename+='.html' + if offline.is_offline() and not online: + return offline.py_offline.plot(figure, filename=filename, validate=validate, + show_link=show_link,link_text=link_text,auto_open=auto_open) + else: + return py.plot(figure, sharing=sharing, filename=filename, validate=validate, + auto_open=auto_open) + + ## iplot + if offline.is_offline() and not online: + return offline.py_offline.iplot(figure,validate=validate, filename=filename, show_link=show_link,link_text=link_text) + else: + return py.iplot(figure,validate=validate,sharing=sharing, + filename=filename)
+ + + +def _ta_figure(self,**kwargs): + """ + Generates a Plotly figure for the given DataFrame + + Parameters: + ----------- + All properties avaialbe can be seen with + help(cufflinks.pd.DataFrame.iplot) + """ + kwargs['asFigure']=True + return self.ta_plot(**kwargs) + + +def _ta_plot(self,study,periods=14,column=None,include=True,str='{name}({period})',detail=False, + theme=None,sharing=None,filename='',asFigure=False,**iplot_kwargs): + """ + Generates a Technical Study Chart + + Parameters: + ----------- + study : string + Technical Study to be charted + sma - 'Simple Moving Average' + rsi - 'R Strength Indicator' + periods : int + Number of periods + column : string + Name of the column on which the + study will be done + include : bool + Indicates if the input column(s) + should be included in the chart + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + detail : bool + If True the supporting data/calculations + are included in the chart + study_colors : string or [string] + Colors to be used for the studies + + Study Specific Parameters + ------------------------- + RSI + rsi_upper : int (0,100] + Level for the upper rsi band + default : 70 + rsi_lower : int (0,100] + Level for the lower rsi band + default : 30 + CCI + cci_upper : int + Level for the upper cci band + default : 100 + cci_lower : int + Level for the lower cci band + default : -100 + BOLL + boll_std : int or float + Number of standard deviations + MACD + fast_period : int + Number of periods for the fast moving average + slow_period : int + Number of periods for the slow moving average + signal_period : int + Number of periods for the signal + CORREL + how : string + Method for the correlation calculation + values + pct_cht + diff + + """ + + if 'columns' in iplot_kwargs: + column=iplot_kwargs.pop('columns') + + if 'period' in iplot_kwargs: + periods=iplot_kwargs.pop('period') + + if 'world_readable' in iplot_kwargs: + sharing=iplot_kwargs.pop('world_readable') + + if 'study_color' in iplot_kwargs: + iplot_kwargs['study_colors']=iplot_kwargs.pop('study_color') + + if sharing is None: + sharing = auth.get_config_file()['sharing'] + if isinstance(sharing,bool): + if sharing: + sharing='public' + else: + sharing='private' + iplot_kwargs['sharing']=sharing + if theme is None: + theme = iplot_kwargs.pop('study_theme',auth.get_config_file()['theme']) + + if not filename: + if 'title' in iplot_kwargs: + filename=iplot_kwargs['title'] + else: + filename='Plotly Playground {0}'.format(time.strftime("%Y-%m-%d %H:%M:%S")) + + def get_subplots(figures): + shape=(len(figures),1) + layout=tools.get_base_layout(figures) + subplots=tools.subplots(figures,shape=shape,shared_xaxes=True,base_layout=layout) + if len(figures)==2: + subplots['layout']['yaxis1']['domain']=[.27,1.0] + subplots['layout']['yaxis2']['domain']=[0,.25] + return subplots + + def get_study(df,func,iplot_kwargs,iplot_study_kwargs,str=None,include=False,column=None,inset=False): + df=df.copy() + if inset: + if not column: + if isinstance(df,pd.DataFrame): + column=df.keys().tolist() + else: + df=pd.DataFrame(df) + column=df.keys().tolist() + if 'legend' in iplot_kwargs: + iplot_study_kwargs['legend']=iplot_kwargs['legend'] + fig_0=df.figure(**iplot_kwargs) + df_ta=func(df,column=column,include=False,str=str,**study_kwargs) + kind=iplot_kwargs['kind'] if 'kind' in iplot_kwargs else '' + iplot_study_kwargs['kind']='scatter' + iplot_study_kwargs['colors']=iplot_study_kwargs.get('colors',['blue','green','red'] if study=='dmi' else 'blue') + fig_1=df_ta.figure(theme=theme,**iplot_study_kwargs) + if kind in ['candle','ohlc']: + for i in fig_1['data']: + i['x']=[pd.Timestamp(_) for _ in i['x']] + if inset: + figure=tools.merge_figures([fig_0,fig_1]) if include else fig_1 + else: + figure=get_subplots([fig_0,fig_1]) if include else fig_1 + return figure + + study_kwargs={} + iplot_study_kwargs={} + + study_kwargs=check_kwargs(iplot_kwargs,__TA_KWARGS,{},clean_origin=True) + iplot_study_kwargs=kwargs_from_keyword(iplot_kwargs,{},'study') + + study_kwargs.update({'periods':periods}) + + ta_func = eval('ta.{0}'.format(study)) + + inset=study in ('sma','boll','ema','atr','ptps') + figure=get_study(self,ta_func,iplot_kwargs,iplot_study_kwargs,include=include, + column=column,str=str,inset=inset) + + ## Add Bands + if study in ('rsi','cci'): + bands= {'rsi':(30,70), + 'cci':(-100,100)} + _upper=study_kwargs.get('{0}_upper'.format(study),bands[study][0]) + _lower=study_kwargs.get('{0}_lower'.format(study),bands[study][1]) + yref='y2' if include else 'y1' + shapes=[tools.get_shape(y=i,yref=yref,color=j,dash='dash') for (i,j) in [(_lower,'green'),(_upper,'red')]] + figure['layout']['shapes']=shapes + + # if study=='rsi': + # rsi_upper=study_kwargs.get('rsi_upper',70) + # rsi_lower=study_kwargs.get('rsi_lower',30) + # yref='y2' if include else 'y1' + # shapes=[tools.get_shape(y=i,yref=yref,color=j,dash='dash') for (i,j) in [(rsi_lower,'green'),(rsi_upper,'red')]] + # figure['layout']['shapes']=shapes + + # if study=='cci': + # cci_upper=study_kwargs.get('cci_upper',100) + # cci_lower=study_kwargs.get('cci_lower',-100) + # yref='y2' if include else 'y1' + # shapes=[tools.get_shape(y=i,yref=yref,color=j,dash='dash') for (i,j) in [(cci_lower,'green'),(cci_upper,'red')]] + # figure['layout']['shapes']=shapes + + ## Exports + + if asFigure: + return figure + else: + return iplot(figure,sharing=sharing,filename=filename) + +def _fig_iplot(self,validate=True,sharing=None,filename='', + online=None,asImage=False,asUrl=False,asPlot=False, + dimensions=None,display_image=True,**kwargs): + """ + Plots a figure in IPython + + figure : figure + Plotly figure to be charted + validate : bool + If True then all values are validated before + it is charted + sharing : string + Sets the sharing level permission + public - anyone can see this chart + private - only you can see this chart + secret - only people with the link can see the chart + filename : string + Name to be used to save the file in the server, or as an image + online : bool + If True then the chart is rendered on the server + even when running in offline mode. + asImage : bool + If True it returns an Image (png) + In ONLINE mode: + Image file is saved in the working directory + Accepts: + filename + dimensions + scale + display_image + In OFFLINE mode: + Image file is downloaded (downloads folder) and a + regular plotly chart is displayed in Jupyter + Accepts: + filename + dimensions + asUrl : bool + If True the chart url/path is returned. No chart is displayed. + If Online : the URL is returned + If Offline : the local path is returned + asPlot : bool + If True the chart opens in browser + dimensions : tuple(int,int) + Dimensions for image + (width,height) + display_image : bool + If true, then the image is displayed after it has been saved + Requires Jupyter Notebook + onlh valide when asImage=True + + Other Kwargs + ============ + + legend : bool + If False then the legend will not be shown + """ + return iplot(self,validate=validate,sharing=sharing,filename=filename, + online=online,asImage=asImage,asUrl=asUrl,asPlot=asPlot, + dimensions=dimensions,display_image=display_image,**kwargs) + + +pd.DataFrame.to_iplot=_to_iplot +pd.DataFrame.scatter_matrix=_scatter_matrix +pd.DataFrame.figure=_figure +pd.DataFrame.layout=_layout +pd.DataFrame.ta_plot=_ta_plot +pd.DataFrame.iplot=_iplot +pd.DataFrame.ta_figure=_ta_figure +pd.Series.ta_figure=_ta_figure +pd.Series.ta_plot=_ta_plot +pd.Series.figure=_figure +pd.Series.to_iplot=_to_iplot +pd.Series.iplot=_iplot +go.Figure.iplot=_fig_iplot + + +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/quant_figure.html b/docs/html/_modules/cufflinks/quant_figure.html new file mode 100644 index 0000000..7fc55f4 --- /dev/null +++ b/docs/html/_modules/cufflinks/quant_figure.html @@ -0,0 +1,1311 @@ + + + + + + + + cufflinks.quant_figure — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.quant_figure

+
+"""
+
+QuantFigure allows you to create a persistent object. 
+Annotations and Technical Studies can be added on demand. 
+
+It accepts any dataframe with a timeseries index. 
+
+Try it out:
+	qf=cf.QuantFig(cf.datagen.ohlc())
+	qf.iplot()
+
+"""
+
+from __future__ import absolute_import
+
+import json
+import copy
+import pandas as pd
+
+from . import tools
+from . import ta
+from . import utils
+from . import colors
+from . import auth
+from . import date_tools
+
+__QUANT_FIGURE_DATA = ['kind','showlegend','datalegend','name','slice','resample','bestfit',
+						'text','title','yTitle','secondary_y_title','bestfit_colors','kind',
+						'colorscale','xTitle','colors','secondary_y']
+__QUANT_FIGURE_LAYOUT = ['annotations','showlegend','margin','rangeselector','rangeslider','shapes',
+						 'width','height','dimensions']
+__QUANT_FIGURE_THEME = ['theme','up_color','down_color']
+__QUANT_FIGURE_PANELS = ['min_panel_size','spacing','top_margin','bottom_margin']
+
+
+
[docs]def get_layout_kwargs(): + return tools.__LAYOUT_KWARGS
+
[docs]def get_annotation_kwargs(): + return tools.__ANN_KWARGS
+
[docs]def get_shapes_kwargs(): return tools.__SHAPES_KWARGS
+ +
[docs]class QuantFig(object): + + def __init__(self,df,kind='candlestick',columns=None,**kwargs): + self.df=df + self.studies={} + self.data={} + self.theme={} + self.panels={} + self.layout={} + self.trendlines=[] + self.kwargs={} + + # Set column names + if not columns: + columns={} + for _ in ['open','high','low','close','volume']: + columns[_]=kwargs.pop(_,'') + self._d=ta._ohlc_dict(df,**columns) + + # Set initial annotations + annotations={ + 'values':[], + 'params':utils.check_kwargs(kwargs,get_annotation_kwargs(),{},clean_origin=True) + } + + ann_values=kwargs.pop('annotations',None) + + if ann_values: + if utils.is_list(ann_values): + annotations['values'].extend(ann_values) + else: + annotations['values'].append(ann_values) + + # self.data initial values + self.data.update(datalegend=kwargs.pop('datalegend',True),name=kwargs.pop('name','Trace 1'),kind=kind) + self.data.update(slice=kwargs.pop('slice',(None,None)),resample=kwargs.pop('resample',None)) + + # self.layout initial values + self.layout['shapes']=utils.check_kwargs(kwargs,get_shapes_kwargs(),{},clean_origin=True) + for k,v in list(self.layout['shapes'].items()): + if not isinstance(v,list): + self.layout['shapes'][k]=[v] + self.layout['rangeselector']=kwargs.pop('rangeselector',{'visible':False}) + self.layout['rangeslider']=kwargs.pop('rangeslider',False) + self.layout['margin']=kwargs.pop('margin',dict(t=30,b=30,r=30,l=30)) + self.layout['annotations']=annotations + self.layout['showlegend']=kwargs.pop('showlegend',True) + self.layout.update(utils.check_kwargs(kwargs,get_layout_kwargs(),{},clean_origin=True)) + + # self.theme initial values + self.theme['theme']=kwargs.pop('theme',auth.get_config_file()['theme']) + self.theme['up_color']=kwargs.pop('up_color','java') + self.theme['down_color']=kwargs.pop('down_color','grey') + + # self.panels initial values + self.panels['min_panel_size']=kwargs.pop('min_panel_size',.15) + self.panels['spacing']=kwargs.pop('spacing',.08) + self.panels['top_margin']=kwargs.pop('top_margin',0.9) + self.panels['bottom_margin']=kwargs.pop('top_margin',0) + self.update(**kwargs) + + + def _get_schema(self): + """ + Returns a dictionary with the schema for a QuantFigure + + """ + d={} + layout_kwargs=dict((_,'') for _ in get_layout_kwargs()) + for _ in ('data','layout','theme','panels'): + d[_]={} + for __ in eval('__QUANT_FIGURE_{0}'.format(_.upper())): + layout_kwargs.pop(__,None) + d[_][__]=None + d['layout'].update(annotations=dict(values=[], + params=utils.make_dict_from_list(get_annotation_kwargs()))) + d['layout'].update(shapes=utils.make_dict_from_list(get_shapes_kwargs())) + [layout_kwargs.pop(_,None) for _ in get_annotation_kwargs()+get_shapes_kwargs()] + d['layout'].update(**layout_kwargs) + return d + + def _get_sliced(self,slice,df=None): + """ + Returns a sliced DataFrame + + Parameters + ---------- + slice : tuple(from,to) + from : str + to : str + States the 'from' and 'to' values which + will get rendered as df.ix[from:to] + df : DataFrame + If omitted then the QuantFigure.DataFrame is resampled. + """ + + df=self.df.copy() if df==None else df + if type(slice) not in (list,tuple): + raise Exception('Slice must be a tuple two values') + if len(slice)!=2: + raise Exception('Slice must be a tuple two values') + a,b=slice + a=None if a in ('',None) else utils.make_string(a) + b=None if b in ('',None) else utils.make_string(b) + return df.ix[a:b] + + def _get_resampled(self,rule,how={'ohlc':'last','volume':'sum'},df=None,**kwargs): + """ + Returns a resampled DataFrame + + Parameters + ---------- + rule : str + the offset string or object representing target conversion + for all aliases available see http://pandas.pydata.org/pandas-docs/stable/timeseries.html#offset-aliases + how : str or dict + states the form in which the resampling will be done. + Examples: + how={'volume':'sum'} + how='count' + df : DataFrame + If omitted then the QuantFigure.DataFrame is resampled. + kwargs + For more information see http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.resample.html + + """ + df=self.df.copy() if df is None else df + if rule==None: + return df + else: + if isinstance(how,dict): + if 'ohlc' in how: + v=how.pop('ohlc') + for _ in ['open','high','low','close']: + how[_]=v + _how=how.copy() + for _ in _how: + if _ not in self._d: + del how[_] + return df.resample(rule=rule,**kwargs).apply(how) + +
[docs] def update(self,**kwargs): + """ + Updates the values for a QuantFigure + The key-values are automatically assigned to the correct + section of the QuantFigure + """ + if 'columns' in kwargs: + self._d=ta._ohlc_dict(self.df,columns=kwargs.pop('columns',None)) + schema=self._get_schema() + annotations=kwargs.pop('annotations',None) + + if annotations: + self.layout['annotations']['values']=utils.make_list(annotations) + for k,v in list(kwargs.items()): + try: + utils.dict_update(self.__dict__,k,v,schema) + except: + self.kwargs.update({k:v})
+ +
[docs] def delete(self,*args): + """ + Deletes the values for a QuantFigure + The key-values are automatically deleted from the correct + section of the QuantFigure + """ + if args: + args=args[0] if utils.is_list(args[0]) else args + path=utils.dict_path(self.__dict__) + for _ in args: + if _ in self.__dict__.keys(): + raise Exception('"{0}" cannot be deleted'.format(_)) + + for a in args: + try: + if a in ('shapes'): + self.layout[a].clear() + elif a=='annotations': + self.layout['annotations']={'values':[],'params':{}} + else: + del reduce(dict.get, path[a],self.__dict__)[a] + except: + raise Exception('Key: {0} not found'.format(a))
+ + +
[docs] def figure(self,**kwargs): + """ + + Returns a Plotly figure + + """ + kwargs['asFigure']=True + return self.iplot(**kwargs)
+ + def _panel_domains(self,n=2,min_panel_size=.15,spacing=0.08,top_margin=1,bottom_margin=0): + """ + + Returns the panel domains for each axis + + """ + d={} + for _ in range(n+1,1,-1): + lower=round(bottom_margin+(min_panel_size+spacing)*(n+1-_),2) + d['yaxis{0}'.format(_)]=dict(domain=(lower,lower+min_panel_size)) + top=d['yaxis2']['domain'] + d['yaxis2']['domain']=(top[0],top_margin) + return d + + def _get_trendline(self,date0=None,date1=None,on=None,kind='trend',to_strfmt='%Y-%m-%d',from_strfmt='%d%b%y',**kwargs): + """ + Returns a trendline (line), support or resistance + + Parameters: + date0 : string + Trendline starting date + date1 : string + Trendline end date + on : string + Indicate the data series in which the + trendline should be based. + 'close' + 'high' + 'low' + 'open' + kind : string + Defines de kind of trendline + 'trend' + 'resistance' + 'support' + mode : string + Defines how the support/resistance will + be drawn + 'starttoened' : (x0,x1) + 'fromstart' : (x0,date0) + 'toend' : (date0,x1) + text : string + If passed, then an annotation will be added + to the trendline (at mid point) + from_strfmt : string + Defines the date formating in which + date0 and date1 are stated. + default: '%d%b%y' + to_strfmt : string + Defines the date formatting + to which it should be converted. + This should match the same format as the timeseries index. + default : '%Y-%m-%d' + """ + ann_values=copy.deepcopy(get_annotation_kwargs()) + ann_values.extend(['x','y']) + ann_kwargs=utils.check_kwargs(kwargs,ann_values,{},clean_origin=True) + def position(d0,d1): + return d0+(d1-d0)/2 + + date0=kwargs.pop('date',date0) + date0=date_tools.stringToString(date0,from_strfmt,to_strfmt) if '-' not in date0 else date0 + + if kind=='trend': + date1=date_tools.stringToString(date1,from_strfmt,to_strfmt) if '-' not in date1 else date1 + on='close' if not on else on + df=pd.DataFrame(self.df[self._d[on]]) + y0=kwargs.get('y0',df.ix[date0].values[0]) + y1=kwargs.get('y1',df.ix[date1].values[0]) + + + if kind in ('support','resistance'): + mode=kwargs.pop('mode','starttoend') + if not on: + on='low' if kind=='support' else 'high' + df=pd.DataFrame(self.df[self._d[on]]) + y0=kwargs.get('y0',df.ix[date0].values[0]) + y1=kwargs.get('y1',y0) + if mode=='starttoend': + date0=df.index[0] + date1=df.index[-1] + elif mode=='toend': + date1=df.index[-1] + elif mode=='fromstart': + date1=date0 + date0=df.index[0] + + if isinstance(date0,pd.Timestamp): + date0=date_tools.dateToString(date0,to_strfmt) + if isinstance(date1,pd.Timestamp): + date1=date_tools.dateToString(date1,to_strfmt) + d={'x0':date0,'x1':date1,'y0':y0,'y1':y1} + d.update(**kwargs) + shape=tools.get_shape(**d) + + + if ann_kwargs.get('text',False): + ann_kwargs['x']=ann_kwargs.get('x',date_tools.dateToString(position(date_tools.stringToDate(date0,to_strfmt),date_tools.stringToDate(date1,to_strfmt)),to_strfmt)) + ann_kwargs['y']=ann_kwargs.get('y',position(shape['y0'],shape['y1'])) + else: + ann_kwargs={} + return {'shape':shape,'annotation':ann_kwargs} + +
[docs] def add_trendline(self,date0,date1,on='close',text=None,**kwargs): + """ + Adds a trendline to the QuantFigure. + Given 2 dates, the trendline is connected on the data points + that correspond to those dates. + + Parameters: + date0 : string + Trendline starting date + date1 : string + Trendline end date + on : string + Indicate the data series in which the + trendline should be based. + 'close' + 'high' + 'low' + 'open' + text : string + If passed, then an annotation will be added + to the trendline (at mid point) + + kwargs: + from_strfmt : string + Defines the date formating in which + date0 and date1 are stated. + default: '%d%b%y' + to_strfmt : string + Defines the date formatting + to which it should be converted. + This should match the same format as the timeseries index. + default : '%Y-%m-%d' + """ + d={'kind':'trend','date0':date0,'date1':date1,'on':on,'text':text} + d.update(**kwargs) + self.trendlines.append(d)
+ +
[docs] def add_support(self,date,on='low',mode='starttoend',text=None,**kwargs): + """ + Adds a support line to the QuantFigure + + Parameters: + date0 : string + The support line will be drawn at the 'y' level + value that corresponds to this date. + on : string + Indicate the data series in which the + support line should be based. + 'close' + 'high' + 'low' + 'open' + mode : string + Defines how the support/resistance will + be drawn + 'starttoened' : (x0,x1) + 'fromstart' : (x0,date) + 'toend' : (date,x1) + text : string + If passed, then an annotation will be added + to the support line (at mid point) + + kwargs: + from_strfmt : string + Defines the date formating in which + date0 and date1 are stated. + default: '%d%b%y' + to_strfmt : string + Defines the date formatting + to which it should be converted. + This should match the same format as the timeseries index. + default : '%Y-%m-%d' + """ + d={'kind':'support','date':date,'mode':mode,'on':on,'text':text} + d.update(**kwargs) + self.trendlines.append(d)
+ +
[docs] def add_resistance(self,date,on='high',mode='starttoend',text=None,**kwargs): + """ + Adds a resistance line to the QuantFigure + + Parameters: + date0 : string + The resistance line will be drawn at the 'y' level + value that corresponds to this date. + on : string + Indicate the data series in which the + resistance should be based. + 'close' + 'high' + 'low' + 'open' + mode : string + Defines how the support/resistance will + be drawn + 'starttoened' : (x0,x1) + 'fromstart' : (x0,date) + 'toend' : (date,x1) + text : string + If passed, then an annotation will be added + to the resistance (at mid point) + + kwargs: + from_strfmt : string + Defines the date formating in which + date0 and date1 are stated. + default: '%d%b%y' + to_strfmt : string + Defines the date formatting + to which it should be converted. + This should match the same format as the timeseries index. + default : '%Y-%m-%d' + """ + d={'kind':'resistance','date':date,'mode':mode,'on':on,'text':text} + d.update(**kwargs) + self.trendlines.append(d)
+ +
[docs] def add_annotations(self,annotations,**kwargs): + """ + Add an annotation to the QuantFigure. + + Parameters: + annotations : dict or list(dict,) + Annotations can be on the form form of + {'date' : 'text'} + and the text will automatically be placed at the + right level on the chart + or + A Plotly fully defined annotation + + kwargs : + fontcolor : str + Text color for annotations + fontsize : int + Text size for annotations + textangle : int + Textt angle + See https://plot.ly/python/reference/#layout-annotations + for a complete list of valid parameters. + + """ + ann_kwargs=utils.check_kwargs(kwargs,get_annotation_kwargs(),{},clean_origin=True) + if type(annotations)==list: + self.layout['annotations']['values'].extend(annotations) + else: + self.layout['annotations']['values'].append(annotations) + if ann_kwargs: + self.layout['annotations']['params'].update(**ann_kwargs)
+ +
[docs] def add_shapes(self,**kwargs): + """ + Add a shape to the QuantFigure. + + kwargs : + hline : int, list or dict + Draws a horizontal line at the + indicated y position(s) + Extra parameters can be passed in + the form of a dictionary (see shapes) + vline : int, list or dict + Draws a vertical line at the + indicated x position(s) + Extra parameters can be passed in + the form of a dictionary (see shapes) + hspan : (y0,y1) + Draws a horizontal rectangle at the + indicated (y0,y1) positions. + Extra parameters can be passed in + the form of a dictionary (see shapes) + vspan : (x0,x1) + Draws a vertical rectangle at the + indicated (x0,x1) positions. + Extra parameters can be passed in + the form of a dictionary (see shapes) + shapes : dict or list(dict) + List of dictionaries with the + specifications of a given shape. + See help(cufflinks.tools.get_shape) + for more information + + """ + kwargs=utils.check_kwargs(kwargs,get_shapes_kwargs(),{},clean_origin=True) + for k,v in list(kwargs.items()): + if k in self.layout['shapes']: + if utils.is_list(v): + self.layout['shapes'][k].extend(v) + else: + self.layout['shapes'][k].append(v) + else: + self.layout['shapes'][k]=utils.make_list(v)
+ + # def add_study(self,name,params={}): + # if 'kind' in params: + # if params['kind'] in self._valid_studies: + # self.studies[name]=params + # else: + # raise Exception('Invalid study: {0}'.format(params['kind'])) + # else: + # raise Exception('Study kind required') + + def _add_study(self,study): + """ + Adds a study to QuantFigure.studies + + Parameters: + study : dict + {'kind':study_kind, + 'params':study_parameters, + 'display':display_parameters} + """ + str='{study} {name}({period})' if study['params'].get('str',None)==None else study['params']['str'] + study['params']['str']=str + + if not study['name']: + study['name']=ta.get_column_name(study['kind'].upper(),study=study['kind'], + str=str, + period=study['params'].get('periods',None), + column=study['params'].get('column',None)) + + + restore=study['display'].pop('restore',False) + + if restore: + _=self.studies.pop(study['kind'],None) + + if study['kind'] in self.studies: + try: + id='{0} ({1})'.format(study['kind'],study['params']['periods']) + except: + id='{0} ({1})'.format(study['kind'],'(2)') + else: + id=study['kind'] + + _id=id + n=1 + while id in self.studies: + id='{0} ({1})'.format(_id,n) + n+=1 + self.studies[id]=study + +
[docs] def add_volume(self,colorchange=True,column=None,name='',str='{name}',**kwargs): + """ + Add 'volume' study to QuantFigure.studies + + Parameters: + colorchange : bool + If true then each volume bar will have a fill color + depending on if 'base' had a positive or negative + change compared to the previous value + column :string + Defines the data column name that contains the volume data. + Default: 'volume' + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + + kwargs : + base : string + Defines the column which will define the + positive/negative changes (if colorchange=True). + Default = 'close' + up_color : string + Color for positive bars + down_color : string + Color for negative bars + """ + if not column: + column=self._d['volume'] + up_color=kwargs.pop('up_color',self.theme['up_color']) + down_color=kwargs.pop('down_color',self.theme['down_color']) + study={'kind':'volume', + 'name':name, + 'params':{'changecolor':True,'base':'close','column':column, + 'str':None}, + 'display':utils.merge_dict({'up_color':up_color,'down_color':down_color},kwargs)} + self._add_study(study)
+ +
[docs] def add_macd(self,fast_period=12,slow_period=26,signal_period=9,column=None, + name='',str=None,**kwargs): + """ + Add Moving Average Convergence Divergence (MACD) study to QuantFigure.studies + + Parameters: + fast_period : int + MACD Fast Period + slow_period : int + MACD Slow Period + signal_period : int + MACD Signal Period + column :string + Defines the data column name that contains the + data over which the study will be applied. + Default: 'close' + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + + if not column: + column=self._d['close'] + study={'kind':'macd', + 'name':name, + 'params':{'fast_period':fast_period,'slow_period':slow_period, + 'signal_period':signal_period,'column':column, + 'str':str}, + 'display':utils.merge_dict({'legendgroup':False,'colors':['blue','red']},kwargs)} + study['params']['periods']='[{0},{1},{2}]'.format(fast_period,slow_period,signal_period) + self._add_study(study)
+ + +
[docs] def add_sma(self,periods=20,column=None,name='', + str=None,**kwargs): + """ + Add Simple Moving Average (SMA) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + column :string + Defines the data column name that contains the + data over which the study will be applied. + Default: 'close' + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + if not column: + column=self._d['close'] + study={'kind':'sma', + 'name':name, + 'params':{'periods':periods,'column':column, + 'str':str}, + 'display':utils.merge_dict({'legendgroup':False},kwargs)} + self._add_study(study)
+ +
[docs] def add_rsi(self,periods=20,rsi_upper=70,rsi_lower=30,showbands=True,column=None, + name='',str=None,**kwargs): + """ + Add Relative Strength Indicator (RSI) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + rsi_upper : int + bounds [0,100] + Upper (overbought) level + rsi_lower : int + bounds [0,100] + Lower (oversold) level + showbands : boolean + If True, then the rsi_upper and + rsi_lower levels are displayed + column :string + Defines the data column name that contains the + data over which the study will be applied. + Default: 'close' + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + if not column: + column=self._d['close'] + str=str if str else '{name}({column},{period})' + + study={'kind':'rsi', + 'name':name, + 'params':{'periods':periods,'column':column, + 'str':str}, + 'display':utils.merge_dict({'legendgroup':True,'rsi_upper':rsi_upper, + 'rsi_lower':rsi_lower,'showbands':showbands},kwargs)} + self._add_study(study)
+ +
[docs] def add_bollinger_bands(self,periods=20,boll_std=2,fill=True,column=None,name='', + str='{name}({column},{period})',**kwargs): + """ + Add Bollinger Bands (BOLL) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + boll_std : int + Number of standard deviations for + the bollinger upper and lower bands + fill : boolean + If True, then the innner area of the + bands will filled + column :string + Defines the data column name that contains the + data over which the study will be applied. + Default: 'close' + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + fillcolor : string + Color to be used for the fill color. + Example: + 'rgba(62, 111, 176, .4)' + All formatting values available on iplot() + """ + if not column: + column=self._d['close'] + study={'kind':'boll', + 'name':name, + 'params':{'periods':periods,'boll_std':boll_std,'column':column, + 'str':str}, + 'display':utils.merge_dict({'legendgroup':True,'fill':fill},kwargs)} + self._add_study(study)
+ +
[docs] def add_ema(self,periods=20,column=None,str=None, + name='',**kwargs): + """ + Add Exponential Moving Average (EMA) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + column :string + Defines the data column name that contains the + data over which the study will be applied. + Default: 'close' + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + if not column: + column=self._d['close'] + study={'kind':'ema', + 'name':name, + 'params':{'periods':periods,'column':column, + 'str':str}, + 'display':utils.merge_dict({'legendgroup':False},kwargs)} + self._add_study(study)
+ +
[docs] def add_cci(self,periods=14,cci_upper=100,cci_lower=-100, + showbands=True,str=None,name='',**kwargs): + """ + Commodity Channel Indicator study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + cci_upper : int + Upper bands level + default : 100 + cci_lower : int + Lower band level + default : -100 + showbands : boolean + If True, then the cci_upper and + cci_lower levels are displayed + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + study={'kind':'cci', + 'name':name, + 'params':{'periods':periods,'high':self._d['high'],'low':self._d['low'],'close':self._d['close'], + 'str':str}, + 'display':utils.merge_dict({'legendgroup':True,'cci_upper':cci_upper, + 'cci_lower':cci_lower,'showbands':showbands},kwargs)} + self._add_study(study)
+ +
[docs] def add_adx(self,periods=14,str=None,name='',**kwargs): + """ + Add Average Directional Index (ADX) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + study={'kind':'adx', + 'name':name, + 'params':{'periods':periods,'high':self._d['high'],'low':self._d['low'],'close':self._d['close'], + 'str':str}, + 'display':utils.merge_dict({'legendgroup':False},kwargs)} + self._add_study(study)
+ +
[docs] def add_ptps(self,periods=14,af=0.2,initial='long',str=None,name='',**kwargs): + """ + Add Parabolic SAR (PTPS) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + af : float + acceleration factor + initial : 'long' or 'short' + Iniital position + default: long + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + study={'kind':'ptps', + 'name':name, + 'params':{'periods':periods,'high':self._d['high'],'low':self._d['low'],'af':af,'initial':initial, + 'str':str}, + 'display':utils.merge_dict({'legendgroup':False},kwargs)} + self._add_study(study)
+ +
[docs] def add_atr(self,periods=14,str=None,name='',**kwargs): + """ + Add Average True Range (ATR) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + study={'kind':'atr', + 'name':name, + 'params':{'periods':periods,'high':self._d['high'],'low':self._d['low'],'close':self._d['close'], + 'str':str}, + 'display':utils.merge_dict({'legendgroup':False},kwargs)} + self._add_study(study)
+ +
[docs] def add_dmi(self,periods=14,str='{name}({period})', + name='',**kwargs): + """ + Add Directional Movement Index (DMI) study to QuantFigure.studies + + Parameters: + periods : int or list(int) + Number of periods + name : string + Name given to the study + str : string + Label factory for studies + The following wildcards can be used: + {name} : Name of the column + {study} : Name of the study + {period} : Period used + Examples: + 'study: {study} - period: {period}' + kwargs: + legendgroup : bool + If true, all legend items are grouped into a + single one + All formatting values available on iplot() + """ + study={'kind':'dmi', + 'name':name, + 'params':{'periods':periods,'high':self._d['high'],'low':self._d['low'],'close':self._d['close'], + 'str':str}, + 'display':utils.merge_dict({'legendgroup':False},kwargs)} + self._add_study(study)
+ + + def _get_study_figure(self,study_id,**kwargs): + study=copy.deepcopy(self.studies[study_id]) + kind=study['kind'] + display=study['display'] + display['theme']=display.get('theme',self.theme['theme']) + params=study['params'] + name=study['name'] + params.update(include=False) + local_kwargs={} + _slice=kwargs.pop('slice',self.data.get('slice',(None,None))) + _resample=kwargs.pop('resample',self.data.get('resample',None)) + + df=self._get_sliced(_slice).copy() + if _resample: + if utils.is_list(_resample): + df=self._get_resampled(*_resample,df=df) + elif utils.is_dict(_resample): + _resample.update(df=df) + df=self._get_resampled(**_resample) + else: + df=self._get_resampled(_resample,df=df) + + def get_params(locals_list,params,display,append_study=True): + locals_list.append('legendgroup') + local_kwargs=utils.check_kwargs(display,locals_list,{},True) + display.update(kwargs) + if append_study: + display=dict([('study_'+k,v) for k,v in display.items()]) + params.update(display) + return local_kwargs,params + + if kind=='volume': + bar_colors=[] + local_kwargs,params=get_params([],params,display,False) + base=df[self._d[params['base']]] + up_color=colors.normalize(display['up_color']) if 'rgba' not in display['up_color'] else display['up_color'] + down_color=colors.normalize(display['down_color']) if 'rgba' not in display['down_color'] else display['down_color'] + study_kwargs=utils.kwargs_from_keyword(kwargs,{},'study') + + for i in range(len(base)): + if i != 0: + if base[i] > base[i-1]: + bar_colors.append(up_color) + else: + bar_colors.append(down_color) + else: + bar_colors.append(down_color) + fig=df[params['column']].figure(kind='bar',theme=params['theme'],**kwargs) + fig.data[0].update(marker=dict(color=bar_colors,line=dict(color=bar_colors)), + opacity=0.8) + + if kind in ('sma','ema','atr','adx','dmi','ptps'): + local_kwargs,params=get_params([],params,display) + fig=df.ta_figure(study=kind,**params) + + if kind=='boll': + local_kwargs,params=get_params(['fill','fillcolor'],params,display) + fig=df.ta_figure(study=kind,**params) + if local_kwargs['fill']: + fillcolor=local_kwargs.pop('fillcolor',fig.data[2].line.get('color','rgba(200,200,200,.1)')) + fillcolor=colors.to_rgba(fillcolor,.1) + fig.data[2].update(fill='tonexty',fillcolor=fillcolor) + + if kind=='rsi': + locals_list=['rsi_lower','rsi_upper','showbands'] + local_kwargs,params=get_params(locals_list,params,display) + fig=df.ta_figure(study=kind,**params) + # del fig.layout['shapes'] + # if local_kwargs['showbands']: + # up_color=kwargs.get('up_color',self.theme['up_color']) + # down_color=kwargs.get('down_color',self.theme['down_color']) + # for _ in ('rsi_lower','rsi_upper'): + # trace=fig.data[0].copy() + # trace.update(y=[local_kwargs[_] for x in trace['x']]) + # trace.update(name='') + # color=down_color if 'lower' in _ else up_color + # trace.update(line=dict(color=color,width=1)) + # fig.data.append(trace) + + if kind=='cci': + locals_list=['cci_lower','cci_upper','showbands'] + local_kwargs,params=get_params(locals_list,params,display) + fig=df.ta_figure(study=kind,**params) + # del fig.layout['shapes'] + # if local_kwargs['showbands']: + # up_color=kwargs.get('up_color',self.theme['up_color']) + # down_color=kwargs.get('down_color',self.theme['down_color']) + # for _ in ('cci_lower','cci_upper'): + # trace=fig.data[0].copy() + # trace.update(y=[local_kwargs[_] for x in trace['x']]) + # trace.update(name='') + # color=down_color if 'lower' in _ else up_color + # trace.update(line=dict(color=color,width=1)) + # fig.data.append(trace) + + if kind=='macd': + local_kwargs,params=get_params([],params,display) + fig=df.ta_figure(study=kind,**params) + + if local_kwargs.get('legendgroup',False): + fig.update_traces(legendgroup=name,showlegend=False) + fig.data[0].update(showlegend=True,name=name) + + ## Has Bands + if kind in ('rsi','cci'): + _upper='{0}_upper'.format(kind) + _lower='{0}_lower'.format(kind) + del fig.layout['shapes'] + if local_kwargs['showbands']: + up_color=kwargs.get('up_color',self.theme['up_color']) + down_color=kwargs.get('down_color',self.theme['down_color']) + for _ in (_lower,_upper): + trace=fig.data[0].copy() + trace.update(y=[local_kwargs[_] for x in trace['x']]) + trace.update(name='') + color=down_color if 'lower' in _ else up_color + trace.update(line=dict(color=color,width=1)) + fig.data.append(trace) + + + return fig + +
[docs] def iplot(self,**kwargs): + __QUANT_FIGURE_EXPORT = ['asFigure','asUrl','asImage','asPlot','display_image','validate', + 'sharing','online','filename','dimensions'] + + layout=copy.deepcopy(self.layout) + data=copy.deepcopy(self.data) + self_kwargs=copy.deepcopy(self.kwargs) + + data['slice']=kwargs.pop('slice',data.pop('slice',(None,None))) + data['resample']=kwargs.pop('resample',data.pop('resample',None)) + + asFigure=kwargs.pop('asFigure',False) + showstudies=kwargs.pop('showstudies',True) + study_kwargs=utils.kwargs_from_keyword(kwargs,{},'study',True) + datalegend=kwargs.pop('datalegend',data.pop('datalegend',data.pop('showlegend',True))) + export_kwargs = utils.check_kwargs(kwargs,__QUANT_FIGURE_EXPORT) + + _slice=data.pop('slice') + _resample=data.pop('resample') + + panel_data={} + for k in ['min_panel_size','spacing','top_margin','bottom_margin']: + panel_data[k]=kwargs.pop(k,self.panels[k]) + + d=self_kwargs + df=self._get_sliced(_slice).copy() + if _resample: + if utils.is_list(_resample): + df=self._get_resampled(*_resample,df=df) + elif utils.is_dict(_resample): + _resample.update(df=df) + df=self._get_resampled(**_resample) + else: + df=self._get_resampled(_resample,df=df) + + annotations=layout.pop('annotations') + shapes=layout.pop('shapes') + if not 'shapes' in shapes: + shapes['shapes']=[] + for trend in self.trendlines: + _trend=self._get_trendline(**trend) + shapes['shapes'].append(_trend['shape']) + if 'text' in _trend['annotation']: + annotations['values'].append(_trend['annotation']) + shape_kwargs=utils.check_kwargs(kwargs,get_shapes_kwargs(),{},clean_origin=True) + for k,v in list(shape_kwargs.items()): + if k in shapes: + shapes[k].append(v) + else: + shapes[k]=[v] + for _ in [data,layout, self._d, + self.theme,{'annotations':annotations['values']}, + annotations['params'],shapes]: + if _: + d=utils.merge_dict(d,_) + d=utils.deep_update(d,kwargs) + d=tools.updateColors(d) + fig=df.figure(**d) + if d['kind'] not in ('candle','candlestick','ohlc'): + fig.move_axis(yaxis='y2') + else: + if not datalegend: + fig.data[0]['decreasing'].update(showlegend=False) + fig.data[0]['increasing'].update(showlegend=False) + panel_data['n']=1 + which=fig.axis['which']['y'] + which.sort() + max_panel=int(which[-1][1:]) + figures=[] + if showstudies: + kwargs=utils.check_kwargs(kwargs,['theme','up_color','down_color'],{},False) + kwargs.update(**study_kwargs) + kwargs.update(slice=_slice,resample=_resample) + for k,v in list(self.studies.items()): + study_fig=self._get_study_figure(k,**kwargs) + if v['kind'] in ('boll','sma','ema','ptps'): + study_fig.move_axis(yaxis='y2') + if v['kind'] in ('rsi','volume','macd','atr','adx','cci','dmi'): + max_panel+=1 + panel_data['n']+=1 + study_fig.move_axis(yaxis='y{0}'.format(max_panel)) + figures.append(study_fig) + figures.append(fig) + fig=tools.merge_figures(figures) + fig['layout']['xaxis1']['anchor']='y2' + domains=self._panel_domains(**panel_data) + fig.layout.update(**domains) + if not d.get('rangeslider',False): + try: + del fig['layout']['yaxis1'] + except: + pass + if asFigure: + return fig + else: + return fig.iplot(**export_kwargs)
+ + def __getitem__(self,key): + return self.__dict__[key] + + def __repr__(self): + _d=self.__dict__.copy() + del _d['df'] + print(json.dumps(_d,sort_keys=True, indent=4)) + return ''
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/ta.html b/docs/html/_modules/cufflinks/ta.html new file mode 100644 index 0000000..36214a8 --- /dev/null +++ b/docs/html/_modules/cufflinks/ta.html @@ -0,0 +1,586 @@ + + + + + + + + cufflinks.ta — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.ta

+## TECHNICHAL ANALYSIS
+import pandas as pd
+import numpy as np
+# import talib
+from plotly.graph_objs import Figure
+from .utils import make_list
+
+
+
[docs]class StudyError(Exception): + pass
+ +def _ohlc_dict(df_or_figure,open='',high='',low='',close='',volume='', + validate='',**kwargs): + """ + Returns a dictionary with the actual column names that + correspond to each of the OHLCV values. + + df_or_figure : DataFrame or Figure + open : string + Column name to be used for OPEN values + high : string + Column name to be used for HIGH values + low : string + Column name to be used for LOW values + close : string + Column name to be used for CLOSE values + volume : string + Column name to be used for VOLUME values + validate : string + Validates that the stated column exists + Example: + validate='ohv' | Will ensure Open, High + and close values exist. + """ + c_dir={} + ohlcv=['open','high','low','close','volume'] + if type(df_or_figure)==pd.DataFrame: + cnames=df_or_figure.columns + elif type(df_or_figure)==Figure: + cnames=df_or_figure.axis['ref'].keys() + elif type(df_or_figure)==pd.Series: + cnames=[df_or_figure.name] + c_min=dict([(v.lower(),v) for v in cnames]) + for _ in ohlcv: + if _ in c_min.keys(): + c_dir[_]=c_min[_] + else: + for c in cnames: + if _ in c.lower(): + c_dir[_]=c + + if open: + c_dir['open']=open + if high: + c_dir['high']=high + if low: + c_dir['low']=low + if close: + c_dir['close']=close + if volume: + c_dir['volume']=volume + + for v in list(c_dir.values()): + if v not in cnames: + raise StudyError('{0} is not a valid column name'.format(v)) + + if validate: + errs=[] + val=validate.lower() + s_names=dict([(_[0],_) for _ in ohlcv]) + cols=[_[0] for _ in c_dir.keys()] + for _ in val: + if _ not in cols: + errs.append(s_names[_]) + if errs: + raise StudyError('Missing Columns: {0}'.format(', '.join(errs))) + + return c_dir + + +
[docs]def get_column_name(name,study=None,str=None,period=None,column=None,period_dict=None): + if str: + if period_dict: + if name in period_dict: + period=period_dict[name] + study='' if name.lower()==study.lower() else study + return str.format(study=study,period=period,column=column,name=name) + else: + return name
+ +
[docs]def validate(df,column=None): + if isinstance(df,pd.DataFrame): + if column is not None: + df=pd.DataFrame(df[column]) + _df=pd.DataFrame() + elif len(df.columns)>1: + raise StudyError("DataFrame needs to be a single column \n" + "Or the column name needs to be specified") + else: + df=df.copy() + _df=pd.DataFrame() + column=df.columns[0] + else: + df=pd.DataFrame(df) + _df=pd.DataFrame() + column=df.columns[0] + return df,_df,column
+ +
[docs]def rename(df,_df,study,periods,column,include,str,detail,output=None,period_dict=None): + d_name=dict([(i,get_column_name(i,study=study,str=str, + period=periods,column=column,period_dict=period_dict)) for i in _df.columns]) + + _df=_df.rename(columns=d_name) + if detail: + __df=_df + elif output: + __df=_df[[d_name[_] for _ in output]] + else: + __df=_df[d_name[study]] + + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ +""" + +INIDICATORS + +""" + +
[docs]def rsi(df,periods=14,column=None,include=True,str='{name}({column},{period})',detail=False,**kwargs): + def _rsi(df,periods,column,include,str,detail): + study='RSI' + df,_df,column=validate(df,column) + ## === talib ==== + # _df['RSI']=pd.Series(talib.RSI(df[column].values,periods),index=df.index) + ## === /talib ==== + + ## === pure python ==== + _df['Up']=df[column].diff().apply(lambda x:x if x>0 else 0) + _df['Down']=df[column].diff().apply(lambda x:-x if x<0 else 0) + _df['UpAvg']=_df['Up'].rolling(window=periods).mean() + _df['DownAvg']= _df['Down'].rolling(window=periods).mean() + _df['RSI']=100-(100/(1+_df['UpAvg']/_df['DownAvg'])) + ## === /pure python ==== + + return rename(df,_df,study,periods,column,include,str,detail) + column=make_list(column) + periods=make_list(periods) + __df=pd.concat([_rsi(df,column=x,periods=y,include=False,str=str,detail=detail) for y in periods for x in column],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ + +
[docs]def sma(df,periods=21,column=None,include=True,str='{name}({column},{period})',detail=False): + def _sma(df,periods,column,include,str,detail=False): + study='SMA' + df,_df,column=validate(df,column) + + ## === talib ==== + # _df['SMA']=pd.Series(talib.MA(df[column].values,periods),index=df.index) + ## === /talib ==== + + ## === pure python ==== + _df['SMA']=df[column].rolling(periods).mean() + ## === /pure python ==== + + return rename(df,_df,study,periods,column,include,str,detail) + column=make_list(column) + periods=make_list(periods) + __df=pd.concat([_sma(df,column=x,periods=y,include=False,str=str) for y in periods for x in column],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ +
[docs]def ema(df,periods=21,column=None,include=True,str='{name}({column},{period})',detail=False): + def _ema(df,periods,column,include,str,detail=False): + study='EMA' + df,_df,column=validate(df,column) + + ## === talib ==== + # _df['EMA']=pd.Series(talib.EMA(df[column].values,periods),index=df.index) + ## === /talib ==== + + ## === pure python ==== + _df['EMA']=df[column].ewm(span=periods,min_periods=periods,adjust=False).mean() + ## === /pure python ==== + + return rename(df,_df,study,periods,column,include,str,detail) + column=make_list(column) + periods=make_list(periods) + __df=pd.concat([_ema(df,column=x,periods=y,include=False,str=str) for y in periods for x in column],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ +
[docs]def dmi(df,periods=14,high='high',low='low',close='close',include=True,str='{name}({period})',**kwargs): + return adx(df,periods=periods,high=high,low=low,close=close,di=True,include=include,str=str,**kwargs)
+ +
[docs]def adx(df,periods=14,high='high',low='low',close='close',di=False,include=True,str='{name}({period})',**kwargs): + def _adx(df,periods,high,low,close,include,str,detail): + study='ADX' + _df=pd.DataFrame() + ## === talib ==== + # _df['ADX']=pd.Series(talib.ADX(df[high].values, + # df[low].values,df[close].values, + # periods),index=df.index) + ## === /talib ==== + + ## === pure python ==== + def smooth(col): + sm=col.rolling(periods).sum() + for _ in list(range(periods+1,len(col))): + sm.iloc[_]=sm.iloc[_-1]-(1.0*sm.iloc[_-1]/periods)+col.iloc[_] + return sm + + def smooth2(col): + sm=col.rolling(periods).mean() + for _ in list(range(periods*2,len(col))): + sm.iloc[_]=((sm.iloc[_-1]*(periods-1))+col[_])/periods + return sm + + _df['TR']=pd.DataFrame(dict(enumerate([df[high]-df[low],abs(df[high]-df[close].shift(1)), + abs(df[low]-df[close].shift(1))]))).apply(max,axis=1) + __df=pd.DataFrame(dict(enumerate([df[high]-df[high].shift(1),df[low].shift(1)-df[low]]))) + _df['DM+']=__df.apply(lambda x:max(x[0],0) if x[0]>x[1] else 0,axis=1) + _df['DM-']=__df.apply(lambda x:max(x[1],0) if x[1]>x[0] else 0,axis=1) + _df.iloc[0]=np.nan + _df_smooth=_df.apply(smooth) + + _df['DI+']=100.0*_df_smooth['DM+']/_df_smooth['TR'] + _df['DI-']=100.0*_df_smooth['DM-']/_df_smooth['TR'] + dx=pd.DataFrame(100*abs(_df['DI+']-_df['DI-'])/(_df['DI+']+_df['DI-'])) + + _df['ADX']=dx.apply(smooth2)[0] + ## === /pure python ==== + return rename(df,_df,study,periods,'',include,str,detail,output=output) + detail=kwargs.get('detail',False) + periods=make_list(periods) + output=['ADX','DI+','DI-'] if di else ['ADX'] + __df=pd.concat([_adx(df,periods=y,high=high,low=low,close=close,include=False,str=str,detail=detail) for y in periods],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ +
[docs]def atr(df,periods=14,high='high',low='low',close='close',include=True,str='{name}({period})',**kwargs): + def _atr(df,periods,high,low,close,include,str,detail=False): + study='ATR' + _df=pd.DataFrame() + ## === talib ==== + # _df['ATR']=pd.Series(talib.ATR(df[high].values, + # df[low].values, + # df[close].values, + # periods),index=df.index) + ## === /talib ==== + + ## === pure python ==== + _df['HmL']=df[high]-df[low] + _df['HmC']=abs(df[high]-df[close].shift(1)) + _df['LmC']=abs(df[low]-df[close].shift(1)) + _df['TR']=_df.apply(max,axis=1) + _df['ATR']=_df['TR'].rolling(periods).mean() + ## === /pure python ==== + return rename(df,_df,study,periods,'',include,str,detail) + periods=make_list(periods) + __df=pd.concat([_atr(df,periods=y,high=high,low=low,close=close,include=False,str=str) for y in periods],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ +
[docs]def ptps(df,periods=14,initial='long',af=.02,high='high',low='low',include=True,str='{name}({period})',**kwargs): + def _ptps(df,periods,high,low,include,str,detail): + study='PTPS' + _df=pd.DataFrame(columns=['SAR','LorS','EP','EP+-SAR','AF','AF_Diff','T_SAR','Reversal','LONG','SHORT'], + index=df.index) + _df=_df.reset_index() + + _df.loc[0,'LorS']=initial + _df.loc[0,'T_SAR']=None + _df.loc[0,'EP']=df[high][0] if initial=='long' else df[low][0] + _df.loc[0,'AF']=af + + for _ in range(1,len(df)): + # LorS - Long or Short + if _df['LorS'][_-1]=='long': + if _df['T_SAR'][_-1]>=df[low][_]: + _df.loc[_,'LorS']='short' + else: + _df.loc[_,'LorS']=_df.loc[_-1,'LorS'] + else: + if _df['T_SAR'][_-1]<=df[high][_]: + _df.loc[_,'LorS']='long' + else: + _df.loc[_,'LorS']=_df.loc[_-1,'LorS'] + # SAR - Stop and Reversal + if _==1: + _df.loc[1,'SAR']=df[low][0] if initial=='long' else df[high][0] + else: + _df.loc[_,'SAR']=_df['EP'][_-1] if _df['LorS'][_-1]!=_df['LorS'][_] else _df['T_SAR'][_-1] + + # EP - Extreme Price + if _df['LorS'][_]=='long': + if _df['SAR'][_]>=df[low][_]: + _df.loc[_,'EP']=df[low][_] + else: + _df.loc[_,'EP']=df[high][_] if df[high][_]>_df['EP'][_-1] else _df['EP'][_-1] + else: + if _df['SAR'][_]<=df[high][_]: + _df.loc[_,'EP']=df[high][_] + else: + _df.loc[_,'EP']=df[low][_] if df[low][_]<_df['EP'][_-1] else _df['EP'][_-1] + + # EP+-SAR - Extreme Price +/- Stop and Reversal + _df.loc[_,'EP+-SAR']=abs(_df['EP'][_]-_df['SAR'][_]) + + # AF - Acceleration Factor + if _df['LorS'][_]!=_df['LorS'][_-1]: + _df.loc[_,'AF']=af + else: + if _df['LorS'][_]=='long': + if _df['SAR'][_]>=df[low][_]: + _df.loc[_,'AF']=af + else: + if (df[high][_]>_df['EP'][_-1] if _df['LorS'][_]=='long' else df[low][_]<_df['EP'][_-1]): + _df.loc[_,'AF']=min(0.2,af+_df['AF'][_-1]) + else: + _df.loc[_,'AF']=_df['AF'][_-1] + else: + if _df['SAR'][_]<=df[high][_]: + _df.loc[_,'AF']=af + else: + if (df[high][_]>_df['EP'][_-1] if _df['LorS'][_]=='long' else df[low][_]<_df['EP'][_-1]): + _df.loc[_,'AF']=min(0.2,af+_df['AF'][_-1]) + else: + _df.loc[_,'AF']=_df['AF'][_-1] + # AF Diff + _df.loc[_,'AF_Diff']=_df['EP+-SAR'][_]*_df['AF'][_] + + # T_SAR - Tomorrow's Stop and Reversal + if _df['LorS'][_]=='long': + if _df['SAR'][_]>=df[low][_]: + _df.loc[_,'T_SAR']=max(_df['SAR'][_]-_df['AF_Diff'][_],df[high][_],df[high][_-1]) + else: + _df.loc[_,'T_SAR']=min(_df['SAR'][_]+_df['AF_Diff'][_],df[low][_],df[low][_-1]) + else: + if _df['SAR'][_]<=df[high][_]: + _df.loc[_,'T_SAR']=min(_df['SAR'][_]+_df['AF_Diff'][_],df[low][_],df[low][_-1]) + else: + _df.loc[_,'T_SAR']=max(_df['SAR'][_]-_df['AF_Diff'][_],df[low][_],df[low][_-1]) + + # Reversal + if _df['LorS'][_-1]=='long': + if _df['T_SAR'][_-1]>=df[low][_]: + _df.loc[_,'Reversal']=_df['T_SAR'][_-1] + else: + if _df['T_SAR'][_-1]<=df[high][_]: + _df.loc[_,'Reversal']=_df['T_SAR'][_-1] + + + _df['LONG']=_df.apply(lambda x:x['T_SAR'] if x['LorS']=='long' else np.nan,axis=1) + _df['SHORT']=_df.apply(lambda x:x['T_SAR'] if x['LorS']=='short' else np.nan,axis=1) + _df=_df.set_index('index') + + return rename(df,_df,study,periods,'',include,str,detail,output=output) + detail=kwargs.get('detail',False) + periods=make_list(periods) + output=['LONG','SHORT'] + __df=pd.concat([_ptps(df,periods=y,high=high,low=low,include=False,str=str,detail=detail) for y in periods],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ + +
[docs]def cci(df,periods=14,high='high',low='low',close='close',include=True,str='{name}({period})',**kwargs): + def _cci(df,periods,high,low,close,include,str,detail=False): + study='CCI' + _df=pd.DataFrame() + ## === talib ==== + # _df['CCI']=pd.Series(talib.CCI(df[high].values, + # df[low].values, + # df[close].values, + # periods),index=df.index) + ## === /talib ==== + + ## === pure python ==== + _df['tp']=df[[low,high,close]].mean(axis=1) + _df['avgTp']=_df['tp'].rolling(window=periods).mean() + mad = lambda x: np.fabs(x - x.mean()).mean() + _df['mad']=_df['tp'].rolling(window=periods).apply(mad) + _df['CCI']=(_df['tp']-_df['avgTp'])/(0.015*_df['mad']) + ## === /pure python ==== + + return rename(df,_df,study,periods,'',include,str,detail) + periods=make_list(periods) + __df=pd.concat([_cci(df,periods=y,high=high,low=low,close=close,include=False,str=str) for y in periods],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ +
[docs]def correl(df,periods=21,columns=None,include=True,str=None,detail=False,how='value',**correl_kwargs): + """ + how : string + value + pct_chg + diff + """ + def _correl(df,periods=21,columns=None,include=True,str=None,detail=False,**correl_kwargs): + study='CORREL' + df,_df,columns=validate(df,columns) + + _df['CORREL'] = df[columns[0]].rolling(window=periods,**correl_kwargs).corr(df[columns[1]]) + + str=str if str else 'CORREL({column1},{column2},{period})'.format(column1=columns[0],column2=columns[1],period=periods) + return rename(df,_df,study,periods,columns,include,str,detail) + columns=df.columns if not columns else columns + if len(columns) != 2: + raise StudyError("2 Columns need to be specified for a correlation study") + periods=make_list(periods) + if how=='pct_chg': + df=df[columns].pct_change() + elif how=='diff': + df=df[columns].diff() + __df=pd.concat([_correl(df,columns=columns,periods=y,include=False,str=str) for y in periods],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ +
[docs]def boll(df,periods=20,boll_std=2,column=None,include=True,str='{name}({column},{period})',detail=False,**boll_kwargs): + def _boll(df,periods,column): + study='BOLL' + df,_df,column=validate(df,column) + + ## === talib ==== + # upper,middle,lower=talib.BBANDS(df[column].values,periods,boll_std,boll_std) + # _df=pd.DataFrame({'SMA':middle,'UPPER':upper,'LOWER':lower},index=df.index) + ## === /talib ==== + + ## === pure python ==== + _df['SMA']=df[column].rolling(window=periods).mean() + _df['UPPER']=_df['SMA']+df[column].rolling(window=periods).std()*boll_std + _df['LOWER']=_df['SMA']-df[column].rolling(window=periods).std()*boll_std + ## === /pure python ==== + + return rename(df,_df,study,periods,column,False,str,detail,output=output) + column=make_list(column) + periods=make_list(periods) + output=['SMA','UPPER','LOWER'] + __df=pd.concat([_boll(df,column=x,periods=y) for y in periods for x in column],axis=1) + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ + +
[docs]def macd(df,fast_period=12,slow_period=26,signal_period=9,column=None,include=True,str=None,detail=False,**macd_kwargs): + periods='({0},{1},{2})'.format(fast_period,slow_period,signal_period) + def _macd(df,column,include): + study='MACD' + df,_df,column=validate(df,column) + + ## === talib ==== + # macd,signal,hist=talib.MACD(df[column].values,fast_period,slow_period,signal_period) + # _df=pd.DataFrame({'MACD':macd,'SIGNAL':signal},index=df.index) + ## === /talib === + + ## === pure python === + def __macd(s,periods): + macd_f=[] + factor=2.0/(periods+1) + macd_f.append(s[0]) + for i in range(1,len(s)): + macd_f.append(s[i]*factor+macd_f[i-1]*(1-factor)) + return pd.Series(macd_f,index=s.index) + _df['FAST']=__macd(df[column],fast_period) + _df['SLOW']=__macd(df[column],slow_period) + _df['MACD']=_df['FAST']-_df['SLOW'] + _df['SIGNAL']=__macd(_df['MACD'],signal_period) + ## === /pure python === + + period_dict={'FAST':fast_period, + 'SLOW':slow_period, + 'MACD':'[{0},{1}]'.format(fast_period,slow_period), + 'SIGNAL':signal_period} + return rename(df,_df,study,periods,column,include,str,detail,output=output,period_dict=period_dict) + + if slow_period<fast_period: + raise StudyError("slow_period cannot be less than fast_period") + column=make_list(column) + str=str if str else '{name}({column},{period})' + output=['MACD','SIGNAL'] + __df=pd.concat([_macd(df,column=x,include=False) for x in column],axis=1) + + if include: + return pd.concat([df,__df],axis=1) + else: + return __df
+ + +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/tools.html b/docs/html/_modules/cufflinks/tools.html new file mode 100644 index 0000000..90292fe --- /dev/null +++ b/docs/html/_modules/cufflinks/tools.html @@ -0,0 +1,1642 @@ + + + + + + + + cufflinks.tools — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.tools

+import copy
+
+import numpy as np
+import pandas as pd
+import plotly.offline as py_offline
+import plotly.plotly as py
+import plotly.graph_objs as go
+
+from . import auth, ta
+from .colors import normalize, to_rgba
+from .themes import THEMES
+from .utils import (check_kwargs, deep_update, dict_replace_keyword,
+                    kwargs_from_keyword, merge_dict)
+
+__LAYOUT_VALID_KWARGS = ['legend','logx','logy','logz','layout_update','title',
+					'xrange','yrange','zrange','rangeselector','rangeslider','showlegend','fontfamily']
+
+__SHAPES_KWARGS = ['vline','hline','shapes','hspan','vspan']
+
+__GEO_KWARGS=['projection','showframe','showlakes','coastlinecolor','countrywidth','countrycolor',
+			 'showsubunits','bgcolor','showrivers','subunitcolor','showcountries','riverwidth','scope',
+			 'rivercolor','lataxis','subunitwidth','showocean','oceancolor','lakecolor','showland','lonaxis',
+			 'framecolor','coastlinewidth','landcolor','showcoastlines','framewidth','resolution','projection_type']
+
+__ANN_KWARGS=['xref','yref','text','showarrow',
+				 'arrowhead','ax','ay','textangle','arrowsize',
+				 'arrowwidth','arrowcolor','fontcolor','fontsize','xanchor','yanchor','align']
+
+__LAYOUT_AXIS=['autorange','autotick','backgroundcolor','categoryarray','categoryarraysrc','categoryorder',
+			   'dtick','exponentformat','fixedrange','gridcolor','gridwidth','hoverformat','linecolor','linewidth',
+			   'mirror','nticks','showaxeslabels','showbackground','showexponent','showgrid','showline','showspikes',
+			   'showticklabels','showtickprefix','showticksuffix','spikecolor','spikesides','spikethickness',
+			   'tick0','tickangle','tickcolor','tickfont','tickformat','ticklen','tickmode','tickprefix','ticks',
+			   'ticksuffix','ticktext','ticktextsrc','tickvals','tickvalssrc','tickwidth','titlefont',
+			   'zeroline','zerolinecolor','zerolinewidth']
+
+__LAYOUT_AXIS_X=['xaxis_'+_ for _ in go.XAxis().__dir__()]
+__LAYOUT_AXIS_Y=['yaxis_'+_ for _ in go.YAxis().__dir__()]
+
+__LAYOUT_KWARGS = []
+[__LAYOUT_KWARGS.extend(_) for _ in [__LAYOUT_VALID_KWARGS,__SHAPES_KWARGS,__GEO_KWARGS,__ANN_KWARGS,__LAYOUT_AXIS,
+									 __LAYOUT_AXIS_X,__LAYOUT_AXIS_Y]]
+
+
[docs]def getTheme(theme=None): + """ + Returns a theme definition. + + To see the colors translated (hex) use + cufflinks.getLayout(theme) instead. + """ + if not theme: + theme = auth.get_config_file()['theme'] + + if theme in THEMES: + return copy.deepcopy(THEMES[theme]) + else: + raise Exception("Invalid Theme: {0}".format(theme))
+ +
[docs]def getThemes(): + """ + Returns the list of available themes + """ + return list(THEMES.keys())
+ +
[docs]def getLayout(kind=None,theme=None,title='',xTitle='',yTitle='',zTitle='',barmode='',bargap=None,bargroupgap=None, + margin=None, dimensions=None, width=None, height=None, + annotations=None,is3d=False,**kwargs): + """ + Generates a plotly Layout + + Parameters: + ----------- + theme : string + Layout Theme + solar + pearl + white + title : string + Chart Title + xTitle : string + X Axis Title + yTitle : string + Y Axis Title + zTitle : string + Z Axis Title + Applicable only for 3d charts + barmode : string + Mode when displaying bars + group + stack + overlay + bargap : float + Sets the gap between bars + [0,1) + Applicabe for bar and histogram plots + bargroupgap : float + Set the gap between groups + [0,1) + Applicabe for bar and histogram plots + gridcolor : string + grid color + zerolinecolor : string + zero line color + margin : dict or tuple + Dictionary (l,r,b,t) or + Tuple containing the left, + right, bottom and top margins + dimensions : tuple + Dimensions of figure + annotations : dict or list + Dictionary of annotations + {x_point : text} + or + List of Plotly Annotations + is3d : bool + Indicates if the layout is for a 3D chart + + Other Kwargs + ============ + + Shapes + hline : int, list or dict + Draws a horizontal line at the + indicated y position(s) + Extra parameters can be passed in + the form of a dictionary (see shapes) + vline : int, list or dict + Draws a vertical line at the + indicated x position(s) + Extra parameters can be passed in + the form of a dictionary (see shapes) + hspan : (y0,y1) + Draws a horizontal rectangle at the + indicated (y0,y1) positions. + Extra parameters can be passed in + the form of a dictionary (see shapes) + vspan : (x0,x1) + Draws a vertical rectangle at the + indicated (x0,x1) positions. + Extra parameters can be passed in + the form of a dictionary (see shapes) + shapes : dict or list(dict) + List of dictionaries with the + specifications of a given shape. + See help(cufflinks.tools.get_shape) + for more information + + Axis Ranges + xrange : [lower_bound,upper_bound] + Sets the range for the x axis + yrange : [lower_bound,upper_bound] + Sets the range for the y axis + zrange : [lower_bound,upper_bound] + Sets the range for the z axis + + Explicit Layout Updates + layout_update : dict + The layout will be modified with all + the explicit values stated in the + dictionary + + Range Selector + rangeselector : dict + Defines a rangeselector object + see help(cf.tools.get_range_selector) for more information + Example: + {'steps':['1y','2 months','5 weeks','ytd','2mtd'], + 'axis':'xaxis1', 'bgcolor' : ('blue',.3), + 'x': 0.2 , 'y' : 0.9} + + Range Slider + rangeslider : bool or dict + Defines if a rangeslider is displayed + If bool: + True : Makes it visible + if dict: + Rangeslider object + Example: + {'bgcolor':('blue',.3),'autorange':True} + + Annotations + fontcolor : str + Text color for annotations + fontsize : int + Text size for annotations + textangle : int + Textt angle + See https://plot.ly/python/reference/#layout-annotations + for a complete list of valid parameters. + """ + + + for key in list(kwargs.keys()): + if key not in __LAYOUT_KWARGS: + raise Exception("Invalid keyword : '{0}'".format(key)) + + if not theme: + theme = auth.get_config_file()['theme'] + + theme_data = getTheme(theme) + layout=go.Layout(theme_data['layout']) + layout['xaxis1'].update({'title':xTitle}) + layout['yaxis1'].update({'title':yTitle}) + + fontfamily=kwargs.pop('fontfamily',None) + if fontfamily: + deep_update(layout,{'font':{'family':fontfamily}}) + + + if barmode: + layout.update({'barmode':barmode}) + if bargroupgap: + layout.update({'bargroupgap':bargroupgap}) + if bargap: + layout.update(bargap=bargap) + if title: + layout.update({'title':title}) + if annotations: + layout.update({'annotations':annotations}) + + + def update_axis(layout,axis='xy',**vals): + for _x in axis: + for k,v in list(vals.items()): + if v==None: + vals.pop(k) + for k in layout: + if '{0}{1}'.format(_x,'axis') in k: + layout[k].update(**vals) + return layout + + axis_kwargs=check_kwargs(kwargs,__LAYOUT_AXIS,{},True) + xaxis_kwargs=kwargs_from_keyword(kwargs,{},'xaxis',True) + yaxis_kwargs=kwargs_from_keyword(kwargs,{},'yaxis',True) + + for _x,_vals in (('xy',axis_kwargs),('x',xaxis_kwargs),('y',yaxis_kwargs)): + layout=update_axis(layout,_x,**_vals) + + if margin: + if isinstance(margin,dict): + margin=margin + else: + margin=dict(list(zip(('l','r','b','t'),margin))) + layout.update(margin=margin) + + if dimensions: + layout.update(width=dimensions[0]) + layout.update(height=dimensions[1]) + + if height: + layout.update(height=height) + if width: + layout.update(width=width) + if is3d: + if '3d' in theme_data: + layout=deep_update(layout,theme_data['3d']) + zaxis=layout['xaxis1'].copy() + zaxis.update(title=zTitle) + scene=go.Scene(xaxis=layout['xaxis1'].copy(),yaxis=layout['yaxis1'].copy(),zaxis=zaxis) + layout.update(scene=scene) + del layout['xaxis1'] + del layout['yaxis1'] + + ## Axis Range + for r in ['x','y','z']: + if '{0}range'.format(r) in kwargs: + if is3d: + layout['scene']['{0}axis'.format(r)].update(range=kwargs['{0}range'.format(r)]) + else: + layout['{0}axis1'.format(r)].update(range=kwargs['{0}range'.format(r)]) + + # Need to update this for an add_axis approach. + if kind in ('candlestick','ohlc','candle'): + layout['yaxis2']=layout['yaxis1'].copy() + layout['yaxis1'].update(showticklabels=False) + + ## Kwargs + + if 'legend' in kwargs: + if type(kwargs['legend'])==bool: + layout['showlegend']=kwargs['legend'] + elif type(kwargs['legend'])==str: + if kwargs['legend']=='top': + layout['legend'].update(orientation='h',yanchor='bottom',x=.3,y=.95) + elif kwargs['legend']=='bottom': + layout['legend'].update(orientation='h',yanchor='bottom',x=.3,y=-0.5) + layout['showlegend']=True + else: + layout['legend']=kwargs['legend'] + layout['showlegend']=True + + if 'showlegend' in kwargs: + layout['showlegend']=kwargs['showlegend'] + + # Logarithmic Axis + for _ in ['x','y','z']: + if 'log{0}'.format(_) in kwargs: + if is3d: + if kwargs['log{0}'.format(_)]: + layout['scene']['{0}axis'.format(_)]['type']='log' + else: + if kwargs['log{0}'.format(_)]: + layout['{0}axis1'.format(_)]['type']='log' + + # Shapes + + if any(k in kwargs for k in ['vline','hline','shapes','hspan','vspan']): + shapes=[] + + def get_shapes(xline): + orientation=xline[0] + xline=kwargs[xline] + if isinstance(xline,list): + for x_i in xline: + if isinstance(x_i,dict): + x_i['kind']='line' + shapes.append(get_shape(**x_i)) + else: + if orientation=='h': + shapes.append(get_shape(kind='line',y=x_i)) + else: + shapes.append(get_shape(kind='line',x=x_i)) + elif isinstance(xline,dict): + shapes.append(get_shape(**xline)) + else: + if orientation=='h': + shapes.append(get_shape(kind='line',y=xline)) + else: + shapes.append(get_shape(kind='line',x=xline)) + + def get_span(xspan): + orientation=xspan[0] + xspan=kwargs[xspan] + if isinstance(xspan,list): + for x_i in xspan: + if isinstance(x_i,dict): + x_i['kind']='rect' + shapes.append(get_shape(**x_i)) + else: + v0,v1=x_i + if orientation=='h': + shapes.append(get_shape(kind='rect',y0=v0,y1=v1,fill=True,opacity=.5)) + else: + shapes.append(get_shape(kind='rect',x0=v0,x1=v1,fill=True,opacity=.5)) + elif isinstance(xspan,dict): + xspan['kind']='rect' + shapes.append(get_shape(**xspan)) + elif isinstance(xspan,tuple): + v0,v1=xspan + if orientation=='h': + shapes.append(get_shape(kind='rect',y0=v0,y1=v1,fill=True,opacity=.5)) + else: + shapes.append(get_shape(kind='rect',x0=v0,x1=v1,fill=True,opacity=.5)) + else: + raise Exception('Invalid value for {0}span: {1}'.format(orientation,xspan)) + + if 'hline' in kwargs: + get_shapes('hline') + if 'vline' in kwargs: + get_shapes('vline') + if 'hspan' in kwargs: + get_span('hspan') + if 'vspan' in kwargs: + get_span('vspan') + if 'shapes' in kwargs: + shapes_=kwargs['shapes'] + if isinstance(shapes_,list): + for i in shapes_: + shp=i if 'type' in i else get_shape(**i) + shapes.append(shp) + elif isinstance(shapes_,dict): + shp=shapes_ if 'type' in shapes_ else get_shape(**shapes_) + shapes.append(shp) + else: + raise Exception("Shapes need to be either a dict or list of dicts") + + + layout['shapes']=shapes + + # Maps + if kind in ('choropleth','scattergeo'): + kw=check_kwargs(kwargs,__GEO_KWARGS) + defaults={'projection':{'type':'equirectangular'},'showframe':False,'showcoastlines':False} + for k,v in list(defaults.items()): + if k not in kw: + kw[k]=v + kw_=kwargs_from_keyword(kw,{},'projection') + deep_update(kw,kw_) + layout['geo']=kw + del layout['xaxis1'] + del layout['yaxis1'] + if not margin: + layout['margin']={'autoexpand':True} + + # Range Selector + if 'rangeselector' in kwargs: + rs=kwargs['rangeselector'] + if 'axis' in rs: + axis=rs['axis'] + del rs['axis'] + else: + axis='xaxis1' + layout[axis]['rangeselector']=get_range_selector(**rs) + + # Range Slider + if 'rangeslider' in kwargs: + if type(kwargs['rangeslider'])==bool: + if kwargs['rangeslider']: + layout['xaxis1']['rangeslider']=dict(visible=kwargs['rangeslider']) + else: + layout['xaxis1']['rangeslider']=dict(visible=False) + # layout['yaxis1'].update(domain=(0,0)) + else: + layout['xaxis1']['rangeslider']=kwargs['rangeslider'] + else: + if kind in ('ohlc','candle','candlestick'): + layout['xaxis1']['rangeslider']=dict(visible=False) + # layout['yaxis1'].update(domain=(0,0)) + + + + # Explicit Updates + + if 'layout_update' in kwargs: + layout=deep_update(layout,kwargs['layout_update']) + + def updateColors(layout): + for k,v in list(layout.items()): + if isinstance(v,dict): + updateColors(v) + else: + if isinstance(v,list): + for _ in v: + if isinstance(_,dict): + updateColors(_) + if 'color' in k.lower(): + if 'rgba' not in v: + layout[k]=normalize(v) + return layout + + + return updateColors(layout)
+ + +
[docs]def getAnnotations(df,annotations,kind='lines',theme=None,**kwargs): + """ + Generates an annotations object + + Parameters: + ----------- + df : DataFrame + Original DataFrame of values + annotations : dict or list + Dictionary of annotations + {x_point : text} + or + List of Plotly annotations + """ + + + + + + for key in list(kwargs.keys()): + if key not in __ANN_KWARGS: + raise Exception("Invalid keyword : '{0}'".format(key)) + + l=[] + theme_data = getTheme(theme) + + kwargs['fontcolor']=kwargs.pop('fontcolor',theme_data['annotations']['fontcolor']) + kwargs['arrowcolor']=kwargs.pop('arrowcolor',theme_data['annotations']['arrowcolor']) + kwargs['fontsize']=kwargs.pop('fontsize',12) + + def check_ann(annotation): + local_list=[] + try: + _annotation=dict_replace_keyword({},'font',annotation,False) + _annotation=dict_replace_keyword(_annotation,'font',kwargs,False) + local_list.append(go.Annotation(_annotation)) + + except: + if 'title' in annotation: + local_list.append( + go.Annotation( + text=annotation['title'], + showarrow=False, + x=0, + y=1, + xref='paper', + yref='paper', + font={'size':24 if not 'fontsize' in kwargs else kwargs['fontsize']} + ) + ) + del annotation['title'] + + for k,v in list(annotation.items()): + if kind in ('candlestick','ohlc','candle'): + d=ta._ohlc_dict(df) + maxv=df[d['high']].ix[k] + yref='y2' + else: + maxv=df.ix[k].sum() if k in df.index else 0 + yref='y1' + ann=go.Annotation( + x=k, + y=maxv, + xref='x', + yref=yref, + text=v, + showarrow=True, + arrowhead=7, + ax=0, + ay=-100, + textangle=-90 + ) + local_list.append(ann) + + _l=[] + for i in local_list: + _l.append(dict_replace_keyword(i,'font',kwargs,True)) + + local_list=_l + + return local_list + + if not isinstance(annotations,list): + annotations=[annotations] + _list_ann=[] + for ann in annotations: + _list_ann.extend(check_ann(ann)) + return go.Annotations(_list_ann)
+ + +
[docs]def strip_figures(figure): + """ + Strips a figure into multiple figures with a trace on each of them + + Parameters: + ----------- + figure : Figure + Plotly Figure + """ + fig=[] + for trace in figure['data']: + fig.append(go.Figure(data=[trace],layout=figure['layout'])) + return fig
+ + +
[docs]def get_base_layout(figs): + """ + Generates a layout with the union of all properties of multiple + figures' layouts + + Parameters: + ----------- + fig : list(Figures) + List of Plotly Figures + """ + layout={} + for fig in figs: + for k,v in list(fig['layout'].items()): + layout[k]=v + return layout
+ +
[docs]def figures(df,specs,asList=False): + """ + Generates multiple Plotly figures for a given DataFrame + + Parameters: + ----------- + df : DataFrame + Pandas DataFrame + specs : list(dict) + List of dictionaries with the properties + of each figure. + All properties avaialbe can be seen with + help(cufflinks.pd.DataFrame.iplot) + asList : boolean + If True, then a list of figures is returned. + Otherwise a single (merged) figure is returned. + Default : False + """ + figs=[] + for spec in specs: + figs.append(df.figure(**spec)) + if asList: + return figs + else: + return merge_figures(figs)
+ +
[docs]def merge_figures(figures): + """ + Generates a single Figure from a list of figures + + Parameters: + ----------- + figures : list(Figures) + List of figures to be merged. + """ + figure=go.Figure() + data=go.Data() + for fig in figures: + for trace in fig['data']: + data.append(trace) + layout=get_base_layout(figures) + figure['data']=data + figure['layout']=layout + return figure
+ +
[docs]def subplots(figures,shape=None, + shared_xaxes=False, shared_yaxes=False, + start_cell='top-left', theme=None,base_layout=None, + **kwargs): + """ + Generates a subplot view for a set of figures + This is a wrapper for plotly.tools.make_subplots + + Parameters: + ----------- + figures : [Figures] + List of Plotly Figures + shape : (rows,cols) + Tuple indicating the size of rows and columns + If omitted then the layout is automatically set + shared_xaxes : bool + Assign shared x axes. + If True, subplots in the same grid column have one common + shared x-axis at the bottom of the grid. + shared_yaxes : bool + Assign shared y axes. + If True, subplots in the same grid row have one common + shared y-axis on the left-hand side of the grid. + start_cell : string + 'bottom-left' + 'top-left' + Choose the starting cell in the subplot grid used to set the + domains of the subplots. + theme : string + Layout Theme + solar + pearl + white + see cufflinks.getThemes() for all + available themes + base_layout : layout (dict) + Layout to be used as base where the subplots will be + added + subplot_titles : list(string) + List of strings that contains the titles of each + plot. + horizontal_spacing : float + [0,1] + Space between subplot columns. + vertical_spacing : float + Space between subplot rows. + specs : list of dicts + Subplot specifications. + ex1: specs=[[{}, {}], [{'colspan': 2}, None]] + ex2: specs=[[{'rowspan': 2}, {}], [None, {}]] + + - Indices of the outer list correspond to subplot grid rows + starting from the bottom. The number of rows in 'specs' + must be equal to 'rows'. + + - Indices of the inner lists correspond to subplot grid columns + starting from the left. The number of columns in 'specs' + must be equal to 'cols'. + + - Each item in the 'specs' list corresponds to one subplot + in a subplot grid. (N.B. The subplot grid has exactly 'rows' + times 'cols' cells.) + + - Use None for blank a subplot cell (or to move pass a col/row span). + + - Note that specs[0][0] has the specs of the 'start_cell' subplot. + + - Each item in 'specs' is a dictionary. + The available keys are: + + * is_3d (boolean, default=False): flag for 3d scenes + * colspan (int, default=1): number of subplot columns + for this subplot to span. + * rowspan (int, default=1): number of subplot rows + for this subplot to span. + * l (float, default=0.0): padding left of cell + * r (float, default=0.0): padding right of cell + * t (float, default=0.0): padding right of cell + * b (float, default=0.0): padding bottom of cell + + - Use 'horizontal_spacing' and 'vertical_spacing' to adjust + the spacing in between the subplots. + + insets : list of dicts + Inset specifications. + + - Each item in 'insets' is a dictionary. + The available keys are: + + * cell (tuple, default=(1,1)): (row, col) index of the + subplot cell to overlay inset axes onto. + * is_3d (boolean, default=False): flag for 3d scenes + * l (float, default=0.0): padding left of inset + in fraction of cell width + * w (float or 'to_end', default='to_end') inset width + in fraction of cell width ('to_end': to cell right edge) + * b (float, default=0.0): padding bottom of inset + in fraction of cell height + * h (float or 'to_end', default='to_end') inset height + in fraction of cell height ('to_end': to cell top edge) + """ + if not isinstance(figures,list): + figures=[figures] + + if shape: + rows,cols=shape + if len(figures)>rows*cols: + raise Exception("Invalid shape for the number of figures given") + else: + if len(figures)==1: + cols=1 + rows=1 + else: + cols=2 + rows=len(figures)//2+len(figures)%2 + sp=get_subplots(rows=rows,cols=cols, + shared_xaxes=shared_xaxes, shared_yaxes=shared_yaxes, + start_cell=start_cell, theme=theme,base_layout=base_layout, + **kwargs) + list_ref=(col for row in sp._grid_ref for col in row) + for i in range(len(figures)): + while True: + lr=next(list_ref) + if lr is not None: + break + for _ in figures[i]['data']: + for axe in lr: + _.update({'{0}axis'.format(axe[0]):axe}) + sp['data'].append(_) + # Remove extra plots + for k in list(sp['layout'].keys()): + try: + if int(k[-1])>len(figures): + del sp['layout'][k] + except: + pass + + # Check for non-cartesian plots + data=sp['data'] + layout=sp['layout'] + for d in data: + if d['type']=='pie': + d['domain']={} + d['domain']['x']=layout['xaxis{0}'.format(d['xaxis'][1:])]['domain'] + d['domain']['y']=layout['yaxis{0}'.format(d['yaxis'][1:])]['domain'] + return sp
+ + +
[docs]def get_subplots(rows=1,cols=1, + shared_xaxes=False, shared_yaxes=False, + start_cell='top-left', theme=None,base_layout=None, + **kwargs): + + """ + Generates a subplot view for a set of figures + + Parameters: + ----------- + rows : int + Number of rows + cols : int + Number of cols + shared_xaxes : bool + Assign shared x axes. + If True, subplots in the same grid column have one common + shared x-axis at the bottom of the gird. + shared_yaxes : bool + Assign shared y axes. + If True, subplots in the same grid row have one common + shared y-axis on the left-hand side of the gird. + start_cell : string + 'bottom-left' + 'top-left' + Choose the starting cell in the subplot grid used to set the + domains of the subplots. + theme : string + Layout Theme + solar + pearl + white + see cufflinks.getThemes() for all + available themes + horizontal_spacing : float + [0,1] + Space between subplot columns. + vertical_spacing : float + Space between subplot rows. + specs : list of dicts + Subplot specifications. + ex1: specs=[[{}, {}], [{'colspan': 2}, None]] + ex2: specs=[[{'rowspan': 2}, {}], [None, {}]] + + - Indices of the outer list correspond to subplot grid rows + starting from the bottom. The number of rows in 'specs' + must be equal to 'rows'. + + - Indices of the inner lists correspond to subplot grid columns + starting from the left. The number of columns in 'specs' + must be equal to 'cols'. + + - Each item in the 'specs' list corresponds to one subplot + in a subplot grid. (N.B. The subplot grid has exactly 'rows' + times 'cols' cells.) + + - Use None for blank a subplot cell (or to move pass a col/row span). + + - Note that specs[0][0] has the specs of the 'start_cell' subplot. + + - Each item in 'specs' is a dictionary. + The available keys are: + + * is_3d (boolean, default=False): flag for 3d scenes + * colspan (int, default=1): number of subplot columns + for this subplot to span. + * rowspan (int, default=1): number of subplot rows + for this subplot to span. + * l (float, default=0.0): padding left of cell + * r (float, default=0.0): padding right of cell + * t (float, default=0.0): padding right of cell + * b (float, default=0.0): padding bottom of cell + + - Use 'horizontal_spacing' and 'vertical_spacing' to adjust + the spacing in between the subplots. + + insets : list of dicts + Inset specifications. + + - Each item in 'insets' is a dictionary. + The available keys are: + + * cell (tuple, default=(1,1)): (row, col) index of the + subplot cell to overlay inset axes onto. + * is_3d (boolean, default=False): flag for 3d scenes + * l (float, default=0.0): padding left of inset + in fraction of cell width + * w (float or 'to_end', default='to_end') inset width + in fraction of cell width ('to_end': to cell right edge) + * b (float, default=0.0): padding bottom of inset + in fraction of cell height + * h (float or 'to_end', default='to_end') inset height + in fraction of cell height ('to_end': to cell top edge) + """ + + if not theme: + theme = auth.get_config_file()['theme'] + + layout= base_layout if base_layout else getLayout(theme) + sp=py.plotly.tools.make_subplots(rows=rows,cols=cols,shared_xaxes=shared_xaxes, + shared_yaxes=shared_yaxes,print_grid=False, + start_cell=start_cell,**kwargs) + for k,v in list(layout.items()): + if not isinstance(v,go.XAxis) and not isinstance(v,go.YAxis): + sp['layout'].update({k:v}) + + # if 'subplot_titles' in kwargs: + # if 'annotations' in layout: + # annotation=sp['layout']['annotations'][0] + # else: + # annotation=getLayout(theme,annotations=[Annotation(text='')])['annotations'] + # for ann in sp['layout']['annotations']: + # ann.update(font=dict(color=annotation['font']['color'])) + + def update_items(sp_item,layout,axis): + for k,v in list(layout[axis].items()): + sp_item.update({k:v}) + + for k,v in list(sp['layout'].items()): + if isinstance(v,go.XAxis): + update_items(v,layout,'xaxis1') + elif isinstance(v,go.YAxis): + update_items(v,layout,'xaxis1') + + return sp
+ +# Candlesticks and OHLC + + +
[docs]def get_ohlc(df,up_color=None,down_color=None,theme=None,layout=None,**kwargs): + layout=getLayout(theme=theme) if not layout else layout + ohlc=['open','high','low','close'] + if not theme: + theme = auth.get_config_file()['theme'] + c_dir=ta._ohlc_dict(df) + args=[df[c_dir[_]] for _ in ohlc] + args.append(df.index) + fig=py.plotly.tools.FigureFactory.create_ohlc(*args,**kwargs) + ohlc_bars=go.Figure() + ohlc_bars['data']=fig['data'] + ohlc_bars['layout']=fig['layout'] + data=ohlc_bars['data'] + if up_color: + data[0]['line'].update(color=normalize(up_color)) + if down_color: + data[1]['line'].update(color=normalize(down_color)) + ohlc_bars['layout']['hovermode']='closest' + ohlc_bars['layout']=merge_dict(layout,ohlc_bars['layout']) + return ohlc_bars
+ +
[docs]def get_candle(df,up_color=None,down_color=None,theme=None,layout=None,**kwargs): + layout=getLayout(theme=theme) if not layout else layout + ohlc=['open','high','low','close'] + if not theme: + theme = auth.get_config_file()['theme'] + c_dir=ta._ohlc_dict(df) + args=[df[c_dir[_]] for _ in ohlc] + args.append(df.index) + fig=py.plotly.tools.FigureFactory.create_candlestick(*args,**kwargs) + candle=go.Figure() + candle['data']=fig['data'] + candle['layout']=layout + data=candle['data'] + def update_color(n,color): + data[n]['fillcolor']=normalize(color) + data[n]['line'].update(color=normalize(color)) + if up_color: + update_color(0,up_color) + if down_color: + update_color(1,down_color) + candle['layout']['hovermode']='closest' + candle['layout']=merge_dict(layout,candle['layout']) + return candle
+ +
[docs]def scatter_matrix(df,theme=None,bins=10,color='grey',size=2): + """ + Displays a matrix with scatter plot for each pair of + Series in the DataFrame. + The diagonal shows a histogram for each of the Series + + Parameters: + ----------- + df : DataFrame + Pandas DataFrame + theme : string + Theme to be used (if not the default) + bins : int + Number of bins to use for histogram + color : string + Color to be used for each scatter plot + size : int + Size for each marker on the scatter plot + """ + if not theme: + theme = auth.get_config_file()['theme'] + + figs=[] + for i in df.columns: + for j in df.columns: + if i==j: + fig=df.iplot(kind='histogram',keys=[i],asFigure=True,bins=bins) + figs.append(fig) + else: + figs.append(df.iplot(kind='scatter',mode='markers',x=j,y=i,asFigure=True,size=size,colors=[color])) + layout=getLayout(theme) + layout['xaxis1'].update(showgrid=False) + layout['yaxis1'].update(showgrid=False) + sm=subplots(figs,shape=(len(df.columns),len(df.columns)),shared_xaxes=False,shared_yaxes=False, + horizontal_spacing=.05,vertical_spacing=.07,base_layout=layout) + sm['layout'].update(bargap=.02,showlegend=False) + return sm
+ +## Trace dictionary + +@property +def trace_dict(self): + d={} + for trace in range(len(self['data'])): + trace_=self['data'][trace] + name = '{0}_'.format(trace_['name']) if trace_['name'] in d else trace_['name'] + d[name]=trace + return d + + +## Axis Definition + +
[docs]def get_ref(figure): + d={} + for trace in figure['data']: + name = '{0}_'.format(trace['name']) if trace['name'] in d else trace['name'] + x = trace['xaxis'] if 'xaxis' in trace else 'x1' + y = trace['yaxis'] if 'yaxis' in trace else 'y1' + d[name]=(x,y) + return d
+ +
[docs]def get_def(figure): + d={} + items=list(figure['layout']['scene'].items()) if 'scene' in figure['layout'] else list(figure['layout'].items()) + for k,v in items: + if 'axis' in k: + d['{0}{1}'.format(k[0],1 if k[-1]=='s' else k[-1])]=v + return d
+ +
[docs]def get_len(figure): + d={} + keys=list(figure['layout']['scene'].keys()) if 'scene' in figure['layout'] else list(figure['layout'].keys()) + for k in keys: + if 'axis' in k: + d[k[0]] = d[k[0]]+1 if k[0] in d else 1 + return d
+ +
[docs]def get_which(figure): + d={} + keys=list(figure['layout']['scene'].keys()) if 'scene' in figure['layout'] else list(figure['layout'].keys()) + for k in keys: + if 'axis' in k: + if k[0] in d: + d[k[0]].append('{0}{1}'.format(k[0],k[-1])) + else: + d[k[0]]=['{0}{1}'.format(k[0],'1' if k[-1]=='s' else k[-1])] + return d
+ +
[docs]def get_ref_axis(figure): + d={} + for k,v in list(get_ref(figure).items()): + for i in v: + if i not in d: + d[i]=[] + d[i].append(k) + return d
+ +
[docs]def get_dom(figure): + d={} + which=get_which(figure) + axis_def=get_def(figure) + for k in ('x','y'): + d[k]={} + for y in which[k]: + item=axis_def[y] + domain='[0.0, 1.0]' if 'domain' not in item else str(item['domain']) + if domain not in d[k]: + d[k][domain]={} + s='left' if k=='y' else 'bottom' + side=s if 'side' not in item else item['side'] + d[k][domain][side]=y + return d
+ +@property +def axis(self): + return {'ref':get_ref(self), + 'ref_axis':get_ref_axis(self), + 'def':get_def(self), + 'len':get_len(self), + 'which':get_which(self), + 'dom':get_dom(self)} + +### Set Axis + + +def _set_axis(self,traces,on=None,side='right',title=''): + """ + Sets the axis in which each trace should appear + If the axis doesn't exist then a new axis is created + + Parameters: + ----------- + traces : list(str) + List of trace names + on : string + The axis in which the traces should be placed. + If this is not indicated then a new axis will be + created + side : string + Side where the axis will be placed + 'left' + 'right' + title : string + Sets the title of the axis + Applies only to new axis + """ + fig=go.Figure() + fig_cpy=self.copy() + fig['data']=fig_cpy['data'] + fig['layout']=fig_cpy['layout'] + if not isinstance(traces,list): + traces=[traces] + + def update_data(trace,y): + anchor=fig.axis['def'][y]['anchor'] if 'anchor' in fig.axis['def'][y] else 'x1' + idx=fig.trace_dict[trace] if isinstance(trace,str) else trace + fig['data'][idx]['xaxis']=anchor + fig['data'][idx]['yaxis']=y + + for trace in traces: + if on: + if on not in fig.axis['def']: + raise Exception('"on" axis does not exists: {0}'.format(on)) + update_data(trace,y=on) + else: + curr_x,curr_y=fig.axis['ref'][trace] + domain='[0.0, 1.0]' if 'domain' not in fig.axis['def'][curr_y] else str(fig.axis['def'][curr_y]['domain']) + try: + new_axis=fig.axis['dom']['y'][domain][side] + except KeyError: + axis=go.YAxis(fig.axis['def'][curr_y].copy()) + ### check overlaying values + axis.update(title=title,overlaying=curr_y,side=side,anchor=curr_x) + axis_idx=str(fig.axis['len']['y']+1) + fig['layout']['yaxis{0}'.format(axis_idx)]=axis + new_axis='y{0}'.format(axis_idx) + update_data(trace,y=new_axis) + + + for k in list(fig.axis['def'].keys()): + id='{0}axis{1}'.format(k[0],k[-1:]) + if k not in fig.axis['ref_axis']: + try: + del fig['layout'][id] + except KeyError: + pass + + return fig + +### Shapes + +# def _get_shapes(d): + +# def get_shapes(xline): +# orientation=xline[0] +# xline=d[xline] +# if type(xline) in (list,tuple): +# for x_i in xline: +# if isinstance(x_i,dict): +# x_i['kind']='line' +# return get_shape(**x_i) +# else: +# if orientation=='h': +# return get_shape(kind='line',y=x_i) +# else: +# return get_shape(kind='line',x=x_i) +# elif isinstance(xline,dict): +# return get_shape(**xline) +# else: +# if orientation=='h': +# return get_shape(kind='line',y=xline) +# else: +# return get_shape(kind='line',x=xline) + +# def get_span(xspan): +# orientation=xspan[0] +# xspan=d[xspan] +# if isinstance(xspan,list): +# for x_i in xspan: +# if isinstance(x_i,dict): +# x_i['kind']='rect' +# return get_shape(**x_i) +# else: +# v0,v1=x_i +# if orientation=='h': +# get_shape(kind='rect',y0=v0,y1=v1,fill=True,opacity=.5) +# else: +# get_shape(kind='rect',x0=v0,x1=v1,fill=True,opacity=.5) +# elif isinstance(xspan,dict): +# xspan['kind']='rect' +# return get_shape(**xspan) +# elif isinstance(xspan,tuple): +# v0,v1=xspan +# if orientation=='h': +# return get_shape(kind='rect',y0=v0,y1=v1,fill=True,opacity=.5) +# else: +# return get_shape(kind='rect',x0=v0,x1=v1,fill=True,opacity=.5) +# else: +# raise Exception('Invalid value for {0}span: {1}'.format(orientation,xspan)) + +# if 'hline' in d: +# return get_shapes('hline') +# if 'vline' in d: +# return get_shapes('vline') +# if 'hspan' in d: +# get_span('hspan') +# if 'vspan' in d: +# get_span('vspan') +# if 'shapes' in d: +# shapes_=kwargs['shapes'] +# if isinstance(shapes_,list): +# for i in shapes_: +# shp=i if 'type' in i else get_shape(**i) +# shapes.append(shp) +# elif isinstance(shapes_,dict): +# shp=shapes_ if 'type' in shapes_ else get_shape(**shapes_) +# shapes.append(shp) +# else: +# raise Exception("Shapes need to be either a dict or list of dicts") + +
[docs]def get_shape(kind='line',x=None,y=None,x0=None,y0=None,x1=None,y1=None,span=0,color='red',dash='solid',width=1, + fillcolor=None,fill=False,opacity=1,xref='x',yref='y'): + """ + Returns a plotly shape + + Parameters: + ----------- + kind : string + Shape kind + line + rect + circle + x : float + x values for the shape. + This assumes x0=x1 + x0 : float + x0 value for the shape + x1 : float + x1 value for the shape + y : float + y values for the shape. + This assumes y0=y1 + y0 : float + y0 value for the shape + y1 : float + y1 value for the shape + color : string + color for shape line + dash : string + line style + solid + dash + dashdot + dot + width : int + line width + fillcolor : string + shape fill color + fill : bool + If True then fill shape + If not fillcolor then the + line color will be used + opacity : float [0,1] + opacity of the fill + xref : string + Sets the x coordinate system + which this object refers to + 'x' + 'paper' + 'x2' etc + yref : string + Sets the y coordinate system + which this object refers to + 'y' + 'paper' + 'y2' etc + """ + if not x1: + if not x0: + if not x: + xref='paper' + x0=0 + x1=1 + else: + x0=x1=x + else: + x1=x0 + if not y1: + if not y0: + if not y: + yref='paper' + y0=0 + y1=1 + else: + y0=y1=y + else: + y1=y0 + + shape = { 'x0':x0, + 'y0':y0, + 'x1':x1, + 'y1':y1, + 'line' : { + 'color':normalize(color), + 'width':width, + 'dash':dash + }, + 'xref':xref, + 'yref':yref + } + + if kind=='line': + shape['type']='line' + + elif kind=='circle': + shape['type']='circle' + + elif kind=='rect': + shape['type']='rect' + else: + raise Exception("Invalid or unkown shape type : {0}".format(kind)) + + if (fill or fillcolor) and kind!='line': + fillcolor = color if not fillcolor else fillcolor + fillcolor=to_rgba(normalize(fillcolor),opacity) + shape['fillcolor']=fillcolor + + return shape
+ +### Advanced Shapes + +
[docs]def get_trendline(df,date0,date1,column='close',**kwargs): + df=pd.DataFrame(df[column]) + d={'x0':date0, + 'x1':date1, + 'y0':df.ix[date0].values[0], + 'y1':df.ix[date1].values[0]} + d.update(**kwargs) + return d
+ +### Range Selector + +
[docs]def get_range_selector(steps=['1m','1y'],bgcolor='rgba(150, 200, 250, 0.4)',x=0,y=0.9, + visible=True,**kwargs): + """ + Returns a range selector + Reference: https://plot.ly/python/reference/#layout-xaxis-rangeselector + + Parameters: + ----------- + steps : string or list(string) + Steps for the range + Examples: + ['1y','2 months','5 weeks','ytd','2mtd'] + bgocolor : string or tuple(color,alpha) + Background color + Examples: + 'cyan' + 'rgba(232,214,10,.5)' + ('blue',.3) + font_size : int + Font size + x : float + Position along the x axis + Domain (0,1) + y : float + Position along the y axis + Domain (0,1) + """ + import string + + def get_step(s): + + + term=[] + stepmode='backward' + _s=s + _s=_s.replace(' ','') + _s=_s.lower() + if _s in ['reset','all']: + return {'count':1,'label':s,'step':'all'} + if _s[-2:]=='td': + _s=_s[:-2] + stepmode='todate' + if _s[0] not in string.digits: + _s='1'+_s + if _s[0] not in string.digits: + raise Exception('Invalid step format: {0}'.format(s)) + while _s[-1] not in string.digits: + term.append(_s[-1]) + _s=_s[:-1] + term.reverse() + term=''.join(term) + cnt=int(_s) + term=term[:-1] if (term[-1]=='s' and len(term)>1) else term + if term in ['y','year','yr']: + steps='year' + elif term in ['w','week','wk']: + steps='week' + elif term in ['m','month','mth','mnth','mo']: + steps='month' + elif term in ['hr','hour']: + steps='hour' + elif term in ['min','minute','mn']: + steps='minute' + elif term in ['sec','sc','s']: + steps='second' + else: + raise Exception('Invalid step format: {0}'.format(s)) + return {'count':cnt,'label':s,'step':steps,'stepmode':stepmode} + + rangeselector={ + 'bgcolor':to_rgba(bgcolor,1), + 'x':x, + 'y':y, + 'visible':visible + } + + kwargs['fontsize']=kwargs.get('fontsize',13) + + rangeselector=dict_replace_keyword(rangeselector,'font',kwargs,False) + + buttons=[] + if type(steps) not in (list,tuple): + steps=[steps] + for s in steps: + buttons.append(get_step(s)) + rangeselector['buttons']=buttons + return rangeselector
+ +### Error Bars + +
[docs]def get_error_bar(axis='y',type='data',values=None,values_minus=None,color=None,thickness=1,width=5, + opacity=1): + error=go.ErrorY() if axis=='y' else go.ErrorX() + if type=='data': + if isinstance(values,list) or isinstance(values,np.ndarray): + if values_minus: + if len(values)!=len(values_minus): + raise Exception('Array values need to be of same length') + error.update(symmetric=False,arrayminus=values_minus) + error.update(array=values) + else: + if values_minus: + if isinstance(values_minus,list) or isinstance(values_minus,np.ndarray): + raise Exception('Values should be of same type (int, float)') + error.udpate(symmetric=False,valueminus=values_minus) + error.update(value=values) + elif type in ['percent','constant']: + if isinstance(values,list) or isinstance(values,np.ndarray): + raise Exception('Value should be of type (int, float)') + error.update(value=values) + elif type=='sqrt': + pass + else: + raise Exception('Invalid type: {0}'.format(type)) + error.update(type=type,thickness=thickness,width=width,visible=True,opacity=opacity) + if color: + error.update(color=normalize(color)) + return error
+ +
[docs]def set_errors(figure,trace=None,axis='y',type='data',values=None,values_minus=None,color=None,thickness=1,width=None, + opacity=None,**kwargs): + figure=go.Figure(copy.deepcopy(figure)) + if 'value' in kwargs: + values=kwargs['value'] + data=figure['data'] + if 'continuous' not in type: + width=width if width else 5 + opacity=opacity if opacity else 1 + error=get_error_bar(axis=axis,type=type,values=values,values_minus=values_minus, + color=color,thickness=thickness,width=width,opacity=opacity) + if trace: + data[figure.trace_dict[trace]].update({'error_{0}'.format(axis):error}) + else: + for trace in data: + trace.update({'error_{0}'.format(axis):error}) + else: + width=width if width else .5 + opacity=opacity if opacity else .3 + def get_traces(trace,value,type,color=None,width=.2,opacity=.3): + if 'percent' in type: + y_up=trace['y']*(1+value/100.00) + y_down=trace['y']*(1-value/100.00) + else: + y_up=trace['y']+value + y_down=trace['y']-value + y=trace['y'] + upper=go.Scatter(y=y_up,mode='lines',showlegend=False, + line=go.Line(width=width),x=trace['x']) + if 'yaxis' in trace: + upper['yaxis']=trace['yaxis'] + if color: + color=normalize(color) + else: + if 'color' in trace['line']: + color=trace['line']['color'] + else: + color='charcoal' + upper['line']['color']=color + lower=upper.copy() + name=trace['name']+'_' if 'name' in trace else '' + upper.update(name=name+'upper') + color=to_rgba(normalize(color),opacity) + lower.update(fill='tonexty',fillcolor=color,name=name+'lower',y=y_down) + return upper,lower + if trace: + traces=[figure.trace_dict[trace]] + else: + traces=list(range(len(figure['data']))) + for i in traces: + trace=figure['data'][i] + upper,lower=get_traces(trace,values,type,color=color,width=width,opacity=opacity) + figure['data'].extend([upper,lower]) + return figure
+ + +
[docs]def updateColors(d): + for k,v in list(d.items()): + if isinstance(v,dict): + updateColors(v) + else: + if isinstance(v,list): + if 'color' in k: + d[k]=[normalize(_) for _ in v] + else: + for _ in v: + if isinstance(_,dict): + updateColors(_) + else: + if 'color' in k.lower(): + if 'rgba' not in v: + d[k]=normalize(v) + return d
+ +def _nodata(self): + d=[] + # _=copy.deepcopy(self) + for _ in self: + d.append(copy.deepcopy(_)) + for _ in d: + for k in list(_.keys()): + if k in ('x','y','open','close','high','low','index','volume','line','marker'): + try: + _[k]=[] + except: + _[k]={} + return d + +def _figure_no_data(self): + return {'data':self.data.nodata(), + 'layout':self.layout} + +def _update_traces(self,**kwargs): + for _ in self.data: + _.update(**kwargs) + +def _move_axis(self,xaxis=None,yaxis=None): + def update_axis(self,axis): + _axis=axis[0] + from_axis=self.data[0].pop('{0}axis'.format(_axis),'{0}1'.format(_axis)) + from_axis=_axis+'axis'+from_axis[1:] + to_axis=_axis+'axis'+axis[1:] + self.layout[to_axis]=self.layout.pop(from_axis) + self.update_traces(**{'{0}axis'.format(_axis):axis}) + + if xaxis: + update_axis(self,xaxis) + if yaxis: + update_axis(self,yaxis) + +### Offline + +
[docs]def go_offline(connected = False, offline=True): + if offline: + py_offline.init_notebook_mode(connected) + py_offline.__PLOTLY_OFFLINE_INITIALIZED=True + else: + py_offline.__PLOTLY_OFFLINE_INITIALIZED=False
+ +
[docs]def is_offline(): + return py_offline.__PLOTLY_OFFLINE_INITIALIZED
+ + + +go.Figure.axis=axis +go.Figure.trace_dict=trace_dict +go.Figure.set_axis=_set_axis +go.Figure.update_traces=_update_traces +go.Figure.move_axis=_move_axis +go.Figure.nodata=_figure_no_data +go.Data.nodata=_nodata +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/cufflinks/utils.html b/docs/html/_modules/cufflinks/utils.html new file mode 100644 index 0000000..ef68761 --- /dev/null +++ b/docs/html/_modules/cufflinks/utils.html @@ -0,0 +1,310 @@ + + + + + + + + cufflinks.utils — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Source code for cufflinks.utils

+import pickle
+import six
+import copy
+
+
+
[docs]def is_string(val): + return isinstance(val,six.string_types)
+ +
[docs]def is_list(val): + return type(val) in (list,tuple)
+ +
[docs]def is_dict(val): + return isinstance(val,dict)
+ +
[docs]def make_list(val): + return [val] if not is_list(val) else val
+ +
[docs]def make_string(val): + return str(val) if not is_string(val) else val
+ +
[docs]def make_dict_from_list(val): + return dict([(_,None) for _ in val])
+ +
[docs]def merge_dict(d1,d2): + """ + d1 <-- d2 + """ + d=d2.copy() + for k,v in list(d1.items()): + if k not in d: + d[k]=v + else: + if isinstance(v,dict): + d[k]=merge_dict(d1[k],d[k]) + return d
+ +
[docs]def dict_path(from_d,to_d={},l=[]): + """ + Returns a dictionary with the path in which each of the keys is found + + Parameters: + from_d : dict + Dictionary that contains all the keys, values + to_d : dict + Dictionary to which the results will be appended + + Example: + dict_path({'level1':{'level2':{'level3':'value'}}}) + Returns + {'level1': [], + 'level2': ['level1'], + 'level3': ['level1', 'level2'] + } + """ + for k,v in list(from_d.items()): + if isinstance(v,dict): + to_d[k]=l + _l=copy.deepcopy(l) + _l.append(k) + to_d=dict_path(from_d[k],to_d,_l) + else: + to_d[k]=l + _to_d=to_d.copy() + to_d={} + return _to_d
+ +
[docs]def dict_update(d,k,val,d_ref=None): + d_ref=d if not d_ref else d + path=dict_path(d_ref) + if path: + reduce(dict.get, path[k],d).update({k:val}) + else: + d.update(k=val) + return d
+ +
[docs]def pp(el,preString=''): + """ + Formats (prettyprint) a concatenated dictionary + """ + tab=' '*4 + if isinstance(el,dict): + keys=list(el.keys()) + keys.sort() + for key in keys: + val=el[key] + if isinstance(val,dict) or isinstance(val,list): + print('%s%s :' % (preString,key)) + pp(val,preString+tab) + else: + print('%s%s = %s' % (preString,key,val)) + + elif isinstance(el,list): + print(preString+tab+'[') + preString+=tab + for _ in el: + if isinstance(_,dict): + print (preString+tab+'{') + pp(_,preString+tab*2) + print(preString+tab+'}') + elif isinstance(_,list): + print(preString+tab+'[') + pp(_,preString+tab) + print(preString+tab+']') + else: + pp(_,preString+tab) + #print preString+' '+str('-')*10 + print(preString +']') + else: + print(preString+str(el))
+ +
[docs]def inverseDict(d): + """ + Returns a dictionay indexed by values {value_k:key_k} + Parameters: + ----------- + d : dictionary + """ + dt={} + for k,v in list(d.items()): + if type(v) in (list,tuple): + for i in v: + dt[i]=k + else: + dt[v]=k + return dt
+ +## Kwargs handlers + +
[docs]def kwargs_from_keyword(from_kwargs,to_kwargs,keyword,clean_origin=True): + """ + Looks for keys of the format keyword_value. + And return a dictionary with {keyword:value} format + + Parameters: + ----------- + from_kwargs : dict + Original dictionary + to_kwargs : dict + Dictionary where the items will be appended + keyword : string + Keyword to look for in the orginal dictionary + clean_origin : bool + If True then the k,v pairs from the original + dictionary are deleted + """ + for k in list(from_kwargs.keys()): + if '{0}_'.format(keyword) in k: + to_kwargs[k.replace('{0}_'.format(keyword),'')]=from_kwargs[k] + if clean_origin: + del from_kwargs[k] + return to_kwargs
+ +
[docs]def check_kwargs(global_kwargs,values,local_kwargs=None,clean_origin=False): + local_kwargs={} if not local_kwargs else local_kwargs + for kw in values: + if kw in global_kwargs: + local_kwargs[kw]=global_kwargs[kw] + if clean_origin: + del global_kwargs[kw] + return local_kwargs
+ +
[docs]def dict_replace_keyword(d,keyword,kwargs,forceupdate=True): + d=d.copy() + for _k,_v in list(kwargs.items()): + if keyword in _k: + k=_k.replace(keyword,'') + if keyword not in d: + d[keyword]={k:_v} + else: + if forceupdate: + d[keyword].update({k:_v}) + else: + if k not in d[keyword]: + d[keyword].update({k:_v}) + else: + if forceupdate: + d[_k]=_v + else: + if _k not in d: + d[_k]=_v + + return d
+ +
[docs]def save_pickle(obj,filename): + """ + Serializes a given object + Parameters: + ----------- + obj : object + filename : string + """ + return pickle.dump(obj,open(filename,'wb'))
+ +
[docs]def load_pickle(filename): + """ + Loads a serialized object + Parameters: + ----------- + filename : string + """ + return pickle.load(open(filename,'rb'))
+ +
[docs]def deep_update(d,d_update): + """ + Updates the values (deep form) of a given dictionary + + Parameters: + ----------- + d : dict + dictionary that contains the values to update + d_update : dict + dictionary to be updated + """ + for k,v in list(d_update.items()): + if isinstance(v,dict): + if k in d: + deep_update(d[k],v) + else: + d[k]=v + elif isinstance(d,list): + d.append({k:v}) + else: + d[k]=v + return d
+ +
[docs]def read_google(self,url,**kwargs): + """ + Reads a google sheet + """ + if url[-1]!='/': + url+='/' + return self.read_csv(url+'export?gid=0&format=csv',**kwargs)
+
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_modules/index.html b/docs/html/_modules/index.html new file mode 100644 index 0000000..0494c51 --- /dev/null +++ b/docs/html/_modules/index.html @@ -0,0 +1,89 @@ + + + + + + + + Overview: module code — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/_sources/cufflinks.auth.rst.txt b/docs/html/_sources/cufflinks.auth.rst.txt new file mode 100644 index 0000000..5eb3c50 --- /dev/null +++ b/docs/html/_sources/cufflinks.auth.rst.txt @@ -0,0 +1,7 @@ +cufflinks.auth module +===================== + +.. automodule:: cufflinks.auth + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.colors.rst.txt b/docs/html/_sources/cufflinks.colors.rst.txt new file mode 100644 index 0000000..20e141d --- /dev/null +++ b/docs/html/_sources/cufflinks.colors.rst.txt @@ -0,0 +1,7 @@ +cufflinks.colors module +======================= + +.. automodule:: cufflinks.colors + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.datagen.rst.txt b/docs/html/_sources/cufflinks.datagen.rst.txt new file mode 100644 index 0000000..7d02e6b --- /dev/null +++ b/docs/html/_sources/cufflinks.datagen.rst.txt @@ -0,0 +1,7 @@ +cufflinks.datagen module +======================== + +.. automodule:: cufflinks.datagen + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.date_tools.rst.txt b/docs/html/_sources/cufflinks.date_tools.rst.txt new file mode 100644 index 0000000..38f4bfa --- /dev/null +++ b/docs/html/_sources/cufflinks.date_tools.rst.txt @@ -0,0 +1,7 @@ +cufflinks.date\_tools module +============================ + +.. automodule:: cufflinks.date_tools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.exceptions.rst.txt b/docs/html/_sources/cufflinks.exceptions.rst.txt new file mode 100644 index 0000000..10842a2 --- /dev/null +++ b/docs/html/_sources/cufflinks.exceptions.rst.txt @@ -0,0 +1,7 @@ +cufflinks.exceptions module +=========================== + +.. automodule:: cufflinks.exceptions + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.extract.rst.txt b/docs/html/_sources/cufflinks.extract.rst.txt new file mode 100644 index 0000000..13a299e --- /dev/null +++ b/docs/html/_sources/cufflinks.extract.rst.txt @@ -0,0 +1,7 @@ +cufflinks.extract module +======================== + +.. automodule:: cufflinks.extract + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.offline.rst.txt b/docs/html/_sources/cufflinks.offline.rst.txt new file mode 100644 index 0000000..d45aeef --- /dev/null +++ b/docs/html/_sources/cufflinks.offline.rst.txt @@ -0,0 +1,7 @@ +cufflinks.offline module +======================== + +.. automodule:: cufflinks.offline + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.pandastools.rst.txt b/docs/html/_sources/cufflinks.pandastools.rst.txt new file mode 100644 index 0000000..0e33202 --- /dev/null +++ b/docs/html/_sources/cufflinks.pandastools.rst.txt @@ -0,0 +1,7 @@ +cufflinks.pandastools module +============================ + +.. automodule:: cufflinks.pandastools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.plotlytools.rst.txt b/docs/html/_sources/cufflinks.plotlytools.rst.txt new file mode 100644 index 0000000..9463081 --- /dev/null +++ b/docs/html/_sources/cufflinks.plotlytools.rst.txt @@ -0,0 +1,7 @@ +cufflinks.plotlytools module +============================ + +.. automodule:: cufflinks.plotlytools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.quant_figure.rst.txt b/docs/html/_sources/cufflinks.quant_figure.rst.txt new file mode 100644 index 0000000..6962dde --- /dev/null +++ b/docs/html/_sources/cufflinks.quant_figure.rst.txt @@ -0,0 +1,7 @@ +cufflinks.quant\_figure module +============================== + +.. automodule:: cufflinks.quant_figure + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.rst.txt b/docs/html/_sources/cufflinks.rst.txt new file mode 100644 index 0000000..040a0ac --- /dev/null +++ b/docs/html/_sources/cufflinks.rst.txt @@ -0,0 +1,31 @@ +cufflinks package +================= + +Submodules +---------- + +.. toctree:: + + cufflinks.auth + cufflinks.colors + cufflinks.datagen + cufflinks.date_tools + cufflinks.exceptions + cufflinks.extract + cufflinks.offline + cufflinks.pandastools + cufflinks.plotlytools + cufflinks.quant_figure + cufflinks.ta + cufflinks.themes + cufflinks.tools + cufflinks.utils + cufflinks.version + +Module contents +--------------- + +.. automodule:: cufflinks + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.ta.rst.txt b/docs/html/_sources/cufflinks.ta.rst.txt new file mode 100644 index 0000000..773d048 --- /dev/null +++ b/docs/html/_sources/cufflinks.ta.rst.txt @@ -0,0 +1,7 @@ +cufflinks.ta module +=================== + +.. automodule:: cufflinks.ta + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.themes.rst.txt b/docs/html/_sources/cufflinks.themes.rst.txt new file mode 100644 index 0000000..2252dec --- /dev/null +++ b/docs/html/_sources/cufflinks.themes.rst.txt @@ -0,0 +1,7 @@ +cufflinks.themes module +======================= + +.. automodule:: cufflinks.themes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.tools.rst.txt b/docs/html/_sources/cufflinks.tools.rst.txt new file mode 100644 index 0000000..0bfa8e6 --- /dev/null +++ b/docs/html/_sources/cufflinks.tools.rst.txt @@ -0,0 +1,7 @@ +cufflinks.tools module +====================== + +.. automodule:: cufflinks.tools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.utils.rst.txt b/docs/html/_sources/cufflinks.utils.rst.txt new file mode 100644 index 0000000..85343a8 --- /dev/null +++ b/docs/html/_sources/cufflinks.utils.rst.txt @@ -0,0 +1,7 @@ +cufflinks.utils module +====================== + +.. automodule:: cufflinks.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/cufflinks.version.rst.txt b/docs/html/_sources/cufflinks.version.rst.txt new file mode 100644 index 0000000..6a20288 --- /dev/null +++ b/docs/html/_sources/cufflinks.version.rst.txt @@ -0,0 +1,7 @@ +cufflinks.version module +======================== + +.. automodule:: cufflinks.version + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/html/_sources/index.rst.txt b/docs/html/_sources/index.rst.txt new file mode 100644 index 0000000..aeb205d --- /dev/null +++ b/docs/html/_sources/index.rst.txt @@ -0,0 +1,20 @@ +.. Cufflinks documentation master file, created by + sphinx-quickstart on Wed Apr 11 09:08:01 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Cufflinks's documentation! +===================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/html/_sources/modules.rst.txt b/docs/html/_sources/modules.rst.txt new file mode 100644 index 0000000..4335806 --- /dev/null +++ b/docs/html/_sources/modules.rst.txt @@ -0,0 +1,7 @@ +cufflinks +========= + +.. toctree:: + :maxdepth: 4 + + cufflinks diff --git a/docs/html/_static/ajax-loader.gif b/docs/html/_static/ajax-loader.gif new file mode 100644 index 0000000..61faf8c Binary files /dev/null and b/docs/html/_static/ajax-loader.gif differ diff --git a/docs/html/_static/alabaster.css b/docs/html/_static/alabaster.css new file mode 100644 index 0000000..be65b13 --- /dev/null +++ b/docs/html/_static/alabaster.css @@ -0,0 +1,693 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} \ No newline at end of file diff --git a/docs/html/_static/basic.css b/docs/html/_static/basic.css new file mode 100644 index 0000000..19ced10 --- /dev/null +++ b/docs/html/_static/basic.css @@ -0,0 +1,665 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/html/_static/comment-bright.png b/docs/html/_static/comment-bright.png new file mode 100644 index 0000000..15e27ed Binary files /dev/null and b/docs/html/_static/comment-bright.png differ diff --git a/docs/html/_static/comment-close.png b/docs/html/_static/comment-close.png new file mode 100644 index 0000000..4d91bcf Binary files /dev/null and b/docs/html/_static/comment-close.png differ diff --git a/docs/html/_static/comment.png b/docs/html/_static/comment.png new file mode 100644 index 0000000..dfbc0cb Binary files /dev/null and b/docs/html/_static/comment.png differ diff --git a/docs/html/_static/custom.css b/docs/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/docs/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/docs/html/_static/doctools.js b/docs/html/_static/doctools.js new file mode 100644 index 0000000..0c15c00 --- /dev/null +++ b/docs/html/_static/doctools.js @@ -0,0 +1,311 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); \ No newline at end of file diff --git a/docs/html/_static/documentation_options.js b/docs/html/_static/documentation_options.js new file mode 100644 index 0000000..d0b0ed2 --- /dev/null +++ b/docs/html/_static/documentation_options.js @@ -0,0 +1,9 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: '', + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' +}; \ No newline at end of file diff --git a/docs/html/_static/down-pressed.png b/docs/html/_static/down-pressed.png new file mode 100644 index 0000000..5756c8c Binary files /dev/null and b/docs/html/_static/down-pressed.png differ diff --git a/docs/html/_static/down.png b/docs/html/_static/down.png new file mode 100644 index 0000000..1b3bdad Binary files /dev/null and b/docs/html/_static/down.png differ diff --git a/docs/html/_static/file.png b/docs/html/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/docs/html/_static/file.png differ diff --git a/docs/html/_static/jquery-3.2.1.js b/docs/html/_static/jquery-3.2.1.js new file mode 100644 index 0000000..d2d8ca4 --- /dev/null +++ b/docs/html/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.auth module

+

Based in Plotly’s tools module

+
+
+cufflinks.auth.check_file_permissions()[source]
+
+ +
+
+cufflinks.auth.ensure_local_files()[source]
+

Ensure that filesystem is setup/filled out in a valid way

+
+ +
+
+cufflinks.auth.get_config_file(*args)[source]
+

Return specified args from ~/.confg. as dict. +Returns all if no arguments are specified.

+
+
Example:
+
get_config_file(‘sharing’)
+
+
+ +
+
+cufflinks.auth.get_path()[source]
+
+ +
+
+cufflinks.auth.get_pickle_path()[source]
+
+ +
+
+cufflinks.auth.load_json_dict(filename, *args)[source]
+

Checks if file exists. Returns {} if something fails.

+
+ +
+
+cufflinks.auth.save_json_dict(filename, json_dict)[source]
+

Will error if filename is not appropriate, but it’s checked elsewhere.

+
+ +
+
+cufflinks.auth.set_config_file(sharing=None, theme=None, colorscale=None, offline=None, offline_url=None, offline_show_link=None, offline_link_text=None, datagen_mode=None, **kwargs)[source]
+

Set the keyword-value pairs in ~/.config.

+
+
sharing : string
+
+
Sets the sharing level permission
+
public - anyone can see this chart +private - only you can see this chart +secret - only people with the link can see the chart
+
+
+
theme : string
+
Sets the default theme +See cufflinks.getThemes() for available themes
+
colorscale : string
+
Sets the default colorscale +See cufflinks.scales()
+
offline : bool
+
If true then the charts are rendered +locally.
+
offline_show_link : bool
+
If true then the chart will show a link to +plot.ly at the bottom right of the chart
+
offline_link_text : string
+
Text to display as link at the bottom +right of the chart
+
datagen_mode : string
+

Mode in which the data is generated +by the datagen module

+
+
stocks : random stock names are used for the index +abc : alphabet values are used for the index
+
+
dimensions : tuple
+
Sets the default (width,height) of the chart
+
margin : dict or tuple
+
Dictionary (l,r,b,t) or +Tuple containing the left, +right, bottom and top margins
+
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.colors.html b/docs/html/cufflinks.colors.html new file mode 100644 index 0000000..077b387 --- /dev/null +++ b/docs/html/cufflinks.colors.html @@ -0,0 +1,355 @@ + + + + + + + + cufflinks.colors module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.colors module

+
+
+exception cufflinks.colors.CufflinksError[source]
+

Bases: Exception

+
+ +
+
+cufflinks.colors.color_range(color, N=20)[source]
+

Generates a scale of colours from a base colour

+
+
+
color : string
+
Color representation in hex
+
N : int
+
number of colours to generate
+
+
+
+
Example:
+
color_range(‘#ff9933’,20)
+
+
+ +
+
+cufflinks.colors.color_table(color, N=1, sort=False, sort_values=False, inline=False, as_html=False)[source]
+

Generates a colour table

+
+
+
color : string | list | dict
+
Color representation in rgba|rgb|hex +If a list of colors is passed then these +are displayed in a table
+
N : int
+
number of colours to generate +When color is not a list then it generaes +a range of N colors
+
sort : bool
+
if True then items are sorted
+
sort_values : bool
+
if True then items are sorted by color values. +Only applies if color is a dictionary
+
inline : bool
+
if True it returns single line color blocks
+
as_html : bool
+
if True it returns the HTML code
+
+
+
+
Example:
+
color_table(‘#ff9933’) +color_table(cufflinks.cnames) +color_table([‘pink’,’salmon’,’yellow’])
+
Note:
+
This function only works in iPython Notebook
+
+
+ +
+
+cufflinks.colors.colorgen(colors=None, n=None, scale=None, theme=None)[source]
+

Returns a generator with a list of colors +and gradients of those colors

+
+
+
colors : list(colors)
+
List of colors to use
+
+
+
+
Example:
+
colorgen() +colorgen([‘blue’,’red’,’pink’]) +colorgen([‘#f03’,’rgb(23,25,25)’])
+
+
+ +
+
+cufflinks.colors.get_colorscale(scale)[source]
+

Returns a color scale to be used for a plotly figure

+
+
+
scale : str or list
+
Color scale name +If the color name is preceded by a minus (-) +then the scale is inversed. +Also accepts a list of colors (rgb,rgba,hex)
+
+
+
+
Example:
+
get_colorscale(‘accent’) +get_colorscale([‘rgb(127,201,127)’,’rgb(190,174,212)’,’rgb(253,192,134)’])
+
+
+ +
+
+cufflinks.colors.get_scales(scale=None, n=None)[source]
+

Returns a color scale

+
+
+
scale : str
+
Color scale name +If the color name is preceded by a minus (-) +then the scale is inversed
+
n : int
+

Number of colors +If n < number of colors available for a given scale then

+
+
the minimum number will be returned
+
+
If n > number of colors available for a given scale then
+
the maximum number will be returned
+
+
+
+
+
+
Example:
+
get_scales(‘accent’,8) +get_scales(‘pastel1’)
+
+
+ +
+
+cufflinks.colors.hex_to_hsv(color)[source]
+

Converts from hex to hsv

+
+
+
color : string
+
Color representation on color
+
+
+
+
Example:
+
hex_to_hsv(‘#ff9933’)
+
+
+ +
+
+cufflinks.colors.hex_to_rgb(color)[source]
+

Converts from hex to rgb

+
+
+
color : string
+
Color representation on hex or rgb
+
+
+
+
Example:
+
hex_to_rgb(‘#E1E5ED’) +hex_to_rgb(‘#f03’)
+
+
+ +
+
+cufflinks.colors.interp(colors, N)[source]
+
+ +
+
+cufflinks.colors.normalize(color)[source]
+

Returns an hex color

+
+
+
color : string
+
Color representation in rgba|rgb|hex
+
+
+
+
Example:
+
normalize(‘#f03’)
+
+
+ +
+
+cufflinks.colors.reset_scales()[source]
+
+ +
+
+cufflinks.colors.rgb_to_hex(color)[source]
+

Converts from rgb to hex

+
+
+
color : string
+
Color representation on hex or rgb
+
+
+
+
Example:
+
rgb_to_hex(‘rgb(23,25,24)’)
+
+
+ +
+
+cufflinks.colors.rgba_to_rgb(color, bg='rgb(255, 255, 255)')[source]
+

Converts from rgba to rgb

+
+
+
color : string
+
Color representation in rgba
+
bg : string
+
Color representation in rgb
+
+
+
+
Example:
+
rgba_to_rgb(‘rgb(23,25,24,.4)’‘
+
+
+ +
+
+cufflinks.colors.scales(scale=None)[source]
+

Displays a color scale (HTML)

+
+
+
scale : str
+

Color scale name +If no scale name is provided then all scales are returned

+
+
(max number for each scale)
+
+
If scale=’all’ then all scale combinations available
+
will be returned
+
+
+
+
+
+
Example:
+
scales(‘accent’) +scales(‘all’) +scales()
+
+
+ +
+
+cufflinks.colors.to_rgba(color, alpha)[source]
+

Converts from hex|rgb to rgba

+
+
+
color : string
+
Color representation on hex or rgb
+
alpha : float
+
Value from 0 to 1.0 that represents the +alpha value.
+
+
+
+
Example:
+
to_rgba(‘#E1E5ED’,0.6) +to_rgba(‘#f03’,0.7) +to_rgba(‘rgb(23,23,23)’,.5)
+
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.datagen.html b/docs/html/cufflinks.datagen.html new file mode 100644 index 0000000..104163a --- /dev/null +++ b/docs/html/cufflinks.datagen.html @@ -0,0 +1,391 @@ + + + + + + + + cufflinks.datagen module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.datagen module

+
+
+cufflinks.datagen.bars(n=3, n_categories=3, prefix='category', columns=None, mode='abc')[source]
+

Returns a DataFrame with the required format for +a bar plot

+
+
+
n : int
+
Number of points for each trace
+
n_categories : int
+
Number of categories for each point
+
prefix : string
+
Name for each category
+
columns : [str]
+
List of column names
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.box(n_traces=5, n=100, mode=None)[source]
+

Returns a DataFrame with the required format for +a box plot

+
+
+
n_traces : int
+
Number of traces
+
n : int
+
Number of points for each trace
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.bubble(n_categories=5, n=10, prefix='category', mode=None)[source]
+

Returns a DataFrame with the required format for +a bubble plot

+
+
+
n_categories : int
+
Number of categories
+
n : int
+
Number of points for each category
+
prefix : string
+
Name for each category
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.bubble3d(n_categories=5, n=10, prefix='category', mode=None)[source]
+

Returns a DataFrame with the required format for +a bubble3d plot

+
+
+
n_categories : int
+
Number of categories
+
n : int
+
Number of points for each trace
+
prefix : string
+
Name for each trace
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.choropleth()[source]
+

Returns

+
+ +
+
+cufflinks.datagen.getName(n=1, name=3, exchange=2, columns=None, mode='abc')[source]
+
+ +
+
+cufflinks.datagen.heatmap(n_x=5, n_y=10)[source]
+

Returns a DataFrame with the required format for +a heatmap plot

+
+
+
n_x : int
+
Number of x categories
+
n_y : int
+
Number of y categories
+
+
+
+ +
+
+cufflinks.datagen.histogram(n_traces=1, n=500, mode=None)[source]
+

Returns a DataFrame with the required format for +a box plot

+
+
+
n_traces : int
+
Number of traces
+
n : int
+
Number of points for each trace
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.lines(n_traces=5, n=100, columns=None, dateIndex=True, mode=None)[source]
+

Returns a DataFrame with the required format for +a scatter (lines) plot

+
+
+
n_traces : int
+
Number of traces
+
n : int
+
Number of points for each trace
+
columns : [str]
+
List of column names
+
dateIndex : bool
+
If True it will return a datetime index +if False it will return a enumerated index
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.ohlc(n=100)[source]
+

Returns a DataFrame with the required format for +a candlestick or ohlc plot +df[[‘open’,’high’,’low’,’close’]]

+
+
+
n : int
+
Number of ohlc points
+
+
+
+ +
+
+cufflinks.datagen.ohlcv(n=100)[source]
+

Returns a DataFrame with the required format for +a candlestick or ohlc plot +df[[‘open’,’high’,’low’,’close’,’volume’]

+
+
+
n : int
+
Number of ohlc points
+
+
+
+ +
+
+cufflinks.datagen.pie(n_labels=5, mode=None)[source]
+

Returns a DataFrame with the required format for +a pie plot

+
+
+
n_labels : int
+
Number of labels
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.scatter(n_categories=5, n=10, prefix='category', mode=None)[source]
+

Returns a DataFrame with the required format for +a scatter plot

+
+
+
n_categories : int
+
Number of categories
+
n : int
+
Number of points for each category
+
prefix : string
+
Name for each category
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.scatter3d(n_categories=5, n=10, prefix='category', mode=None)[source]
+

Returns a DataFrame with the required format for +a scatter3d plot

+
+
+
n_categories : int
+
Number of categories
+
n : int
+
Number of points for each trace
+
prefix : string
+
Name for each trace
+
mode : string
+
+
Format for each item
+
‘abc’ for alphabet columns +‘stocks’ for random stock names
+
+
+
+
+
+ +
+
+cufflinks.datagen.scattergeo()[source]
+

Returns

+
+ +
+
+cufflinks.datagen.sinwave(n=4, inc=0.25)[source]
+

Returns a DataFrame with the required format for +a surface (sine wave) plot

+
+
+
n : int
+
Ranges for X and Y axis (-n,n)
+
n_y : int
+
Size of increment along the axis
+
+
+
+ +
+
+cufflinks.datagen.surface(n_x=20, n_y=20)[source]
+

Returns a DataFrame with the required format for +a surface plot

+
+
+
n_x : int
+
Number of points along the X axis
+
n_y : int
+
Number of points along the Y axis
+
+
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.date_tools.html b/docs/html/cufflinks.date_tools.html new file mode 100644 index 0000000..1cc3725 --- /dev/null +++ b/docs/html/cufflinks.date_tools.html @@ -0,0 +1,173 @@ + + + + + + + + cufflinks.date_tools module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.date_tools module

+
+
+cufflinks.date_tools.dateToInt(date, strfmt='%Y%m%d')[source]
+

Converts a datetime date into int +Parameters: +———–

+
+
+
date : datetime
+
date in datetime format
+
strfmt : string
+
format in which the int date will be generated
+
+
+
+
Example:
+
dateToInt(dt.date(2015,10,23),’%Y’)
+
+
+ +
+
+cufflinks.date_tools.dateToString(date, strfmt='%Y%m%d')[source]
+
+ +
+
+cufflinks.date_tools.getDateFromToday(delta, strfmt='%Y%m%d')[source]
+

Returns a string that represents a date n numbers of days from today. +Parameters: +———–

+
+
+
delta : int
+
number of days
+
strfmt : string
+
format in which the date will be represented
+
+
+
+ +
+
+cufflinks.date_tools.getDatefromDate(date, delta, strfmt='%Y%m%d')[source]
+
+ +
+
+cufflinks.date_tools.intToDate(intDate)[source]
+

Converts an int format date into datetime +Parameters: +———–

+
+
+
intDate : int
+
date in int format
+
+
+
+
Example:
+
intDate(20151023)
+
+
+ +
+
+cufflinks.date_tools.stringToDate(stringDate, strfmt='%Y%m%d')[source]
+

Converts a string format date into datetime +Parameters: +———–

+
+
+
stringDate : string
+
date in string format
+
strfmt : string
+
format in which the input date is represented
+
+
+
+ +
+
+cufflinks.date_tools.stringToString(date, from_strfmt='%d%b%y', to_strfmt='%Y%m%d')[source]
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.exceptions.html b/docs/html/cufflinks.exceptions.html new file mode 100644 index 0000000..4d8c90c --- /dev/null +++ b/docs/html/cufflinks.exceptions.html @@ -0,0 +1,94 @@ + + + + + + + + cufflinks.exceptions module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.exceptions module

+
+
+exception cufflinks.exceptions.CufflinksError[source]
+

Bases: Exception

+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.extract.html b/docs/html/cufflinks.extract.html new file mode 100644 index 0000000..26c34c8 --- /dev/null +++ b/docs/html/cufflinks.extract.html @@ -0,0 +1,102 @@ + + + + + + + + cufflinks.extract module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.extract module

+
+
+cufflinks.extract.to_df(figure)[source]
+

Extracts the data from a Plotly Figure

+
+
+
figure : plotly_figure
+
Figure from which data will be +extracted
+
+

Returns a DataFrame or list of DataFrame

+
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.html b/docs/html/cufflinks.html new file mode 100644 index 0000000..97097d0 --- /dev/null +++ b/docs/html/cufflinks.html @@ -0,0 +1,125 @@ + + + + + + + + cufflinks package — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.offline.html b/docs/html/cufflinks.offline.html new file mode 100644 index 0000000..0ff8a96 --- /dev/null +++ b/docs/html/cufflinks.offline.html @@ -0,0 +1,108 @@ + + + + + + + + cufflinks.offline module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.offline module

+
+
+cufflinks.offline.go_offline(connected=False)[source]
+
+ +
+
+cufflinks.offline.go_online()[source]
+
+ +
+
+cufflinks.offline.is_offline()[source]
+
+ +
+
+cufflinks.offline.upgrade(url=None)[source]
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.pandastools.html b/docs/html/cufflinks.pandastools.html new file mode 100644 index 0000000..02d2f27 --- /dev/null +++ b/docs/html/cufflinks.pandastools.html @@ -0,0 +1,128 @@ + + + + + + + + cufflinks.pandastools module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.pandastools module

+
+
+cufflinks.pandastools.bestfit(self)[source]
+

Returns a series with the bestfit values.

+
+
Example:
+
Series.bestfit()
+
Returns: series
+
The returned series contains a parameter +called ‘formula’ which includes the string representation +of the bestfit line.
+
+
+ +
+
+cufflinks.pandastools.normalize(self, asOf=None, multiplier=100)[source]
+

Returns a normalized series or DataFrame

+
+
Example:
+
Series.normalize()
+
+

Returns: series of DataFrame

+
+
+
asOf : string
+
Date format +‘2015-02-29’
+
multiplier : int
+
Factor by which the results will be adjusted
+
+
+
+ +
+
+cufflinks.pandastools.read_google(url, **kwargs)[source]
+

Reads a google sheet

+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.plotlytools.html b/docs/html/cufflinks.plotlytools.html new file mode 100644 index 0000000..670c0ee --- /dev/null +++ b/docs/html/cufflinks.plotlytools.html @@ -0,0 +1,203 @@ + + + + + + + + cufflinks.plotlytools module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.plotlytools module

+
+
+cufflinks.plotlytools.dict_to_iplot(d)[source]
+
+ +
+
+cufflinks.plotlytools.get_colors(colors, colorscale, keys, asList=False)[source]
+
+ +
+
+cufflinks.plotlytools.get_items_as_list(items, keys, items_names='styles')[source]
+

Returns a dict with an item per key

+
+
+
items : string, list or dict
+
Items (ie line styles)
+
keys: list
+
List of keys
+
items_names : string
+
Name of items
+
+
+
+ +
+
+cufflinks.plotlytools.iplot(figure, validate=True, sharing=None, filename='', online=None, asImage=False, asUrl=False, asPlot=False, dimensions=None, display_image=True, **kwargs)[source]
+

Plots a figure in IPython, creates an HTML or generates an Image

+
+
figure : figure
+
Plotly figure to be charted
+
validate : bool
+
If True then all values are validated before +it is charted
+
sharing : string
+
+
Sets the sharing level permission
+
public - anyone can see this chart +private - only you can see this chart +secret - only people with the link can see the chart
+
+
+
filename : string
+
Name to be used to save the file in the server, or as an image
+
online : bool
+
If True then the chart/image is rendered on the server +even when running in offline mode.
+
asImage : bool
+

If True it returns an Image (png) +In ONLINE mode:

+
+
+
Image file is saved in the working directory
+
+
Accepts:
+
filename +dimensions +scale +display_image
+
+
+
+
+
+
In OFFLINE mode:
+

Image file is downloaded (downloads folder) and a +regular plotly chart is displayed in Jupyter

+
+
+
Accepts:
+
filename +dimensions
+
+
+
+
+
+
asUrl : bool
+
+
If True the chart url/path is returned. No chart is displayed.
+
If Online : the URL is returned +If Offline : the local path is returned
+
+
+
asPlot : bool
+
If True the chart opens in browser
+
dimensions : tuple(int,int)
+
+
Dimensions for image
+
(width,height)
+
+
+
display_image : bool
+
If true, then the image is displayed after it has been saved +Requires Jupyter Notebook +Only valid when asImage=True
+
+
+
+
legend : bool
+
If False then the legend will not be shown
+
scale : integer
+
Increase the resolution of the image by scale amount +Only valid when asImage=True
+
+
+
+ +
+
+cufflinks.plotlytools.iplot_to_dict(data)[source]
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.quant_figure.html b/docs/html/cufflinks.quant_figure.html new file mode 100644 index 0000000..b9e1a69 --- /dev/null +++ b/docs/html/cufflinks.quant_figure.html @@ -0,0 +1,818 @@ + + + + + + + + cufflinks.quant_figure module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.quant_figure module

+

QuantFigure allows you to create a persistent object. +Annotations and Technical Studies can be added on demand.

+

It accepts any dataframe with a timeseries index.

+
+
Try it out:
+
qf=cf.QuantFig(cf.datagen.ohlc()) +qf.iplot()
+
+
+
+class cufflinks.quant_figure.QuantFig(df, kind='candlestick', columns=None, **kwargs)[source]
+

Bases: object

+
+
+add_adx(periods=14, str=None, name='', **kwargs)[source]
+

Add Average Directional Index (ADX) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_annotations(annotations, **kwargs)[source]
+

Add an annotation to the QuantFigure.

+
+
Parameters:
+
+
annotations : dict or list(dict,)
+
+
Annotations can be on the form form of
+
{‘date’ : ‘text’} +and the text will automatically be placed at the +right level on the chart
+
or
+
A Plotly fully defined annotation
+
+
+
+
+
kwargs :
+
+
fontcolor : str
+
Text color for annotations
+
fontsize : int
+
Text size for annotations
+
textangle : int
+
Textt angle
+
+

See https://plot.ly/python/reference/#layout-annotations +for a complete list of valid parameters.

+
+
+
+ +
+
+add_atr(periods=14, str=None, name='', **kwargs)[source]
+

Add Average True Range (ATR) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_bollinger_bands(periods=20, boll_std=2, fill=True, column=None, name='', str='{name}({column}, {period})', **kwargs)[source]
+

Add Bollinger Bands (BOLL) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
boll_std : int
+
Number of standard deviations for +the bollinger upper and lower bands
+
fill : boolean
+
If True, then the innner area of the +bands will filled
+
column :string
+
Defines the data column name that contains the +data over which the study will be applied. +Default: ‘close’
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
fillcolor : string
+

Color to be used for the fill color. +Example:

+
+
‘rgba(62, 111, 176, .4)’
+
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_cci(periods=14, cci_upper=100, cci_lower=-100, showbands=True, str=None, name='', **kwargs)[source]
+

Commodity Channel Indicator study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
cci_upper : int
+
Upper bands level +default : 100
+
cci_lower : int
+
Lower band level +default : -100
+
showbands : boolean
+
If True, then the cci_upper and +cci_lower levels are displayed
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_dmi(periods=14, str='{name}({period})', name='', **kwargs)[source]
+

Add Directional Movement Index (DMI) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_ema(periods=20, column=None, str=None, name='', **kwargs)[source]
+

Add Exponential Moving Average (EMA) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
column :string
+
Defines the data column name that contains the +data over which the study will be applied. +Default: ‘close’
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_macd(fast_period=12, slow_period=26, signal_period=9, column=None, name='', str=None, **kwargs)[source]
+

Add Moving Average Convergence Divergence (MACD) study to QuantFigure.studies

+
+
Parameters:
+
+
fast_period : int
+
MACD Fast Period
+
slow_period : int
+
MACD Slow Period
+
signal_period : int
+
MACD Signal Period
+
column :string
+
Defines the data column name that contains the +data over which the study will be applied. +Default: ‘close’
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_ptps(periods=14, af=0.2, initial='long', str=None, name='', **kwargs)[source]
+

Add Parabolic SAR (PTPS) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
af : float
+
acceleration factor
+
initial : ‘long’ or ‘short’
+
Iniital position +default: long
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_resistance(date, on='high', mode='starttoend', text=None, **kwargs)[source]
+

Adds a resistance line to the QuantFigure

+
+
Parameters:
+
+
date0 : string
+
The resistance line will be drawn at the ‘y’ level +value that corresponds to this date.
+
on : string
+

Indicate the data series in which the +resistance should be based.

+
+
‘close’ +‘high’ +‘low’ +‘open’
+
+
mode : string
+

Defines how the support/resistance will +be drawn

+
+
‘starttoened’ : (x0,x1) +‘fromstart’ : (x0,date) +‘toend’ : (date,x1)
+
+
text : string
+
If passed, then an annotation will be added +to the resistance (at mid point)
+
+
+
kwargs:
+
+
from_strfmt : string
+
Defines the date formating in which +date0 and date1 are stated. +default: ‘%d%b%y’
+
to_strfmt : string
+
Defines the date formatting +to which it should be converted. +This should match the same format as the timeseries index. +default : ‘%Y-%m-%d’
+
+
+
+
+ +
+
+add_rsi(periods=20, rsi_upper=70, rsi_lower=30, showbands=True, column=None, name='', str=None, **kwargs)[source]
+

Add Relative Strength Indicator (RSI) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
rsi_upper : int
+
bounds [0,100] +Upper (overbought) level
+
rsi_lower : int
+
bounds [0,100] +Lower (oversold) level
+
showbands : boolean
+
If True, then the rsi_upper and +rsi_lower levels are displayed
+
column :string
+
Defines the data column name that contains the +data over which the study will be applied. +Default: ‘close’
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_shapes(**kwargs)[source]
+

Add a shape to the QuantFigure.

+
+
kwargs :
+
+
hline : int, list or dict
+
Draws a horizontal line at the +indicated y position(s) +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
vline : int, list or dict
+
Draws a vertical line at the +indicated x position(s) +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
hspan : (y0,y1)
+
Draws a horizontal rectangle at the +indicated (y0,y1) positions. +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
vspan : (x0,x1)
+
Draws a vertical rectangle at the +indicated (x0,x1) positions. +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
shapes : dict or list(dict)
+
List of dictionaries with the +specifications of a given shape. +See help(cufflinks.tools.get_shape) +for more information
+
+
+
+
+ +
+
+add_sma(periods=20, column=None, name='', str=None, **kwargs)[source]
+

Add Simple Moving Average (SMA) study to QuantFigure.studies

+
+
Parameters:
+
+
periods : int or list(int)
+
Number of periods
+
column :string
+
Defines the data column name that contains the +data over which the study will be applied. +Default: ‘close’
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs:
+
+
legendgroup : bool
+
If true, all legend items are grouped into a +single one
+
+

All formatting values available on iplot()

+
+
+
+ +
+
+add_support(date, on='low', mode='starttoend', text=None, **kwargs)[source]
+

Adds a support line to the QuantFigure

+
+
Parameters:
+
+
date0 : string
+
The support line will be drawn at the ‘y’ level +value that corresponds to this date.
+
on : string
+

Indicate the data series in which the +support line should be based.

+
+
‘close’ +‘high’ +‘low’ +‘open’
+
+
mode : string
+

Defines how the support/resistance will +be drawn

+
+
‘starttoened’ : (x0,x1) +‘fromstart’ : (x0,date) +‘toend’ : (date,x1)
+
+
text : string
+
If passed, then an annotation will be added +to the support line (at mid point)
+
+
+
kwargs:
+
+
from_strfmt : string
+
Defines the date formating in which +date0 and date1 are stated. +default: ‘%d%b%y’
+
to_strfmt : string
+
Defines the date formatting +to which it should be converted. +This should match the same format as the timeseries index. +default : ‘%Y-%m-%d’
+
+
+
+
+ +
+
+add_trendline(date0, date1, on='close', text=None, **kwargs)[source]
+

Adds a trendline to the QuantFigure. +Given 2 dates, the trendline is connected on the data points +that correspond to those dates.

+
+
Parameters:
+
+
date0 : string
+
Trendline starting date
+
date1 : string
+
Trendline end date
+
on : string
+

Indicate the data series in which the +trendline should be based.

+
+
‘close’ +‘high’ +‘low’ +‘open’
+
+
text : string
+
If passed, then an annotation will be added +to the trendline (at mid point)
+
+
+
kwargs:
+
+
from_strfmt : string
+
Defines the date formating in which +date0 and date1 are stated. +default: ‘%d%b%y’
+
to_strfmt : string
+
Defines the date formatting +to which it should be converted. +This should match the same format as the timeseries index. +default : ‘%Y-%m-%d’
+
+
+
+
+ +
+
+add_volume(colorchange=True, column=None, name='', str='{name}', **kwargs)[source]
+

Add ‘volume’ study to QuantFigure.studies

+
+
Parameters:
+
+
colorchange : bool
+
If true then each volume bar will have a fill color +depending on if ‘base’ had a positive or negative +change compared to the previous value
+
column :string
+
Defines the data column name that contains the volume data. +Default: ‘volume’
+
name : string
+
Name given to the study
+
str : string
+

Label factory for studies +The following wildcards can be used:

+
+
{name} : Name of the column +{study} : Name of the study +{period} : Period used
+
+
Examples:
+
‘study: {study} - period: {period}’
+
+
+
+
+
kwargs :
+
+
base : string
+
Defines the column which will define the +positive/negative changes (if colorchange=True). +Default = ‘close’
+
up_color : string
+
Color for positive bars
+
down_color : string
+
Color for negative bars
+
+
+
+
+ +
+
+delete(*args)[source]
+

Deletes the values for a QuantFigure +The key-values are automatically deleted from the correct +section of the QuantFigure

+
+ +
+
+figure(**kwargs)[source]
+

Returns a Plotly figure

+
+ +
+
+iplot(**kwargs)[source]
+
+ +
+
+update(**kwargs)[source]
+

Updates the values for a QuantFigure +The key-values are automatically assigned to the correct +section of the QuantFigure

+
+ +
+ +
+
+cufflinks.quant_figure.get_annotation_kwargs()[source]
+
+ +
+
+cufflinks.quant_figure.get_layout_kwargs()[source]
+
+ +
+
+cufflinks.quant_figure.get_shapes_kwargs()[source]
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.ta.html b/docs/html/cufflinks.ta.html new file mode 100644 index 0000000..fa601fa --- /dev/null +++ b/docs/html/cufflinks.ta.html @@ -0,0 +1,170 @@ + + + + + + + + cufflinks.ta module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.ta module

+
+
+exception cufflinks.ta.StudyError[source]
+

Bases: Exception

+
+ +
+
+cufflinks.ta.adx(df, periods=14, high='high', low='low', close='close', di=False, include=True, str='{name}({period})', **kwargs)[source]
+
+ +
+
+cufflinks.ta.atr(df, periods=14, high='high', low='low', close='close', include=True, str='{name}({period})', **kwargs)[source]
+
+ +
+
+cufflinks.ta.boll(df, periods=20, boll_std=2, column=None, include=True, str='{name}({column}, {period})', detail=False, **boll_kwargs)[source]
+
+ +
+
+cufflinks.ta.cci(df, periods=14, high='high', low='low', close='close', include=True, str='{name}({period})', **kwargs)[source]
+
+ +
+
+cufflinks.ta.correl(df, periods=21, columns=None, include=True, str=None, detail=False, how='value', **correl_kwargs)[source]
+
+
how : string
+
value +pct_chg +diff
+
+
+ +
+
+cufflinks.ta.dmi(df, periods=14, high='high', low='low', close='close', include=True, str='{name}({period})', **kwargs)[source]
+
+ +
+
+cufflinks.ta.ema(df, periods=21, column=None, include=True, str='{name}({column}, {period})', detail=False)[source]
+
+ +
+
+cufflinks.ta.get_column_name(name, study=None, str=None, period=None, column=None, period_dict=None)[source]
+
+ +
+
+cufflinks.ta.macd(df, fast_period=12, slow_period=26, signal_period=9, column=None, include=True, str=None, detail=False, **macd_kwargs)[source]
+
+ +
+
+cufflinks.ta.ptps(df, periods=14, initial='long', af=0.02, high='high', low='low', include=True, str='{name}({period})', **kwargs)[source]
+
+ +
+
+cufflinks.ta.rename(df, _df, study, periods, column, include, str, detail, output=None, period_dict=None)[source]
+
+ +
+
+cufflinks.ta.rsi(df, periods=14, column=None, include=True, str='{name}({column}, {period})', detail=False, **kwargs)[source]
+
+ +
+
+cufflinks.ta.sma(df, periods=21, column=None, include=True, str='{name}({column}, {period})', detail=False)[source]
+
+ +
+
+cufflinks.ta.validate(df, column=None)[source]
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.themes.html b/docs/html/cufflinks.themes.html new file mode 100644 index 0000000..c979c9f --- /dev/null +++ b/docs/html/cufflinks.themes.html @@ -0,0 +1,88 @@ + + + + + + + + cufflinks.themes module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.themes module

+
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.tools.html b/docs/html/cufflinks.tools.html new file mode 100644 index 0000000..bbb16e8 --- /dev/null +++ b/docs/html/cufflinks.tools.html @@ -0,0 +1,815 @@ + + + + + + + + cufflinks.tools module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.tools module

+
+
+cufflinks.tools.axis
+
+ +
+
+cufflinks.tools.figures(df, specs, asList=False)[source]
+

Generates multiple Plotly figures for a given DataFrame

+
+
+
df : DataFrame
+
Pandas DataFrame
+
specs : list(dict)
+
List of dictionaries with the properties +of each figure. +All properties avaialbe can be seen with +help(cufflinks.pd.DataFrame.iplot)
+
asList : boolean
+
If True, then a list of figures is returned. +Otherwise a single (merged) figure is returned. +Default : False
+
+
+
+ +
+
+cufflinks.tools.getAnnotations(df, annotations, kind='lines', theme=None, **kwargs)[source]
+

Generates an annotations object

+
+
+
df : DataFrame
+
Original DataFrame of values
+
annotations : dict or list
+
Dictionary of annotations +{x_point : text} +or +List of Plotly annotations
+
+
+
+ +
+
+cufflinks.tools.getLayout(kind=None, theme=None, title='', xTitle='', yTitle='', zTitle='', barmode='', bargap=None, bargroupgap=None, margin=None, dimensions=None, width=None, height=None, annotations=None, is3d=False, **kwargs)[source]
+

Generates a plotly Layout

+
+
+
theme : string
+
+
Layout Theme
+
solar +pearl +white
+
+
+
title : string
+
Chart Title
+
xTitle : string
+
X Axis Title
+
yTitle : string
+
Y Axis Title
+
zTitle : string
+
Z Axis Title +Applicable only for 3d charts
+
barmode : string
+
+
Mode when displaying bars
+
group +stack +overlay
+
+
+
bargap : float
+
+
Sets the gap between bars
+
[0,1)
+
+

Applicabe for bar and histogram plots

+
+
bargroupgap : float
+
+
Set the gap between groups
+
[0,1)
+
+

Applicabe for bar and histogram plots

+
+
gridcolor : string
+
grid color
+
zerolinecolor : string
+
zero line color
+
margin : dict or tuple
+
Dictionary (l,r,b,t) or +Tuple containing the left, +right, bottom and top margins
+
dimensions : tuple
+
Dimensions of figure
+
annotations : dict or list
+
+
Dictionary of annotations
+
{x_point : text}
+
+

or +List of Plotly Annotations

+
+
is3d : bool
+
Indicates if the layout is for a 3D chart
+
+
+
Shapes
+
+
hline : int, list or dict
+
Draws a horizontal line at the +indicated y position(s) +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
vline : int, list or dict
+
Draws a vertical line at the +indicated x position(s) +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
hspan : (y0,y1)
+
Draws a horizontal rectangle at the +indicated (y0,y1) positions. +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
vspan : (x0,x1)
+
Draws a vertical rectangle at the +indicated (x0,x1) positions. +Extra parameters can be passed in +the form of a dictionary (see shapes)
+
shapes : dict or list(dict)
+
List of dictionaries with the +specifications of a given shape. +See help(cufflinks.tools.get_shape) +for more information
+
+
+
Axis Ranges
+
+
xrange : [lower_bound,upper_bound]
+
Sets the range for the x axis
+
yrange : [lower_bound,upper_bound]
+
Sets the range for the y axis
+
zrange : [lower_bound,upper_bound]
+
Sets the range for the z axis
+
+
+
Explicit Layout Updates
+
+
layout_update : dict
+
The layout will be modified with all +the explicit values stated in the +dictionary
+
+
+
Range Selector
+
+
rangeselector : dict
+

Defines a rangeselector object +see help(cf.tools.get_range_selector) for more information +Example:

+
+
+
{‘steps’:[‘1y’,‘2 months’,‘5 weeks’,’ytd’,‘2mtd’],
+
‘axis’:’xaxis1’, ‘bgcolor’ : (‘blue’,.3), +‘x’: 0.2 , ‘y’ : 0.9}
+
+
+
+
+
+
Range Slider
+
+
rangeslider : bool or dict
+

Defines if a rangeslider is displayed +If bool:

+
+
True : Makes it visible
+
+
if dict:
+
Rangeslider object
+
Example:
+
{‘bgcolor’:(‘blue’,.3),’autorange’:True}
+
+
+
+
+
Annotations
+
+
fontcolor : str
+
Text color for annotations
+
fontsize : int
+
Text size for annotations
+
textangle : int
+
Textt angle
+
+

See https://plot.ly/python/reference/#layout-annotations +for a complete list of valid parameters.

+
+
+
+
+ +
+
+cufflinks.tools.getTheme(theme=None)[source]
+

Returns a theme definition.

+

To see the colors translated (hex) use +cufflinks.getLayout(theme) instead.

+
+ +
+
+cufflinks.tools.getThemes()[source]
+

Returns the list of available themes

+
+ +
+
+cufflinks.tools.get_base_layout(figs)[source]
+

Generates a layout with the union of all properties of multiple +figures’ layouts

+
+
+
fig : list(Figures)
+
List of Plotly Figures
+
+
+
+ +
+
+cufflinks.tools.get_candle(df, up_color=None, down_color=None, theme=None, layout=None, **kwargs)[source]
+
+ +
+
+cufflinks.tools.get_def(figure)[source]
+
+ +
+
+cufflinks.tools.get_dom(figure)[source]
+
+ +
+
+cufflinks.tools.get_error_bar(axis='y', type='data', values=None, values_minus=None, color=None, thickness=1, width=5, opacity=1)[source]
+
+ +
+
+cufflinks.tools.get_len(figure)[source]
+
+ +
+
+cufflinks.tools.get_ohlc(df, up_color=None, down_color=None, theme=None, layout=None, **kwargs)[source]
+
+ +
+
+cufflinks.tools.get_range_selector(steps=['1m', '1y'], bgcolor='rgba(150, 200, 250, 0.4)', x=0, y=0.9, visible=True, **kwargs)[source]
+

Returns a range selector +Reference: https://plot.ly/python/reference/#layout-xaxis-rangeselector

+
+
+
steps : string or list(string)
+
+
Steps for the range
+
+
Examples:
+
[‘1y’,‘2 months’,‘5 weeks’,’ytd’,‘2mtd’]
+
+
+
+
+
bgocolor : string or tuple(color,alpha)
+
+
Background color
+
+
Examples:
+
‘cyan’ +‘rgba(232,214,10,.5)’ +(‘blue’,.3)
+
+
+
+
+
font_size : int
+
Font size
+
x : float
+
Position along the x axis +Domain (0,1)
+
y : float
+
Position along the y axis +Domain (0,1)
+
+
+
+ +
+
+cufflinks.tools.get_ref(figure)[source]
+
+ +
+
+cufflinks.tools.get_ref_axis(figure)[source]
+
+ +
+
+cufflinks.tools.get_shape(kind='line', x=None, y=None, x0=None, y0=None, x1=None, y1=None, span=0, color='red', dash='solid', width=1, fillcolor=None, fill=False, opacity=1, xref='x', yref='y')[source]
+

Returns a plotly shape

+
+
+
kind : string
+
+
Shape kind
+
line +rect +circle
+
+
+
x : float
+
x values for the shape. +This assumes x0=x1
+
x0 : float
+
x0 value for the shape
+
x1 : float
+
x1 value for the shape
+
y : float
+
y values for the shape. +This assumes y0=y1
+
y0 : float
+
y0 value for the shape
+
y1 : float
+
y1 value for the shape
+
color : string
+
color for shape line
+
dash : string
+
+
line style
+
solid +dash +dashdot +dot
+
+
+
width : int
+
line width
+
fillcolor : string
+
shape fill color
+
fill : bool
+
If True then fill shape +If not fillcolor then the +line color will be used
+
opacity : float [0,1]
+
opacity of the fill
+
xref : string
+

Sets the x coordinate system +which this object refers to

+
+
‘x’ +‘paper’ +‘x2’ etc
+
+
yref : string
+

Sets the y coordinate system +which this object refers to

+
+
‘y’ +‘paper’ +‘y2’ etc
+
+
+
+
+ +
+
+cufflinks.tools.get_subplots(rows=1, cols=1, shared_xaxes=False, shared_yaxes=False, start_cell='top-left', theme=None, base_layout=None, **kwargs)[source]
+

Generates a subplot view for a set of figures

+
+
+
rows : int
+
Number of rows
+
cols : int
+
Number of cols
+
shared_xaxes : bool
+
Assign shared x axes. +If True, subplots in the same grid column have one common +shared x-axis at the bottom of the gird.
+
shared_yaxes : bool
+
Assign shared y axes. +If True, subplots in the same grid row have one common +shared y-axis on the left-hand side of the gird.
+
start_cell : string
+
+
‘bottom-left’ +‘top-left’
+

Choose the starting cell in the subplot grid used to set the +domains of the subplots.

+
+
theme : string
+
+
Layout Theme
+
solar +pearl +white
+
+

see cufflinks.getThemes() for all +available themes

+
+
horizontal_spacing : float
+
+
[0,1]
+

Space between subplot columns.

+
+
vertical_spacing : float
+
Space between subplot rows.
+
specs : list of dicts
+
+
Subplot specifications.
+
ex1: specs=[[{}, {}], [{‘colspan’: 2}, None]] +ex2: specs=[[{‘rowspan’: 2}, {}], [None, {}]]
+
+
    +
  • Indices of the outer list correspond to subplot grid rows +starting from the bottom. The number of rows in ‘specs’ +must be equal to ‘rows’.
  • +
  • Indices of the inner lists correspond to subplot grid columns +starting from the left. The number of columns in ‘specs’ +must be equal to ‘cols’.
  • +
  • Each item in the ‘specs’ list corresponds to one subplot +in a subplot grid. (N.B. The subplot grid has exactly ‘rows’ +times ‘cols’ cells.)
  • +
  • Use None for blank a subplot cell (or to move pass a col/row span).
  • +
  • Note that specs[0][0] has the specs of the ‘start_cell’ subplot.
  • +
  • +
    Each item in ‘specs’ is a dictionary.
    +
    The available keys are:
      +
    • is_3d (boolean, default=False): flag for 3d scenes
    • +
    • +
      colspan (int, default=1): number of subplot columns
      +
      for this subplot to span.
      +
      +
    • +
    • +
      rowspan (int, default=1): number of subplot rows
      +
      for this subplot to span.
      +
      +
    • +
    • l (float, default=0.0): padding left of cell
    • +
    • r (float, default=0.0): padding right of cell
    • +
    • t (float, default=0.0): padding right of cell
    • +
    • b (float, default=0.0): padding bottom of cell
    • +
    +
    +
    +
  • +
  • Use ‘horizontal_spacing’ and ‘vertical_spacing’ to adjust +the spacing in between the subplots.
  • +
+
+
insets : list of dicts
+

Inset specifications.

+
    +
  • +
    Each item in ‘insets’ is a dictionary.
    +
    The available keys are:
      +
    • +
      cell (tuple, default=(1,1)): (row, col) index of the
      +
      subplot cell to overlay inset axes onto.
      +
      +
    • +
    • is_3d (boolean, default=False): flag for 3d scenes
    • +
    • +
      l (float, default=0.0): padding left of inset
      +
      in fraction of cell width
      +
      +
    • +
    • +
      w (float or ‘to_end’, default=’to_end’) inset width
      +
      in fraction of cell width (‘to_end’: to cell right edge)
      +
      +
    • +
    • +
      b (float, default=0.0): padding bottom of inset
      +
      in fraction of cell height
      +
      +
    • +
    • +
      h (float or ‘to_end’, default=’to_end’) inset height
      +
      in fraction of cell height (‘to_end’: to cell top edge)
      +
      +
    • +
    +
    +
    +
  • +
+
+
+
+
+ +
+
+cufflinks.tools.get_trendline(df, date0, date1, column='close', **kwargs)[source]
+
+ +
+
+cufflinks.tools.get_which(figure)[source]
+
+ +
+
+cufflinks.tools.go_offline(connected=False, offline=True)[source]
+
+ +
+
+cufflinks.tools.is_offline()[source]
+
+ +
+
+cufflinks.tools.merge_figures(figures)[source]
+

Generates a single Figure from a list of figures

+
+
+
figures : list(Figures)
+
List of figures to be merged.
+
+
+
+ +
+
+cufflinks.tools.scatter_matrix(df, theme=None, bins=10, color='grey', size=2)[source]
+

Displays a matrix with scatter plot for each pair of +Series in the DataFrame. +The diagonal shows a histogram for each of the Series

+
+
+
df : DataFrame
+
Pandas DataFrame
+
theme : string
+
Theme to be used (if not the default)
+
bins : int
+
Number of bins to use for histogram
+
color : string
+
Color to be used for each scatter plot
+
size : int
+
Size for each marker on the scatter plot
+
+
+
+ +
+
+cufflinks.tools.set_errors(figure, trace=None, axis='y', type='data', values=None, values_minus=None, color=None, thickness=1, width=None, opacity=None, **kwargs)[source]
+
+ +
+
+cufflinks.tools.strip_figures(figure)[source]
+

Strips a figure into multiple figures with a trace on each of them

+
+
+
figure : Figure
+
Plotly Figure
+
+
+
+ +
+
+cufflinks.tools.subplots(figures, shape=None, shared_xaxes=False, shared_yaxes=False, start_cell='top-left', theme=None, base_layout=None, **kwargs)[source]
+

Generates a subplot view for a set of figures +This is a wrapper for plotly.tools.make_subplots

+
+
+
figures : [Figures]
+
List of Plotly Figures
+
shape : (rows,cols)
+
Tuple indicating the size of rows and columns +If omitted then the layout is automatically set
+
shared_xaxes : bool
+
Assign shared x axes. +If True, subplots in the same grid column have one common +shared x-axis at the bottom of the grid.
+
shared_yaxes : bool
+
Assign shared y axes. +If True, subplots in the same grid row have one common +shared y-axis on the left-hand side of the grid.
+
start_cell : string
+
+
‘bottom-left’ +‘top-left’
+

Choose the starting cell in the subplot grid used to set the +domains of the subplots.

+
+
theme : string
+
+
Layout Theme
+
solar +pearl +white
+
+

see cufflinks.getThemes() for all +available themes

+
+
base_layout : layout (dict)
+
Layout to be used as base where the subplots will be +added
+
subplot_titles : list(string)
+
List of strings that contains the titles of each +plot.
+
horizontal_spacing : float
+
+
[0,1]
+

Space between subplot columns.

+
+
vertical_spacing : float
+
Space between subplot rows.
+
specs : list of dicts
+
+
Subplot specifications.
+
ex1: specs=[[{}, {}], [{‘colspan’: 2}, None]] +ex2: specs=[[{‘rowspan’: 2}, {}], [None, {}]]
+
+
    +
  • Indices of the outer list correspond to subplot grid rows +starting from the bottom. The number of rows in ‘specs’ +must be equal to ‘rows’.
  • +
  • Indices of the inner lists correspond to subplot grid columns +starting from the left. The number of columns in ‘specs’ +must be equal to ‘cols’.
  • +
  • Each item in the ‘specs’ list corresponds to one subplot +in a subplot grid. (N.B. The subplot grid has exactly ‘rows’ +times ‘cols’ cells.)
  • +
  • Use None for blank a subplot cell (or to move pass a col/row span).
  • +
  • Note that specs[0][0] has the specs of the ‘start_cell’ subplot.
  • +
  • +
    Each item in ‘specs’ is a dictionary.
    +
    The available keys are:
      +
    • is_3d (boolean, default=False): flag for 3d scenes
    • +
    • +
      colspan (int, default=1): number of subplot columns
      +
      for this subplot to span.
      +
      +
    • +
    • +
      rowspan (int, default=1): number of subplot rows
      +
      for this subplot to span.
      +
      +
    • +
    • l (float, default=0.0): padding left of cell
    • +
    • r (float, default=0.0): padding right of cell
    • +
    • t (float, default=0.0): padding right of cell
    • +
    • b (float, default=0.0): padding bottom of cell
    • +
    +
    +
    +
  • +
  • Use ‘horizontal_spacing’ and ‘vertical_spacing’ to adjust +the spacing in between the subplots.
  • +
+
+
insets : list of dicts
+

Inset specifications.

+
    +
  • +
    Each item in ‘insets’ is a dictionary.
    +
    The available keys are:
      +
    • +
      cell (tuple, default=(1,1)): (row, col) index of the
      +
      subplot cell to overlay inset axes onto.
      +
      +
    • +
    • is_3d (boolean, default=False): flag for 3d scenes
    • +
    • +
      l (float, default=0.0): padding left of inset
      +
      in fraction of cell width
      +
      +
    • +
    • +
      w (float or ‘to_end’, default=’to_end’) inset width
      +
      in fraction of cell width (‘to_end’: to cell right edge)
      +
      +
    • +
    • +
      b (float, default=0.0): padding bottom of inset
      +
      in fraction of cell height
      +
      +
    • +
    • +
      h (float or ‘to_end’, default=’to_end’) inset height
      +
      in fraction of cell height (‘to_end’: to cell top edge)
      +
      +
    • +
    +
    +
    +
  • +
+
+
+
+
+ +
+
+cufflinks.tools.trace_dict
+
+ +
+
+cufflinks.tools.updateColors(d)[source]
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.utils.html b/docs/html/cufflinks.utils.html new file mode 100644 index 0000000..76cfc98 --- /dev/null +++ b/docs/html/cufflinks.utils.html @@ -0,0 +1,244 @@ + + + + + + + + cufflinks.utils module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.utils module

+
+
+cufflinks.utils.check_kwargs(global_kwargs, values, local_kwargs=None, clean_origin=False)[source]
+
+ +
+
+cufflinks.utils.deep_update(d, d_update)[source]
+

Updates the values (deep form) of a given dictionary

+
+
+
d : dict
+
dictionary that contains the values to update
+
d_update : dict
+
dictionary to be updated
+
+
+
+ +
+
+cufflinks.utils.dict_path(from_d, to_d={}, l=[])[source]
+

Returns a dictionary with the path in which each of the keys is found

+
+
Parameters:
+
+
from_d : dict
+
Dictionary that contains all the keys, values
+
to_d : dict
+
Dictionary to which the results will be appended
+
+
+
Example:
+

dict_path({‘level1’:{‘level2’:{‘level3’:’value’}}}) +Returns

+
+
+
{‘level1’: [],
+
‘level2’: [‘level1’], +‘level3’: [‘level1’, ‘level2’]
+
+

}

+
+
+
+
+ +
+
+cufflinks.utils.dict_replace_keyword(d, keyword, kwargs, forceupdate=True)[source]
+
+ +
+
+cufflinks.utils.dict_update(d, k, val, d_ref=None)[source]
+
+ +
+
+cufflinks.utils.inverseDict(d)[source]
+

Returns a dictionay indexed by values {value_k:key_k} +Parameters: +———–

+
+
d : dictionary
+
+ +
+
+cufflinks.utils.is_dict(val)[source]
+
+ +
+
+cufflinks.utils.is_list(val)[source]
+
+ +
+
+cufflinks.utils.is_string(val)[source]
+
+ +
+
+cufflinks.utils.kwargs_from_keyword(from_kwargs, to_kwargs, keyword, clean_origin=True)[source]
+

Looks for keys of the format keyword_value. +And return a dictionary with {keyword:value} format

+
+
+
from_kwargs : dict
+
Original dictionary
+
to_kwargs : dict
+
Dictionary where the items will be appended
+
keyword : string
+
Keyword to look for in the orginal dictionary
+
clean_origin : bool
+
If True then the k,v pairs from the original +dictionary are deleted
+
+
+
+ +
+
+cufflinks.utils.load_pickle(filename)[source]
+

Loads a serialized object +Parameters: +———–

+
+
filename : string
+
+ +
+
+cufflinks.utils.make_dict_from_list(val)[source]
+
+ +
+
+cufflinks.utils.make_list(val)[source]
+
+ +
+
+cufflinks.utils.make_string(val)[source]
+
+ +
+
+cufflinks.utils.merge_dict(d1, d2)[source]
+

d1 <– d2

+
+ +
+
+cufflinks.utils.pp(el, preString='')[source]
+

Formats (prettyprint) a concatenated dictionary

+
+ +
+
+cufflinks.utils.read_google(self, url, **kwargs)[source]
+

Reads a google sheet

+
+ +
+
+cufflinks.utils.save_pickle(obj, filename)[source]
+

Serializes a given object +Parameters: +———–

+
+
obj : object +filename : string
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/cufflinks.version.html b/docs/html/cufflinks.version.html new file mode 100644 index 0000000..d82f273 --- /dev/null +++ b/docs/html/cufflinks.version.html @@ -0,0 +1,88 @@ + + + + + + + + cufflinks.version module — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

cufflinks.version module

+
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/genindex.html b/docs/html/genindex.html new file mode 100644 index 0000000..2bcc372 --- /dev/null +++ b/docs/html/genindex.html @@ -0,0 +1,597 @@ + + + + + + + + + Index — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | H + | I + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + +
+

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

K

+ + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + +
+ + + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..b9e66fa --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,104 @@ + + + + + + + + Welcome to Cufflinks’s documentation! — Cufflinks documentation + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +
+

Indices and tables

+ +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/modules.html b/docs/html/modules.html new file mode 100644 index 0000000..bee0b11 --- /dev/null +++ b/docs/html/modules.html @@ -0,0 +1,114 @@ + + + + + + + + cufflinks — Cufflinks documentation + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/html/objects.inv b/docs/html/objects.inv new file mode 100644 index 0000000..f7ff668 Binary files /dev/null and b/docs/html/objects.inv differ diff --git a/docs/html/py-modindex.html b/docs/html/py-modindex.html new file mode 100644 index 0000000..d95c987 --- /dev/null +++ b/docs/html/py-modindex.html @@ -0,0 +1,171 @@ + + + + + + + + Python Module Index — Cufflinks documentation + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ c +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ c
+ cufflinks +
    + cufflinks.auth +
    + cufflinks.colors +
    + cufflinks.datagen +
    + cufflinks.date_tools +
    + cufflinks.exceptions +
    + cufflinks.extract +
    + cufflinks.offline +
    + cufflinks.pandastools +
    + cufflinks.plotlytools +
    + cufflinks.quant_figure +
    + cufflinks.ta +
    + cufflinks.themes +
    + cufflinks.tools +
    + cufflinks.utils +
    + cufflinks.version +
+ + +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/search.html b/docs/html/search.html new file mode 100644 index 0000000..9488b24 --- /dev/null +++ b/docs/html/search.html @@ -0,0 +1,93 @@ + + + + + + + + Search — Cufflinks documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js new file mode 100644 index 0000000..5d452c3 --- /dev/null +++ b/docs/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["cufflinks","cufflinks.auth","cufflinks.colors","cufflinks.datagen","cufflinks.date_tools","cufflinks.exceptions","cufflinks.extract","cufflinks.offline","cufflinks.pandastools","cufflinks.plotlytools","cufflinks.quant_figure","cufflinks.ta","cufflinks.themes","cufflinks.tools","cufflinks.utils","cufflinks.version","index","modules"],envversion:53,filenames:["cufflinks.rst","cufflinks.auth.rst","cufflinks.colors.rst","cufflinks.datagen.rst","cufflinks.date_tools.rst","cufflinks.exceptions.rst","cufflinks.extract.rst","cufflinks.offline.rst","cufflinks.pandastools.rst","cufflinks.plotlytools.rst","cufflinks.quant_figure.rst","cufflinks.ta.rst","cufflinks.themes.rst","cufflinks.tools.rst","cufflinks.utils.rst","cufflinks.version.rst","index.rst","modules.rst"],objects:{"":{cufflinks:[0,0,0,"-"]},"cufflinks.auth":{check_file_permissions:[1,1,1,""],ensure_local_files:[1,1,1,""],get_config_file:[1,1,1,""],get_path:[1,1,1,""],get_pickle_path:[1,1,1,""],load_json_dict:[1,1,1,""],save_json_dict:[1,1,1,""],set_config_file:[1,1,1,""]},"cufflinks.colors":{CufflinksError:[2,2,1,""],color_range:[2,1,1,""],color_table:[2,1,1,""],colorgen:[2,1,1,""],get_colorscale:[2,1,1,""],get_scales:[2,1,1,""],hex_to_hsv:[2,1,1,""],hex_to_rgb:[2,1,1,""],interp:[2,1,1,""],normalize:[2,1,1,""],reset_scales:[2,1,1,""],rgb_to_hex:[2,1,1,""],rgba_to_rgb:[2,1,1,""],scales:[2,1,1,""],to_rgba:[2,1,1,""]},"cufflinks.datagen":{bars:[3,1,1,""],box:[3,1,1,""],bubble3d:[3,1,1,""],bubble:[3,1,1,""],choropleth:[3,1,1,""],getName:[3,1,1,""],heatmap:[3,1,1,""],histogram:[3,1,1,""],lines:[3,1,1,""],ohlc:[3,1,1,""],ohlcv:[3,1,1,""],pie:[3,1,1,""],scatter3d:[3,1,1,""],scatter:[3,1,1,""],scattergeo:[3,1,1,""],sinwave:[3,1,1,""],surface:[3,1,1,""]},"cufflinks.date_tools":{dateToInt:[4,1,1,""],dateToString:[4,1,1,""],getDateFromToday:[4,1,1,""],getDatefromDate:[4,1,1,""],intToDate:[4,1,1,""],stringToDate:[4,1,1,""],stringToString:[4,1,1,""]},"cufflinks.exceptions":{CufflinksError:[5,2,1,""]},"cufflinks.extract":{to_df:[6,1,1,""]},"cufflinks.offline":{go_offline:[7,1,1,""],go_online:[7,1,1,""],is_offline:[7,1,1,""],upgrade:[7,1,1,""]},"cufflinks.pandastools":{bestfit:[8,1,1,""],normalize:[8,1,1,""],read_google:[8,1,1,""]},"cufflinks.plotlytools":{dict_to_iplot:[9,1,1,""],get_colors:[9,1,1,""],get_items_as_list:[9,1,1,""],iplot:[9,1,1,""],iplot_to_dict:[9,1,1,""]},"cufflinks.quant_figure":{QuantFig:[10,3,1,""],get_annotation_kwargs:[10,1,1,""],get_layout_kwargs:[10,1,1,""],get_shapes_kwargs:[10,1,1,""]},"cufflinks.quant_figure.QuantFig":{"delete":[10,4,1,""],add_adx:[10,4,1,""],add_annotations:[10,4,1,""],add_atr:[10,4,1,""],add_bollinger_bands:[10,4,1,""],add_cci:[10,4,1,""],add_dmi:[10,4,1,""],add_ema:[10,4,1,""],add_macd:[10,4,1,""],add_ptps:[10,4,1,""],add_resistance:[10,4,1,""],add_rsi:[10,4,1,""],add_shapes:[10,4,1,""],add_sma:[10,4,1,""],add_support:[10,4,1,""],add_trendline:[10,4,1,""],add_volume:[10,4,1,""],figure:[10,4,1,""],iplot:[10,4,1,""],update:[10,4,1,""]},"cufflinks.ta":{StudyError:[11,2,1,""],adx:[11,1,1,""],atr:[11,1,1,""],boll:[11,1,1,""],cci:[11,1,1,""],correl:[11,1,1,""],dmi:[11,1,1,""],ema:[11,1,1,""],get_column_name:[11,1,1,""],macd:[11,1,1,""],ptps:[11,1,1,""],rename:[11,1,1,""],rsi:[11,1,1,""],sma:[11,1,1,""],validate:[11,1,1,""]},"cufflinks.tools":{axis:[13,5,1,""],figures:[13,1,1,""],getAnnotations:[13,1,1,""],getLayout:[13,1,1,""],getTheme:[13,1,1,""],getThemes:[13,1,1,""],get_base_layout:[13,1,1,""],get_candle:[13,1,1,""],get_def:[13,1,1,""],get_dom:[13,1,1,""],get_error_bar:[13,1,1,""],get_len:[13,1,1,""],get_ohlc:[13,1,1,""],get_range_selector:[13,1,1,""],get_ref:[13,1,1,""],get_ref_axis:[13,1,1,""],get_shape:[13,1,1,""],get_subplots:[13,1,1,""],get_trendline:[13,1,1,""],get_which:[13,1,1,""],go_offline:[13,1,1,""],is_offline:[13,1,1,""],merge_figures:[13,1,1,""],scatter_matrix:[13,1,1,""],set_errors:[13,1,1,""],strip_figures:[13,1,1,""],subplots:[13,1,1,""],trace_dict:[13,5,1,""],updateColors:[13,1,1,""]},"cufflinks.utils":{check_kwargs:[14,1,1,""],deep_update:[14,1,1,""],dict_path:[14,1,1,""],dict_replace_keyword:[14,1,1,""],dict_update:[14,1,1,""],inverseDict:[14,1,1,""],is_dict:[14,1,1,""],is_list:[14,1,1,""],is_string:[14,1,1,""],kwargs_from_keyword:[14,1,1,""],load_pickle:[14,1,1,""],make_dict_from_list:[14,1,1,""],make_list:[14,1,1,""],make_string:[14,1,1,""],merge_dict:[14,1,1,""],pp:[14,1,1,""],read_google:[14,1,1,""],save_pickle:[14,1,1,""]},cufflinks:{auth:[1,0,0,"-"],colors:[2,0,0,"-"],datagen:[3,0,0,"-"],date_tools:[4,0,0,"-"],exceptions:[5,0,0,"-"],extract:[6,0,0,"-"],offline:[7,0,0,"-"],pandastools:[8,0,0,"-"],plotlytools:[9,0,0,"-"],quant_figure:[10,0,0,"-"],ta:[11,0,0,"-"],themes:[12,0,0,"-"],tools:[13,0,0,"-"],utils:[14,0,0,"-"],version:[15,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","exception","Python exception"],"3":["py","class","Python class"],"4":["py","method","Python method"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:exception","3":"py:class","4":"py:method","5":"py:attribute"},terms:{"2mtd":13,"boolean":[10,13],"class":10,"default":[1,10,13],"float":[2,10,13],"function":2,"int":[2,3,4,8,9,10,13],"long":[10,11],"public":[1,9],"return":[1,2,3,4,6,8,9,10,13,14],"short":10,"true":[1,2,3,9,10,11,13,14],"try":10,And:14,The:[8,10,13],Use:13,Will:1,_df:11,abc:[1,3],acceler:10,accent:2,accept:[2,9,10],add:10,add_adx:10,add_annot:10,add_atr:10,add_bollinger_band:10,add_cci:10,add_dmi:10,add_ema:10,add_macd:10,add_ptp:10,add_resist:10,add_rsi:10,add_shap:10,add_sma:10,add_support:10,add_trendlin:10,add_volum:10,added:[10,13],adjust:[8,13],adx:[10,11],after:9,all:[1,2,9,10,13,14],allow:10,along:[3,13],alpha:[2,13],alphabet:[1,3],also:2,amount:9,angl:[10,13],ani:10,annot:[10,13],anyon:[1,9],append:14,appli:[2,10],applic:13,applicab:13,appropri:1,area:10,arg:[1,10],argument:1,as_html:2,asimag:9,aslist:[9,13],asof:8,asplot:9,assign:[10,13],assum:13,asurl:9,atr:[10,11],auth:[0,17],author:0,automat:[10,13],autorang:13,avaialb:13,avail:[1,2,10,13],averag:10,axes:13,axi:[3,13],background:13,band:10,bar:[3,10,13],bargap:13,bargroupgap:13,barmod:13,base:[1,2,5,10,11,13],base_layout:13,been:9,befor:9,bestfit:8,between:13,bgcolor:13,bgocolor:13,bin:13,bind:0,blank:13,block:2,blue:[2,13],boll:[10,11],boll_kwarg:11,boll_std:[10,11],bolling:10,bool:[1,2,3,9,10,13,14],bottom:[1,13],bound:10,box:3,browser:9,bubbl:3,bubble3d:3,call:8,can:[1,9,10,13],candlestick:[3,10],categori:3,cci:11,cci_low:10,cci_upp:10,cell:13,chang:10,channel:10,chart:[1,9,10,13],check:1,check_file_permiss:1,check_kwarg:14,choos:13,choropleth:3,circl:13,clean_origin:14,close:[3,10,11,13],cname:2,code:2,col:13,color:[0,9,10,13,17],color_rang:2,color_t:2,colorchang:10,colorgen:2,colorscal:[1,9],colour:2,colspan:13,column:[3,10,11,13],combin:2,commod:10,common:13,compar:10,complet:[10,13],concaten:14,confg:1,config:1,connect:[7,10,13],contain:[1,8,10,13,14],content:17,converg:10,convert:[2,4,10],coordin:13,correct:10,correl:11,correl_kwarg:11,correspond:[10,13],creat:[9,10],cufflinkserror:[2,5],cyan:13,d_ref:14,d_updat:14,dai:4,dash:13,dashdot:13,data:[1,6,9,10,13],datafram:[3,6,8,10,13],datagen:[0,1,10,17],datagen_mod:1,date0:[10,13],date1:[10,13],date:[4,8,10],date_tool:[0,17],dateindex:3,datetim:[3,4],datetoint:4,datetostr:4,deep:14,deep_upd:14,defin:[10,13],definit:13,delet:[10,14],delta:4,demand:10,depend:10,detail:11,deviat:10,diagon:13,dict:[1,2,9,10,13,14],dict_path:14,dict_replace_keyword:14,dict_to_iplot:9,dict_upd:14,dictionai:14,dictionari:[1,2,10,13,14],diff:11,dimens:[1,9,13],direct:10,directori:9,displai:[1,2,9,10,13],display_imag:9,diverg:10,dmi:[10,11],domain:13,dot:13,down_color:[10,13],download:9,draw:[10,13],drawn:10,e1e5:2,each:[2,3,10,13,14],edg:13,elsewher:1,ema:[10,11],end:10,ensur:1,ensure_local_fil:1,enumer:3,equal:13,error:1,etc:13,even:9,ex1:13,ex2:13,exactli:13,exampl:[1,2,4,8,10,13,14],except:[0,2,11,17],exchang:3,exist:1,explicit:13,exponenti:10,extra:[10,13],extract:[0,17],f03:2,factor:[8,10],factori:10,fail:1,fals:[2,3,7,9,11,13,14],fast:10,fast_period:[10,11],ff9933:2,fig:13,figur:[2,6,9,10,13],file:[1,9],filenam:[1,9,14],filesystem:1,fill:[1,10,13],fillcolor:[10,13],flag:13,folder:9,follow:10,font:13,font_siz:13,fontcolor:[10,13],fontsiz:[10,13],forceupd:14,form:[10,13,14],format:[3,4,8,10,14],formula:8,found:14,fraction:13,from:[1,2,4,6,10,13,14],from_d:14,from_kwarg:14,from_strfmt:[4,10],fromstart:10,fulli:10,gap:13,gener:[1,2,4,9,13],genera:2,get_annotation_kwarg:10,get_base_layout:13,get_candl:13,get_color:9,get_colorscal:2,get_column_nam:11,get_config_fil:1,get_def:13,get_dom:13,get_error_bar:13,get_items_as_list:9,get_layout_kwarg:10,get_len:13,get_ohlc:13,get_path:1,get_pickle_path:1,get_range_selector:13,get_ref:13,get_ref_axi:13,get_scal:2,get_shap:[10,13],get_shapes_kwarg:10,get_subplot:13,get_trendlin:13,get_which:13,getannot:13,getdatefromd:4,getdatefromtodai:4,getlayout:13,getnam:3,getthem:[1,13],gird:13,given:[2,10,13,14],global_kwarg:14,go_offlin:[7,13],go_onlin:7,googl:[8,14],gradient:2,grei:13,grid:13,gridcolor:13,group:[10,13],had:10,hand:13,has:[9,13],have:[10,13],heatmap:3,height:[1,9,13],help:[10,13],hex:[2,13],hex_to_hsv:2,hex_to_rgb:2,high:[3,10,11],histogram:[3,13],hline:[10,13],horizont:[10,13],horizontal_spac:13,how:[10,11],hspan:[10,13],hsv:2,html:[2,9],http:[10,13],imag:9,inc:3,includ:[8,11],increas:9,increment:3,index:[1,3,10,13,14,16],indic:[10,13],inform:[10,13],iniit:10,initi:[10,11],inlin:2,inner:13,innner:10,input:4,inset:13,instead:13,intdat:4,integ:9,interp:2,inttod:4,invers:2,inversedict:14,iplot:[9,10,13],iplot_to_dict:9,ipython:[2,9],is3d:13,is_3d:13,is_dict:14,is_list:14,is_offlin:[7,13],is_str:14,item:[2,3,9,10,13,14],items_nam:9,jorgesanto:0,json_dict:1,jupyt:9,kei:[9,10,13,14],key_k:14,keyword:[1,14],keyword_valu:14,kind:[10,13],kudo:0,kwarg:[1,8,9,10,11,13,14],kwargs_from_keyword:14,label:[3,10],layout:[10,13],layout_upd:13,left:[1,13],legend:[9,10],legendgroup:10,level1:14,level2:14,level3:14,level:[1,9,10],line:[2,3,8,9,10,13],link:[1,9],list:[2,3,6,9,10,13],load:14,load_json_dict:1,load_pickl:14,local:[1,9],local_kwarg:14,look:14,low:[3,10,11],lower:10,lower_bound:13,macd:[10,11],macd_kwarg:11,make:13,make_dict_from_list:14,make_list:14,make_str:14,make_subplot:13,margin:[1,13],marker:13,match:10,matrix:13,max:2,maximum:2,merg:13,merge_dict:14,merge_figur:13,mid:10,minimum:2,minu:2,mode:[1,3,9,10,13],modifi:13,modul:[16,17],month:13,more:[10,13],move:[10,13],movement:10,multipl:13,multipli:8,must:13,n_categori:3,n_label:3,n_trace:3,n_x:3,n_y:3,name:[1,2,3,9,10,11],neg:10,none:[1,2,3,7,8,9,10,11,13,14],normal:[2,8],note:[2,13],notebook:[2,9],number:[2,3,4,10,13],obj:14,object:[10,13,14],offlin:[0,1,9,13,17],offline_link_text:1,offline_show_link:1,offline_url:1,ohlc:[3,10],ohlcv:3,omit:13,one:[10,13],onli:[1,2,9,13],onlin:9,onto:13,opac:13,open:[3,9,10],orgin:14,origin:[13,14],otherwis:13,out:[1,10],outer:13,output:11,over:10,overbought:10,overlai:13,oversold:10,packag:17,pad:13,page:16,pair:[1,13,14],panda:[0,13],pandastool:[0,17],paper:13,parabol:10,paramet:[4,8,10,13,14],pass:[2,10,13],pastel1:2,path:[9,14],pct_chg:11,pearl:13,peopl:[1,9],per:9,period:[10,11],period_dict:11,permiss:[1,9],persist:10,pie:3,pink:2,place:10,plot:[1,3,9,10,13],plotli:[0,1,2,6,9,10,13],plotly_figur:6,plotlytool:[0,17],png:9,point:[3,10],posit:[10,13],preced:2,prefix:3,prestr:14,prettyprint:14,previou:10,privat:[1,9],product:0,properti:13,provid:2,ptp:[10,11],python:[10,13],quant_figur:[0,17],quantfig:10,quantfigur:10,random:[1,3],rang:[2,3,10,13],rangeselector:13,rangeslid:13,read:[8,14],read_googl:[8,14],rect:13,rectangl:[10,13],red:[2,13],refer:[10,13],regular:9,rel:10,renam:11,render:[1,9],repres:[2,4],represent:[2,8],requir:[3,9],reset_scal:2,resist:10,resolut:9,result:[8,14],rgb:2,rgb_to_hex:2,rgba:[2,10,13],rgba_to_rgb:2,right:[1,10,13],row:13,rowspan:13,rsi:[10,11],rsi_low:10,rsi_upp:10,run:9,salmon:2,same:[10,13],sar:10,save:9,save_json_dict:1,save_pickl:14,scale:[1,2,9],scatter3d:3,scatter:[3,13],scatter_matrix:13,scattergeo:3,scene:13,search:16,secret:[1,9],section:10,see:[1,9,10,13],seen:13,selector:13,self:[8,14],seri:[8,10,13],serial:14,server:9,set:[1,9,13],set_config_fil:1,set_error:13,setup:1,shape:[10,13],share:[1,9,13],shared_xax:13,shared_yax:13,sheet:[8,14],should:10,show:[1,13],showband:10,shown:9,side:13,signal:10,signal_period:[10,11],simpl:10,sine:3,singl:[2,10,13],sinwav:3,size:[3,10,13],slider:13,slow:10,slow_period:[10,11],sma:[10,11],solar:13,solid:13,someth:1,sort:2,sort_valu:2,sourc:[1,2,3,4,5,6,7,8,9,10,11,13,14],space:13,span:13,spec:13,specif:[10,13],specifi:1,stack:13,standard:10,start:[10,13],start_cel:13,starttoen:10,starttoend:10,state:[10,13],step:13,stock:[1,3],str:[2,3,10,11,13],strength:10,strfmt:4,string:[1,2,3,4,8,9,10,11,13,14],stringdat:4,stringtod:4,stringtostr:4,strip:13,strip_figur:13,studi:[10,11],studyerror:11,style:[9,13],submodul:17,subplot:13,subplot_titl:13,support:10,surfac:3,system:13,tabl:2,team:0,technic:10,text:[1,10,13],textangl:[10,13],textt:[10,13],them:13,theme:[0,1,2,13,17],thi:[1,2,9,10,13],thick:13,those:[2,10],time:13,timeseri:10,titl:13,to_d:14,to_df:6,to_end:13,to_kwarg:14,to_rgba:2,to_strfmt:[4,10],todai:4,toend:10,tool:[0,1,10,17],top:[1,13],trace:[3,13],trace_dict:13,translat:13,trendlin:10,tupl:[1,9,13],type:13,union:13,up_color:[10,13],updat:[10,13,14],updatecolor:13,upgrad:7,upper:10,upper_bound:13,url:[7,8,9,14],use:[2,13],used:[1,2,9,10,13],util:[0,17],val:14,valid:[1,9,10,11,13],valu:[1,2,8,9,10,11,13,14],value_k:14,values_minu:13,version:[0,17],vertic:[10,13],vertical_spac:13,view:13,visibl:13,vline:[10,13],volum:[3,10],vspan:[10,13],wai:1,wave:3,week:13,when:[2,9,13],where:[13,14],which:[1,4,6,8,10,13,14],white:13,width:[1,9,13],wildcard:10,work:[2,9],wrapper:13,x_point:13,xaxi:13,xaxis1:13,xrang:13,xref:13,xtitl:13,yellow:2,you:[1,9,10],yrang:13,yref:13,ytd:13,ytitl:13,zero:13,zerolinecolor:13,zrang:13,ztitl:13},titles:["cufflinks package","cufflinks.auth module","cufflinks.colors module","cufflinks.datagen module","cufflinks.date_tools module","cufflinks.exceptions module","cufflinks.extract module","cufflinks.offline module","cufflinks.pandastools module","cufflinks.plotlytools module","cufflinks.quant_figure module","cufflinks.ta module","cufflinks.themes module","cufflinks.tools module","cufflinks.utils module","cufflinks.version module","Welcome to Cufflinks\u2019s documentation!","cufflinks"],titleterms:{auth:1,color:2,content:0,cufflink:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],datagen:3,date_tool:4,document:16,except:5,extract:6,indic:16,modul:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],offlin:7,packag:0,pandastool:8,plotlytool:9,quant_figur:10,submodul:0,tabl:16,theme:12,tool:13,util:14,version:15,welcom:16}}) \ No newline at end of file diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..df94e14 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,36 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=. +set SPHINXPROJ=Cufflinks + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..96770e1 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,177 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/stable/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('../..')) + + +# -- Project information ----------------------------------------------------- + +project = 'Cufflinks' +copyright = '2018, Jorge Santos' +author = 'Jorge Santos' + +# The short X.Y version +version = '' +# The full version, including alpha/beta/rc tags +release = '' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Cufflinksdoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'Cufflinks.tex', 'Cufflinks Documentation', + 'Jorge Santos', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'cufflinks', 'Cufflinks Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'Cufflinks', 'Cufflinks Documentation', + author, 'Cufflinks', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Extension configuration ------------------------------------------------- + +# -- Options for intersphinx extension --------------------------------------- + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} + +# -- Options for todo extension ---------------------------------------------- + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True diff --git a/docs/source/cufflinks.auth.rst b/docs/source/cufflinks.auth.rst new file mode 100644 index 0000000..5eb3c50 --- /dev/null +++ b/docs/source/cufflinks.auth.rst @@ -0,0 +1,7 @@ +cufflinks.auth module +===================== + +.. automodule:: cufflinks.auth + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.colors.rst b/docs/source/cufflinks.colors.rst new file mode 100644 index 0000000..20e141d --- /dev/null +++ b/docs/source/cufflinks.colors.rst @@ -0,0 +1,7 @@ +cufflinks.colors module +======================= + +.. automodule:: cufflinks.colors + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.datagen.rst b/docs/source/cufflinks.datagen.rst new file mode 100644 index 0000000..7d02e6b --- /dev/null +++ b/docs/source/cufflinks.datagen.rst @@ -0,0 +1,7 @@ +cufflinks.datagen module +======================== + +.. automodule:: cufflinks.datagen + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.date_tools.rst b/docs/source/cufflinks.date_tools.rst new file mode 100644 index 0000000..38f4bfa --- /dev/null +++ b/docs/source/cufflinks.date_tools.rst @@ -0,0 +1,7 @@ +cufflinks.date\_tools module +============================ + +.. automodule:: cufflinks.date_tools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.exceptions.rst b/docs/source/cufflinks.exceptions.rst new file mode 100644 index 0000000..10842a2 --- /dev/null +++ b/docs/source/cufflinks.exceptions.rst @@ -0,0 +1,7 @@ +cufflinks.exceptions module +=========================== + +.. automodule:: cufflinks.exceptions + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.extract.rst b/docs/source/cufflinks.extract.rst new file mode 100644 index 0000000..13a299e --- /dev/null +++ b/docs/source/cufflinks.extract.rst @@ -0,0 +1,7 @@ +cufflinks.extract module +======================== + +.. automodule:: cufflinks.extract + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.offline.rst b/docs/source/cufflinks.offline.rst new file mode 100644 index 0000000..d45aeef --- /dev/null +++ b/docs/source/cufflinks.offline.rst @@ -0,0 +1,7 @@ +cufflinks.offline module +======================== + +.. automodule:: cufflinks.offline + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.pandastools.rst b/docs/source/cufflinks.pandastools.rst new file mode 100644 index 0000000..0e33202 --- /dev/null +++ b/docs/source/cufflinks.pandastools.rst @@ -0,0 +1,7 @@ +cufflinks.pandastools module +============================ + +.. automodule:: cufflinks.pandastools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.plotlytools.rst b/docs/source/cufflinks.plotlytools.rst new file mode 100644 index 0000000..9463081 --- /dev/null +++ b/docs/source/cufflinks.plotlytools.rst @@ -0,0 +1,7 @@ +cufflinks.plotlytools module +============================ + +.. automodule:: cufflinks.plotlytools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.quant_figure.rst b/docs/source/cufflinks.quant_figure.rst new file mode 100644 index 0000000..6962dde --- /dev/null +++ b/docs/source/cufflinks.quant_figure.rst @@ -0,0 +1,7 @@ +cufflinks.quant\_figure module +============================== + +.. automodule:: cufflinks.quant_figure + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.rst b/docs/source/cufflinks.rst new file mode 100644 index 0000000..040a0ac --- /dev/null +++ b/docs/source/cufflinks.rst @@ -0,0 +1,31 @@ +cufflinks package +================= + +Submodules +---------- + +.. toctree:: + + cufflinks.auth + cufflinks.colors + cufflinks.datagen + cufflinks.date_tools + cufflinks.exceptions + cufflinks.extract + cufflinks.offline + cufflinks.pandastools + cufflinks.plotlytools + cufflinks.quant_figure + cufflinks.ta + cufflinks.themes + cufflinks.tools + cufflinks.utils + cufflinks.version + +Module contents +--------------- + +.. automodule:: cufflinks + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.ta.rst b/docs/source/cufflinks.ta.rst new file mode 100644 index 0000000..773d048 --- /dev/null +++ b/docs/source/cufflinks.ta.rst @@ -0,0 +1,7 @@ +cufflinks.ta module +=================== + +.. automodule:: cufflinks.ta + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.themes.rst b/docs/source/cufflinks.themes.rst new file mode 100644 index 0000000..2252dec --- /dev/null +++ b/docs/source/cufflinks.themes.rst @@ -0,0 +1,7 @@ +cufflinks.themes module +======================= + +.. automodule:: cufflinks.themes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.tools.rst b/docs/source/cufflinks.tools.rst new file mode 100644 index 0000000..0bfa8e6 --- /dev/null +++ b/docs/source/cufflinks.tools.rst @@ -0,0 +1,7 @@ +cufflinks.tools module +====================== + +.. automodule:: cufflinks.tools + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.utils.rst b/docs/source/cufflinks.utils.rst new file mode 100644 index 0000000..85343a8 --- /dev/null +++ b/docs/source/cufflinks.utils.rst @@ -0,0 +1,7 @@ +cufflinks.utils module +====================== + +.. automodule:: cufflinks.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cufflinks.version.rst b/docs/source/cufflinks.version.rst new file mode 100644 index 0000000..6a20288 --- /dev/null +++ b/docs/source/cufflinks.version.rst @@ -0,0 +1,7 @@ +cufflinks.version module +======================== + +.. automodule:: cufflinks.version + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..aeb205d --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,20 @@ +.. Cufflinks documentation master file, created by + sphinx-quickstart on Wed Apr 11 09:08:01 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Cufflinks's documentation! +===================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/source/modules.rst b/docs/source/modules.rst new file mode 100644 index 0000000..4335806 --- /dev/null +++ b/docs/source/modules.rst @@ -0,0 +1,7 @@ +cufflinks +========= + +.. toctree:: + :maxdepth: 4 + + cufflinks