From 54c7e0bcf9e3386a7f0f2ec9f08919fad3b3a23d Mon Sep 17 00:00:00 2001 From: Steve Pulec Date: Mon, 13 Mar 2017 23:07:18 -0400 Subject: [PATCH] Update docs to newer sphinx. --- docs/_build/doctrees/ec2_tut.doctree | Bin 7904 -> 8282 bytes docs/_build/doctrees/environment.pickle | Bin 7968 -> 8914 bytes docs/_build/doctrees/getting_started.doctree | Bin 10820 -> 11613 bytes docs/_build/doctrees/index.doctree | Bin 16675 -> 18990 bytes docs/_build/html/.buildinfo | 2 +- docs/_build/html/_sources/ec2_tut.rst.txt | 74 + .../html/_sources/getting_started.rst.txt | 112 + docs/_build/html/_sources/index.rst.txt | 91 + docs/_build/html/_static/alabaster.css | 176 +- docs/_build/html/_static/basic.css | 79 +- docs/_build/html/_static/comment-bright.png | Bin 3500 -> 756 bytes docs/_build/html/_static/comment-close.png | Bin 3578 -> 829 bytes docs/_build/html/_static/comment.png | Bin 3445 -> 641 bytes docs/_build/html/_static/custom.css | 1 + docs/_build/html/_static/doctools.js | 28 +- docs/_build/html/_static/down-pressed.png | Bin 347 -> 222 bytes docs/_build/html/_static/down.png | Bin 347 -> 202 bytes docs/_build/html/_static/file.png | Bin 358 -> 286 bytes docs/_build/html/_static/jquery-3.1.0.js | 10074 ++++++++++++++++ docs/_build/html/_static/jquery.js | 8 +- docs/_build/html/_static/minus.png | Bin 173 -> 90 bytes docs/_build/html/_static/plus.png | Bin 173 -> 90 bytes docs/_build/html/_static/pygments.css | 6 + docs/_build/html/_static/searchtools.js | 166 +- docs/_build/html/_static/up-pressed.png | Bin 345 -> 214 bytes docs/_build/html/_static/up.png | Bin 345 -> 203 bytes docs/_build/html/_static/websupport.js | 4 +- docs/_build/html/ec2_tut.html | 38 +- docs/_build/html/genindex.html | 26 +- docs/_build/html/getting_started.html | 74 +- docs/_build/html/index.html | 40 +- docs/_build/html/objects.inv | 7 +- docs/_build/html/search.html | 19 +- docs/_build/html/searchindex.js | 2 +- 34 files changed, 10849 insertions(+), 178 deletions(-) create mode 100644 docs/_build/html/_sources/ec2_tut.rst.txt create mode 100644 docs/_build/html/_sources/getting_started.rst.txt create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_static/custom.css create mode 100644 docs/_build/html/_static/jquery-3.1.0.js diff --git a/docs/_build/doctrees/ec2_tut.doctree b/docs/_build/doctrees/ec2_tut.doctree index 2d6d78f26bdfa1142833303de5b05379aae3bafa..719a1ed0b0b296abd8f5a0552f3c7da449e67020 100644 GIT binary patch delta 3991 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 Ag8%>k diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 2f5d88b27e3d1167003b58b79671819b79c26345..a1145484936f5a699ba82d8b41e5a96f5f92bd35 100644 GIT binary patch literal 8914 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 E0G!1}VE_OC literal 7968 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 b{kk6HS2j>WO(`zg0IrNSGBPlfCg}kHV{gdx literal 10820 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 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 3dfe8f0888ddf510511c3b7e49f7d9a787efb1d1..41878354ca955f987b4b6d4ab3e04c8afadd446d 100644 GIT binary patch literal 18990 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 YgKh`dyqzHPbYhEkfoO%q;?g8N0Kt_RoB#j- literal 16675 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 O^l-vj9v~Y_lk@>> import boto.ec2, moto + >>> mock_ec2 = moto.mock_ec2() + >>> mock_ec2.start() + >>> conn = boto.ec2.connect_to_region("eu-west-1") + +Launching instances +------------------- + +After mock is started, the behavior is the same than previously:: + + >>> reservation = conn.run_instances('ami-f00ba4') + >>> reservation.instances[0] + Instance:i-91dd2f32 + +Moto set static or generate random object's attributes:: + + >>> vars(reservation.instances[0]) + {'_in_monitoring_element': False, + '_placement': None, + '_previous_state': None, + '_state': pending(0), + 'ami_launch_index': u'0', + 'architecture': u'x86_64', + 'block_device_mapping': None, + 'client_token': '', + 'connection': EC2Connection:ec2.eu-west-1.amazonaws.com, + 'dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com', + 'ebs_optimized': False, + 'eventsSet': None, + 'group_name': None, + 'groups': [], + 'hypervisor': u'xen', + 'id': u'i-91dd2f32', + 'image_id': u'f00ba4', + 'instance_profile': None, + 'instance_type': u'm1.small', + 'interfaces': [NetworkInterface:eni-ed65f870], + 'ip_address': u'54.214.135.84', + 'item': u'\n ', + 'kernel': u'None', + 'key_name': u'None', + 'launch_time': u'2015-07-27T05:59:57Z', + 'monitored': True, + 'monitoring': u'\n ', + 'monitoring_state': u'enabled', + 'persistent': False, + 'platform': None, + 'private_dns_name': u'ip-10.136.187.180.ec2.internal', + 'private_ip_address': u'10.136.187.180', + 'product_codes': [], + 'public_dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com', + 'ramdisk': None, + 'reason': '', + 'region': RegionInfo:eu-west-1, + 'requester_id': None, + 'root_device_name': None, + 'root_device_type': None, + 'sourceDestCheck': u'true', + 'spot_instance_request_id': None, + 'state_reason': None, + 'subnet_id': None, + 'tags': {}, + 'virtualization_type': u'paravirtual', + 'vpc_id': None} diff --git a/docs/_build/html/_sources/getting_started.rst.txt b/docs/_build/html/_sources/getting_started.rst.txt new file mode 100644 index 000000000..e0a4fb10e --- /dev/null +++ b/docs/_build/html/_sources/getting_started.rst.txt @@ -0,0 +1,112 @@ +========================= +Getting Started with Moto +========================= + +Installing Moto +--------------- + +You can use ``pip`` to install the latest released version of ``moto``:: + + pip install moto + +If you want to install ``moto`` from source:: + + git clone git://github.com/spulec/moto.git + cd moto + python setup.py install + +Moto usage +---------- + +For example we have the following code we want to test: + +.. sourcecode:: python + + import boto + from boto.s3.key import Key + + class MyModel(object): + def __init__(self, name, value): + self.name = name + self.value = value + + def save(self): + conn = boto.connect_s3() + bucket = conn.get_bucket('mybucket') + k = Key(bucket) + k.key = self.name + k.set_contents_from_string(self.value) + +There are several method to do this, just keep in mind Moto creates a full blank environment. + +Decorator +~~~~~~~~~ + +With a decorator wrapping all the calls to S3 are automatically mocked out. + +.. sourcecode:: python + + import boto + from moto import mock_s3 + from mymodule import MyModel + + @mock_s3 + def test_my_model_save(): + conn = boto.connect_s3() + # We need to create the bucket since this is all in Moto's 'virtual' AWS account + conn.create_bucket('mybucket') + + model_instance = MyModel('steve', 'is awesome') + model_instance.save() + + assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome' + +Context manager +~~~~~~~~~~~~~~~ + +Same as decorator, every call inside ``with`` statement are mocked out. + +.. sourcecode:: python + + def test_my_model_save(): + with mock_s3(): + conn = boto.connect_s3() + conn.create_bucket('mybucket') + + model_instance = MyModel('steve', 'is awesome') + model_instance.save() + + assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome' + +Raw +~~~ + +You can also start and stop manually the mocking. + +.. sourcecode:: python + + def test_my_model_save(): + mock = mock_s3() + mock.start() + + conn = boto.connect_s3() + conn.create_bucket('mybucket') + + model_instance = MyModel('steve', 'is awesome') + model_instance.save() + + assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome' + + mock.stop() + +Stand-alone server mode +~~~~~~~~~~~~~~~~~~~~~~~ + +Moto comes with a stand-alone server allowing you to mock out an AWS HTTP endpoint. It is very useful to test even if you don't use Python. + +.. sourcecode:: bash + + $ moto_server ec2 -p3000 + * Running on http://127.0.0.1:3000/ + +This method isn't encouraged if you're using ``boto``, best is to use decorator method. diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 000000000..189ce524a --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,91 @@ +.. _index: + +============================= +Moto: A Mock library for boto +============================= + +A library that allows you to easily mock out tests based on +_`AWS infrastructure`. + +.. _AWS infrastructure: http://aws.amazon.com/ + +Getting Started +--------------- + +If you've never used ``moto`` before, you should read the +:doc:`Getting Started with Moto ` guide to get familiar +with ``moto`` & its usage. + +Currently implemented Services +------------------------------ + +* **Compute** + + * :doc:`Elastic Compute Cloud ` + * AMI + * EBS + * Instances + * Security groups + * Tags + * Auto Scaling + +* **Storage and content delivery** + + * S3 + * Glacier + +* **Database** + + * RDS + * DynamoDB + * Redshift + +* **Networking** + + * Route53 + +* **Administration and security** + + * Identity & access management + * CloudWatch + +* **Deployment and management** + + * CloudFormation + +* **Analytics** + + * Kinesis + * EMR + +* **Application service** + + * SQS + * SES + +* **Mobile services** + + * SNS + +Additional Resources +-------------------- + +* `Moto Source Repository`_ +* `Moto Issue Tracker`_ + +.. _Moto Issue Tracker: https://github.com/spulec/moto/issues +.. _Moto Source Repository: https://github.com/spulec/moto + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +.. toctree:: + :maxdepth: 2 + :hidden: + :glob: + + getting_started diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css index 07a9e2a42..be65b1374 100644 --- a/docs/_build/html/_static/alabaster.css +++ b/docs/_build/html/_static/alabaster.css @@ -15,6 +15,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ @@ -22,12 +57,13 @@ body { font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; font-size: 17px; - background-color: white; + background-color: #fff; color: #000; margin: 0; padding: 0; } + div.document { width: 940px; margin: 30px auto 0 auto; @@ -44,6 +80,8 @@ div.bodywrapper { div.sphinxsidebar { width: 220px; + font-size: 14px; + line-height: 1.5; } hr { @@ -51,11 +89,15 @@ hr { } div.body { - background-color: #ffffff; + 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; @@ -68,6 +110,11 @@ div.footer a { color: #888; } +p.caption { + font-family: inherit; + font-size: inherit; +} + div.relations { display: none; @@ -84,11 +131,6 @@ div.sphinxsidebar a:hover { border-bottom: 1px solid #999; } -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - div.sphinxsidebarwrapper { padding: 18px 10px; } @@ -168,8 +210,8 @@ div.sphinxsidebar input { div.sphinxsidebar hr { border: none; height: 1px; - color: #999; - background: #999; + color: #AAA; + background: #AAA; text-align: left; margin-left: 0; @@ -225,19 +267,15 @@ div.body p, div.body dd, div.body li { div.admonition { margin: 20px 0px; padding: 10px 30px; - background-color: #FCC; - border: 1px solid #FAA; + background-color: #EEE; + border: 1px solid #CCC; } -div.admonition tt.xref, div.admonition a tt { +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; border-bottom: 1px solid #fafafa; } -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - div.admonition p.admonition-title { font-family: 'Garamond', 'Georgia', serif; font-weight: normal; @@ -252,25 +290,71 @@ div.admonition p.last { } div.highlight { - background-color: white; + 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; + background-color: #EEE; } p.admonition-title { @@ -305,16 +389,16 @@ tt.descname, code.descname { } img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; + -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; + -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 { @@ -350,8 +434,22 @@ 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: 0px; + width: .1px; padding: 0.3em 0 0.3em 0.5em; } @@ -374,6 +472,7 @@ blockquote { } ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ margin: 10px 0 10px 30px; padding: 0; } @@ -385,16 +484,15 @@ pre { line-height: 1.3em; } +div.viewcode-block:target { + background: #ffd; +} + dl pre, blockquote pre, li pre { margin-left: 0; padding-left: 30px; } -dl dl pre { - margin-left: -90px; - padding-left: 90px; -} - tt, code { background-color: #ecf0f3; color: #222; @@ -403,7 +501,7 @@ tt, code { tt.xref, code.xref, a tt { background-color: #FBFBFB; - border-bottom: 1px solid white; + border-bottom: 1px solid #fff; } a.reference { @@ -411,6 +509,11 @@ a.reference { 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; } @@ -460,6 +563,11 @@ a:hover tt, a:hover code { margin-left: 0; } + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + .document { width: auto; } @@ -495,7 +603,7 @@ a:hover tt, a:hover code { div.documentwrapper { float: none; - background: white; + background: #fff; } div.sphinxsidebar { @@ -510,7 +618,7 @@ a:hover tt, a:hover code { div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, div.sphinxsidebar h3 a { - color: white; + color: #fff; } div.sphinxsidebar a { diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css index 9fa77d886..7ed0e58ed 100644 --- a/docs/_build/html/_static/basic.css +++ b/docs/_build/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -52,6 +52,8 @@ div.sphinxsidebar { width: 230px; margin-left: -100%; font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; } div.sphinxsidebar ul { @@ -83,10 +85,6 @@ div.sphinxsidebar #searchbox input[type="text"] { width: 170px; } -div.sphinxsidebar #searchbox input[type="submit"] { - width: 30px; -} - img { border: 0; max-width: 100%; @@ -124,6 +122,8 @@ ul.keywordmatches li.goodmatch a { table.contentstable { width: 90%; + margin-left: auto; + margin-right: auto; } table.contentstable p.biglink { @@ -151,9 +151,14 @@ table.indextable td { vertical-align: top; } -table.indextable dl, table.indextable dd { +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 { @@ -185,8 +190,22 @@ div.genindex-jumpbox { padding: 0.4em; } +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + /* -- general body styles --------------------------------------------------- */ +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; } @@ -212,10 +231,6 @@ div.body td { text-align: left; } -.field-list ul { - padding-left: 1em; -} - .first { margin-top: 0 !important; } @@ -332,10 +347,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.field-list td, table.field-list th { - border: 0 !important; -} - table.footnote td, table.footnote th { border: 0 !important; } @@ -372,6 +383,20 @@ div.figure p.caption span.caption-number { 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; +} /* -- other body styles ----------------------------------------------------- */ @@ -422,15 +447,6 @@ dl.glossary dt { font-size: 1.1em; } -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - .optional { font-size: 1.3em; } @@ -489,6 +505,13 @@ pre { 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; @@ -580,6 +603,16 @@ 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 { diff --git a/docs/_build/html/_static/comment-bright.png b/docs/_build/html/_static/comment-bright.png index 551517b8c83b76f734ff791f847829a760ad1903..15e27edb12ac25701ac0ac21b97b52bb4e45415e 100644 GIT binary patch delta 733 zcmZ1@{e^Xcay`>-PZ!6K3dYvS%m<#>2(;awx#aHO+}qo7Z*MCE5g_Jb`CGovX4(Gk zoGZxp*=6BQixZE(l-%syULRBaS^E9en_q5Ao0|RopS84izFlD6U19M$<6lB^x^@?z zahX+p``)ko-D`uj`EKsseWSs4()QzdKQ~{_`?>HeU-%*W`djZJN^|>uvI=~5oO;yb zv*%XT0-La+!;e|3-e^aH0m%l_;7N>^T1?nB=yd2bI%{B&u{-jP?s~&}DqJCK$rPdcf1ljhF^6B}{Pqv$`t`q@Sj%nP{i$Qx+VgWvHeczz zT@inN`zEtoPA=V;UE*p&1`dlvAN3TUuRrdnJwbRTBP;vb2+3UmuzOcuD@Ow>RReJGX8XkJ2=;;3)ojYxDd2-)>L8|KWGbDGOPC(a7Gzdm@WJ zKgcrf4LfqsR(s4|FM0Vr?TpILCn)QYg=}P36re1_LfToFfcGMc)I$ztaD0e0syd^chdj> literal 3500 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 TpAyW#z`)??>gTe~DWM4fxevPs diff --git a/docs/_build/html/_static/comment.png b/docs/_build/html/_static/comment.png index 92feb52b8824c6b0f59b658b1196c61de9162a95..dfbc0cbd512bdeefcb1984c99d8e577efb77f006 100644 GIT binary patch delta 617 zcmew=)yO(Qxt__x)5S5Qg0Xc1bB}Di$g$`Bx57ehhuzuG7kGTD=xVnR^HsUKW8c5A z=|Ah+eCzFA+vj#FuP4{+{8PssW2ctqyXotPhu;5fw8Pm%IDf4%Z`$@qbp6_@ldHMs zPdh1m-oB^&(W`F7)vVj*S;SxT7g)=6^TWO6CezhK+PN0_o(>kPf2BTu<63F`OS3<| zpJQ8eZBN4dLt!Tj6j$!BFHu*KysNxHz3EAS97DpAshMnvRE<1%citxH3&FWOx*hAA?teH2MMPh3vK!> z+pDq0$)tIfQO&Gt*$x|~%0HNUz;=DWGROM;GjE=lm1@0!%j4|YO`*(9ZyzM=clx?` zXZz7h4jM0+r+7XPK6rkXaL`@el@Hx^D6L>fe5;{%PN619tNih~d%{sp`bkmWIqTEf z&$IY0lMmGHSRt9B*md@nqJgm4YVoPBO!efycOS8IEo9bqU@%^Avvbu-*|6Zl-5sw| z7%dh*njt54#(Mq*CKfgC0*?#>hK4k2h6eeKr$jOyNAA>#tr2;D&?h-BRq?L){#+zZ}zCxZXpCY3+~o6>l$oEKbecDYdaF+bGY*|0@fxW!0V~mhBf8 eKg^M+XXL+9qP0`n_$>ni1B0ilpUXO@geCxIwjL?~ literal 3445 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 a`M?W#-Oy@Uh-ExrK+T_+x{>*lf s$0}3vW*ASm}54I+^k1$CmXeEw{uN7#J8lUHx3vIVCg!08gDwr2qf` literal 347 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QU4nJ@LmUDMkkHg6$}gv>?NMQuI#ti8O4=2j=l}8W?*3O3-AeXWnf@9NYh7ML)4+aK? zL{AsT5DCfNgOOrQ1|lv8y=P2RJhT4${=noX8b23z^|-i276(r^_+_SkD%xJ?Oxc^u zt7m^ZoMtCAQz_W_N$JO$oo7XEJlpZb=;W2pn>8YSX!~v6{2*-to6u{oRjWKKj|b=f Y&SDeWqqRhkfq{X+)78&qol`;+06>VDc>n+a diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png index 254c60bfbe2715ae2edca48ebccfd074deb8031d..a858a410e4faa62ce324d814e4b816fff83a6fb3 100644 GIT binary patch delta 270 zcmaFHG>>V5WIY=L1B3kM|A`C?3{O2>978G?*G_H@Vq+9({jOQvnsZ&@_BOVgGHJJM z9o9YNo@2Ft=RV{6zv`Z^Yx(!@-_B2;iXv1TKZx^3=zeqItgEm8`1ddGr_Y~-8;*Bs zbOng0?rZ2}XJ@ytv0<^avf_IDH>a+?DdPK^$GyLwshyDA zd(AccfJmIl)^f(c+C%3KGqP=q`!hrQ%J;L2_ti77RQ)kYcId$sPjN+EelD6E+{@kibdDWBhswWrCKi}Bc z*w!hTy{ zfq{WB$=lsUWeeNSnG6gJIi4<#Arg|T2Oa$m1u(E4sNBz=bNC$V$A8O=X z8ZSeA@OFKMn*UnogF7y=`aiW%@>sZo<1mA&yMvjA)Zsa-N0|%SgvRir9{?BaVZN11_lOCS3j3^P6= 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 = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.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"; + }, + + isArray: Array.isArray, + + 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 ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + 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.0 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-01-04 + */ +(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)|^-$|[^\x80-\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; + }, + { 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: + // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) + // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Check form elements and option elements for explicit disabling + return "label" in elem && elem.disabled === disabled || + "form" in elem && elem.disabled === disabled || + + // Check non-disabled form elements for fieldset[disabled] ancestors + "form" in elem && elem.disabled === false && ( + // Support: IE6-11+ + // Ancestry is covered for us + elem.isDisabled === disabled || + + // Otherwise, assume any non-