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 ))
+
+
+
+
+
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 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 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
All modules for which code is available
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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() {
+ $('').
+ attr('href', '#' + this.id).
+ attr('title', _('Permalink to this headline')).
+ appendTo(this);
+ });
+ $('dt[id]').each(function() {
+ $('').
+ 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);
+ $('' + _('Hide Search Matches') + '
')
+ .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 = /
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+