~cypheon/pyspice-notebook

64a433f91e48ded8d3d09c1fad7a785b7db649ac — Johann Rudloff 1 year, 8 months ago master
Initial commit.
5 files changed, 1610 insertions(+), 0 deletions(-)

A Pipfile
A Pipfile.lock
A README.md
A doc/example_plot.png
A pyspice-notebook.ipynb
A  => Pipfile +14 -0
@@ 1,14 @@
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
jupyter = "==1.0.0"
pyspice = "==1.3.2"
matplotlib = "==3.2.1"

[requires]
python_version = "3.7"

A  => Pipfile.lock +595 -0
@@ 1,595 @@
{
    "_meta": {
        "hash": {
            "sha256": "9d7806683cfcf9d72b15da4d17f158bf59aaef452c29158b76812060af548c9f"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.7"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "appnope": {
            "hashes": [
                "sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0",
                "sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71"
            ],
            "markers": "sys_platform == 'darwin'",
            "version": "==0.1.0"
        },
        "attrs": {
            "hashes": [
                "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
                "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
            ],
            "version": "==19.3.0"
        },
        "backcall": {
            "hashes": [
                "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4",
                "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2"
            ],
            "version": "==0.1.0"
        },
        "bleach": {
            "hashes": [
                "sha256:cc8da25076a1fe56c3ac63671e2194458e0c4d9c7becfd52ca251650d517903c",
                "sha256:e78e426105ac07026ba098f04de8abe9b6e3e98b5befbf89b51a5ef0a4292b03"
            ],
            "version": "==3.1.4"
        },
        "cffi": {
            "hashes": [
                "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff",
                "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b",
                "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac",
                "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0",
                "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384",
                "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26",
                "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6",
                "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b",
                "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e",
                "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd",
                "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2",
                "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66",
                "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc",
                "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8",
                "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55",
                "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4",
                "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5",
                "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d",
                "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78",
                "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa",
                "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793",
                "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f",
                "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a",
                "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f",
                "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30",
                "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f",
                "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3",
                "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"
            ],
            "version": "==1.14.0"
        },
        "cycler": {
            "hashes": [
                "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d",
                "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"
            ],
            "version": "==0.10.0"
        },
        "decorator": {
            "hashes": [
                "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760",
                "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"
            ],
            "version": "==4.4.2"
        },
        "defusedxml": {
            "hashes": [
                "sha256:6687150770438374ab581bb7a1b327a847dd9c5749e396102de3fad4e8a3ef93",
                "sha256:f684034d135af4c6cbb949b8a4d2ed61634515257a67299e5f940fbaa34377f5"
            ],
            "version": "==0.6.0"
        },
        "entrypoints": {
            "hashes": [
                "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19",
                "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"
            ],
            "version": "==0.3"
        },
        "importlib-metadata": {
            "hashes": [
                "sha256:2a688cbaa90e0cc587f1df48bdc97a6eadccdcd9c35fb3f976a09e3b5016d90f",
                "sha256:34513a8a0c4962bc66d35b359558fd8a5e10cd472d37aec5f66858addef32c1e"
            ],
            "markers": "python_version < '3.8'",
            "version": "==1.6.0"
        },
        "ipykernel": {
            "hashes": [
                "sha256:37c65d2e2da3326e5cf114405df6d47d997b8a3eba99e2cc4b75833bf71a5e18",
                "sha256:39746b5f7d847a23fae4eac893e63e3d9cc5f8c3a4797fcd3bfa8d1a296ec6ed"
            ],
            "version": "==5.2.0"
        },
        "ipython": {
            "hashes": [
                "sha256:ca478e52ae1f88da0102360e57e528b92f3ae4316aabac80a2cd7f7ab2efb48a",
                "sha256:eb8d075de37f678424527b5ef6ea23f7b80240ca031c2dd6de5879d687a65333"
            ],
            "markers": "python_version >= '3.3'",
            "version": "==7.13.0"
        },
        "ipython-genutils": {
            "hashes": [
                "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8",
                "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"
            ],
            "version": "==0.2.0"
        },
        "ipywidgets": {
            "hashes": [
                "sha256:13ffeca438e0c0f91ae583dc22f50379b9d6b28390ac7be8b757140e9a771516",
                "sha256:e945f6e02854a74994c596d9db83444a1850c01648f1574adf144fbbabe05c97"
            ],
            "version": "==7.5.1"
        },
        "jedi": {
            "hashes": [
                "sha256:b4f4052551025c6b0b0b193b29a6ff7bdb74c52450631206c262aef9f7159ad2",
                "sha256:d5c871cb9360b414f981e7072c52c33258d598305280fef91c6cae34739d65d5"
            ],
            "version": "==0.16.0"
        },
        "jinja2": {
            "hashes": [
                "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250",
                "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"
            ],
            "version": "==2.11.1"
        },
        "jsonschema": {
            "hashes": [
                "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163",
                "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"
            ],
            "version": "==3.2.0"
        },
        "jupyter": {
            "hashes": [
                "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7",
                "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78",
                "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"
            ],
            "index": "pypi",
            "version": "==1.0.0"
        },
        "jupyter-client": {
            "hashes": [
                "sha256:5724827aedb1948ed6ed15131372bc304a8d3ad9ac67ac19da7c95120d6b17e0",
                "sha256:81c1c712de383bf6bf3dab6b407392b0d84d814c7bd0ce2c7035ead8b2ffea97"
            ],
            "version": "==6.1.2"
        },
        "jupyter-console": {
            "hashes": [
                "sha256:6f6ead433b0534909df789ea64f0a14cdf9b6b2360757756f08182be4b9e431b",
                "sha256:b392155112ec86a329df03b225749a0fa903aa80811e8eda55796a40b5e470d8"
            ],
            "version": "==6.1.0"
        },
        "jupyter-core": {
            "hashes": [
                "sha256:394fd5dd787e7c8861741880bdf8a00ce39f95de5d18e579c74b882522219e7e",
                "sha256:a4ee613c060fe5697d913416fc9d553599c05e4492d58fac1192c9a6844abb21"
            ],
            "version": "==4.6.3"
        },
        "kiwisolver": {
            "hashes": [
                "sha256:03662cbd3e6729f341a97dd2690b271e51a67a68322affab12a5b011344b973c",
                "sha256:18d749f3e56c0480dccd1714230da0f328e6e4accf188dd4e6884bdd06bf02dd",
                "sha256:247800260cd38160c362d211dcaf4ed0f7816afb5efe56544748b21d6ad6d17f",
                "sha256:443c2320520eda0a5b930b2725b26f6175ca4453c61f739fef7a5847bd262f74",
                "sha256:4eadb361baf3069f278b055e3bb53fa189cea2fd02cb2c353b7a99ebb4477ef1",
                "sha256:556da0a5f60f6486ec4969abbc1dd83cf9b5c2deadc8288508e55c0f5f87d29c",
                "sha256:603162139684ee56bcd57acc74035fceed7dd8d732f38c0959c8bd157f913fec",
                "sha256:60a78858580761fe611d22127868f3dc9f98871e6fdf0a15cc4203ed9ba6179b",
                "sha256:7cc095a4661bdd8a5742aaf7c10ea9fac142d76ff1770a0f84394038126d8fc7",
                "sha256:c31bc3c8e903d60a1ea31a754c72559398d91b5929fcb329b1c3a3d3f6e72113",
                "sha256:c955791d80e464da3b471ab41eb65cf5a40c15ce9b001fdc5bbc241170de58ec",
                "sha256:d069ef4b20b1e6b19f790d00097a5d5d2c50871b66d10075dab78938dc2ee2cf",
                "sha256:d52b989dc23cdaa92582ceb4af8d5bcc94d74b2c3e64cd6785558ec6a879793e",
                "sha256:e586b28354d7b6584d8973656a7954b1c69c93f708c0c07b77884f91640b7657",
                "sha256:efcf3397ae1e3c3a4a0a0636542bcad5adad3b1dd3e8e629d0b6e201347176c8",
                "sha256:fccefc0d36a38c57b7bd233a9b485e2f1eb71903ca7ad7adacad6c28a56d62d2"
            ],
            "version": "==1.2.0"
        },
        "markupsafe": {
            "hashes": [
                "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
                "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
                "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
                "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
                "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
                "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
                "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
                "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
                "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
                "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
                "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
                "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
                "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
                "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
                "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
                "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
                "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
                "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
                "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
                "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
                "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
                "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
                "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
                "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
                "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
                "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
                "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
                "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
                "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
                "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
                "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
                "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
                "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"
            ],
            "version": "==1.1.1"
        },
        "matplotlib": {
            "hashes": [
                "sha256:2466d4dddeb0f5666fd1e6736cc5287a4f9f7ae6c1a9e0779deff798b28e1d35",
                "sha256:282b3fc8023c4365bad924d1bb442ddc565c2d1635f210b700722776da466ca3",
                "sha256:4bb50ee4755271a2017b070984bcb788d483a8ce3132fab68393d1555b62d4ba",
                "sha256:56d3147714da5c7ac4bc452d041e70e0e0b07c763f604110bd4e2527f320b86d",
                "sha256:7a9baefad265907c6f0b037c8c35a10cf437f7708c27415a5513cf09ac6d6ddd",
                "sha256:aae7d107dc37b4bb72dcc45f70394e6df2e5e92ac4079761aacd0e2ad1d3b1f7",
                "sha256:af14e77829c5b5d5be11858d042d6f2459878f8e296228c7ea13ec1fd308eb68",
                "sha256:c1cf735970b7cd424502719b44288b21089863aaaab099f55e0283a721aaf781",
                "sha256:ce378047902b7a05546b6485b14df77b2ff207a0054e60c10b5680132090c8ee",
                "sha256:d35891a86a4388b6965c2d527b9a9f9e657d9e110b0575ca8a24ba0d4e34b8fc",
                "sha256:e06304686209331f99640642dee08781a9d55c6e32abb45ed54f021f46ccae47",
                "sha256:e20ba7fb37d4647ac38f3c6d8672dd8b62451ee16173a0711b37ba0ce42bf37d",
                "sha256:f4412241e32d0f8d3713b68d3ca6430190a5e8a7c070f1c07d7833d8c5264398",
                "sha256:ffe2f9cdcea1086fc414e82f42271ecf1976700b8edd16ca9d376189c6d93aee"
            ],
            "index": "pypi",
            "version": "==3.2.1"
        },
        "mistune": {
            "hashes": [
                "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e",
                "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"
            ],
            "version": "==0.8.4"
        },
        "nbconvert": {
            "hashes": [
                "sha256:21fb48e700b43e82ba0e3142421a659d7739b65568cc832a13976a77be16b523",
                "sha256:f0d6ec03875f96df45aa13e21fd9b8450c42d7e1830418cccc008c0df725fcee"
            ],
            "version": "==5.6.1"
        },
        "nbformat": {
            "hashes": [
                "sha256:65a79936a128fd85aef392b7fea520166364037118b6fe3ed52de742d06c4558",
                "sha256:f0c47cf93c505cb943e2f131ef32b8ae869292b5f9f279db2bafb35867923f69"
            ],
            "version": "==5.0.5"
        },
        "notebook": {
            "hashes": [
                "sha256:3edc616c684214292994a3af05eaea4cc043f6b4247d830f3a2f209fa7639a80",
                "sha256:47a9092975c9e7965ada00b9a20f0cf637d001db60d241d479f53c0be117ad48"
            ],
            "version": "==6.0.3"
        },
        "numpy": {
            "hashes": [
                "sha256:1598a6de323508cfeed6b7cd6c4efb43324f4692e20d1f76e1feec7f59013448",
                "sha256:1b0ece94018ae21163d1f651b527156e1f03943b986188dd81bc7e066eae9d1c",
                "sha256:2e40be731ad618cb4974d5ba60d373cdf4f1b8dcbf1dcf4d9dff5e212baf69c5",
                "sha256:4ba59db1fcc27ea31368af524dcf874d9277f21fd2e1f7f1e2e0c75ee61419ed",
                "sha256:59ca9c6592da581a03d42cc4e270732552243dc45e87248aa8d636d53812f6a5",
                "sha256:5e0feb76849ca3e83dd396254e47c7dba65b3fa9ed3df67c2556293ae3e16de3",
                "sha256:6d205249a0293e62bbb3898c4c2e1ff8a22f98375a34775a259a0523111a8f6c",
                "sha256:6fcc5a3990e269f86d388f165a089259893851437b904f422d301cdce4ff25c8",
                "sha256:82847f2765835c8e5308f136bc34018d09b49037ec23ecc42b246424c767056b",
                "sha256:87902e5c03355335fc5992a74ba0247a70d937f326d852fc613b7f53516c0963",
                "sha256:9ab21d1cb156a620d3999dd92f7d1c86824c622873841d6b080ca5495fa10fef",
                "sha256:a1baa1dc8ecd88fb2d2a651671a84b9938461e8a8eed13e2f0a812a94084d1fa",
                "sha256:a244f7af80dacf21054386539699ce29bcc64796ed9850c99a34b41305630286",
                "sha256:a35af656a7ba1d3decdd4fae5322b87277de8ac98b7d9da657d9e212ece76a61",
                "sha256:b1fe1a6f3a6f355f6c29789b5927f8bd4f134a4bd9a781099a7c4f66af8850f5",
                "sha256:b5ad0adb51b2dee7d0ee75a69e9871e2ddfb061c73ea8bc439376298141f77f5",
                "sha256:ba3c7a2814ec8a176bb71f91478293d633c08582119e713a0c5351c0f77698da",
                "sha256:cd77d58fb2acf57c1d1ee2835567cd70e6f1835e32090538f17f8a3a99e5e34b",
                "sha256:cdb3a70285e8220875e4d2bc394e49b4988bdb1298ffa4e0bd81b2f613be397c",
                "sha256:deb529c40c3f1e38d53d5ae6cd077c21f1d49e13afc7936f7f868455e16b64a0",
                "sha256:e7894793e6e8540dbeac77c87b489e331947813511108ae097f1715c018b8f3d"
            ],
            "version": "==1.18.2"
        },
        "pandocfilters": {
            "hashes": [
                "sha256:b3dd70e169bb5449e6bc6ff96aea89c5eea8c5f6ab5e207fc2f521a2cf4a0da9"
            ],
            "version": "==1.4.2"
        },
        "parso": {
            "hashes": [
                "sha256:0c5659e0c6eba20636f99a04f469798dca8da279645ce5c387315b2c23912157",
                "sha256:8515fc12cfca6ee3aa59138741fc5624d62340c97e401c74875769948d4f2995"
            ],
            "version": "==0.6.2"
        },
        "pexpect": {
            "hashes": [
                "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937",
                "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"
            ],
            "markers": "sys_platform != 'win32'",
            "version": "==4.8.0"
        },
        "pickleshare": {
            "hashes": [
                "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca",
                "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"
            ],
            "version": "==0.7.5"
        },
        "ply": {
            "hashes": [
                "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3",
                "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"
            ],
            "version": "==3.11"
        },
        "prometheus-client": {
            "hashes": [
                "sha256:71cd24a2b3eb335cb800c7159f423df1bd4dcd5171b234be15e3f31ec9f622da"
            ],
            "version": "==0.7.1"
        },
        "prompt-toolkit": {
            "hashes": [
                "sha256:563d1a4140b63ff9dd587bda9557cffb2fe73650205ab6f4383092fb882e7dc8",
                "sha256:df7e9e63aea609b1da3a65641ceaf5bc7d05e0a04de5bd45d05dbeffbabf9e04"
            ],
            "version": "==3.0.5"
        },
        "ptyprocess": {
            "hashes": [
                "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0",
                "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"
            ],
            "markers": "os_name != 'nt'",
            "version": "==0.6.0"
        },
        "pycparser": {
            "hashes": [
                "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0",
                "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"
            ],
            "version": "==2.20"
        },
        "pygments": {
            "hashes": [
                "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44",
                "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"
            ],
            "version": "==2.6.1"
        },
        "pyparsing": {
            "hashes": [
                "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f",
                "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"
            ],
            "version": "==2.4.6"
        },
        "pyrsistent": {
            "hashes": [
                "sha256:28669905fe725965daa16184933676547c5bb40a5153055a8dee2a4bd7933ad3"
            ],
            "version": "==0.16.0"
        },
        "pyspice": {
            "hashes": [
                "sha256:913bbdb5ac58a9fc17585d04da58883cf36b79e762e2988d498e58237d5d9442"
            ],
            "index": "pypi",
            "version": "==1.3.2"
        },
        "python-dateutil": {
            "hashes": [
                "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
                "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
            ],
            "version": "==2.8.1"
        },
        "pyyaml": {
            "hashes": [
                "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97",
                "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76",
                "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2",
                "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648",
                "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf",
                "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f",
                "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2",
                "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee",
                "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d",
                "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c",
                "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"
            ],
            "version": "==5.3.1"
        },
        "pyzmq": {
            "hashes": [
                "sha256:0bbc1728fe4314b4ca46249c33873a390559edac7c217ec7001b5e0c34a8fb7f",
                "sha256:1e076ad5bd3638a18c376544d32e0af986ca10d43d4ce5a5d889a8649f0d0a3d",
                "sha256:242d949eb6b10197cda1d1cec377deab1d5324983d77e0d0bf9dc5eb6d71a6b4",
                "sha256:26f4ae420977d2a8792d7c2d7bda43128b037b5eeb21c81951a94054ad8b8843",
                "sha256:32234c21c5e0a767c754181c8112092b3ddd2e2a36c3f76fc231ced817aeee47",
                "sha256:3f12ce1e9cc9c31497bd82b207e8e86ccda9eebd8c9f95053aae46d15ccd2196",
                "sha256:4557d5e036e6d85715b4b9fdb482081398da1d43dc580d03db642b91605b409f",
                "sha256:4f562dab21c03c7aa061f63b147a595dbe1006bf4f03213272fc9f7d5baec791",
                "sha256:5e071b834051e9ecb224915398f474bfad802c2fff883f118ff5363ca4ae3edf",
                "sha256:5e1f65e576ab07aed83f444e201d86deb01cd27dcf3f37c727bc8729246a60a8",
                "sha256:5f10a31f288bf055be76c57710807a8f0efdb2b82be6c2a2b8f9a61f33a40cea",
                "sha256:6aaaf90b420dc40d9a0e1996b82c6a0ff91d9680bebe2135e67c9e6d197c0a53",
                "sha256:75238d3c16cab96947705d5709187a49ebb844f54354cdf0814d195dd4c045de",
                "sha256:7f7e7b24b1d392bb5947ba91c981e7d1a43293113642e0d8870706c8e70cdc71",
                "sha256:84b91153102c4bcf5d0f57d1a66a0f03c31e9e6525a5f656f52fc615a675c748",
                "sha256:944f6bb5c63140d76494467444fd92bebd8674236837480a3c75b01fe17df1ab",
                "sha256:a1f957c20c9f51d43903881399b078cddcf710d34a2950e88bce4e494dcaa4d1",
                "sha256:a49fd42a29c1cc1aa9f461c5f2f5e0303adba7c945138b35ee7f4ab675b9f754",
                "sha256:a99ae601b4f6917985e9bb071549e30b6f93c72f5060853e197bdc4b7d357e5f",
                "sha256:ad48865a29efa8a0cecf266432ea7bc34e319954e55cf104be0319c177e6c8f5",
                "sha256:b08e425cf93b4e018ab21dc8fdbc25d7d0502a23cc4fea2380010cf8cf11e462",
                "sha256:bb10361293d96aa92be6261fa4d15476bca56203b3a11c62c61bd14df0ef89ba",
                "sha256:bd1a769d65257a7a12e2613070ca8155ee348aa9183f2aadf1c8b8552a5510f5",
                "sha256:cb3b7156ef6b1a119e68fbe3a54e0a0c40ecacc6b7838d57dd708c90b62a06dc",
                "sha256:e8e4efb52ec2df8d046395ca4c84ae0056cf507b2f713ec803c65a8102d010de",
                "sha256:f37c29da2a5b0c5e31e6f8aab885625ea76c807082f70b2d334d3fd573c3100a",
                "sha256:f4d558bc5668d2345773a9ff8c39e2462dafcb1f6772a2e582fbced389ce527f",
                "sha256:f5b6d015587a1d6f582ba03b226a9ddb1dfb09878b3be04ef48b01b7d4eb6b2a"
            ],
            "version": "==19.0.0"
        },
        "qtconsole": {
            "hashes": [
                "sha256:1eb76ca095f22aa8f0137e8672a63422bfa22bd9a202b64240c5de64103470c9",
                "sha256:d7834598825169fc322390fdfd96bf791833ded21bf22803f083662edbbf3d75"
            ],
            "version": "==4.7.2"
        },
        "qtpy": {
            "hashes": [
                "sha256:2db72c44b55d0fe1407be8fba35c838ad0d6d3bb81f23007886dc1fc0f459c8d",
                "sha256:fa0b8363b363e89b2a6f49eddc162a04c0699ae95e109a6be3bb145a913190ea"
            ],
            "version": "==1.9.0"
        },
        "scipy": {
            "hashes": [
                "sha256:00af72998a46c25bdb5824d2b729e7dabec0c765f9deb0b504f928591f5ff9d4",
                "sha256:0902a620a381f101e184a958459b36d3ee50f5effd186db76e131cbefcbb96f7",
                "sha256:1e3190466d669d658233e8a583b854f6386dd62d655539b77b3fa25bfb2abb70",
                "sha256:2cce3f9847a1a51019e8c5b47620da93950e58ebc611f13e0d11f4980ca5fecb",
                "sha256:3092857f36b690a321a662fe5496cb816a7f4eecd875e1d36793d92d3f884073",
                "sha256:386086e2972ed2db17cebf88610aab7d7f6e2c0ca30042dc9a89cf18dcc363fa",
                "sha256:71eb180f22c49066f25d6df16f8709f215723317cc951d99e54dc88020ea57be",
                "sha256:770254a280d741dd3436919d47e35712fb081a6ff8bafc0f319382b954b77802",
                "sha256:787cc50cab3020a865640aba3485e9fbd161d4d3b0d03a967df1a2881320512d",
                "sha256:8a07760d5c7f3a92e440ad3aedcc98891e915ce857664282ae3c0220f3301eb6",
                "sha256:8d3bc3993b8e4be7eade6dcc6fd59a412d96d3a33fa42b0fa45dc9e24495ede9",
                "sha256:9508a7c628a165c2c835f2497837bf6ac80eb25291055f56c129df3c943cbaf8",
                "sha256:a144811318853a23d32a07bc7fd5561ff0cac5da643d96ed94a4ffe967d89672",
                "sha256:a1aae70d52d0b074d8121333bc807a485f9f1e6a69742010b33780df2e60cfe0",
                "sha256:a2d6df9eb074af7f08866598e4ef068a2b310d98f87dc23bd1b90ec7bdcec802",
                "sha256:bb517872058a1f087c4528e7429b4a44533a902644987e7b2fe35ecc223bc408",
                "sha256:c5cac0c0387272ee0e789e94a570ac51deb01c796b37fb2aad1fb13f85e2f97d",
                "sha256:cc971a82ea1170e677443108703a2ec9ff0f70752258d0e9f5433d00dda01f59",
                "sha256:dba8306f6da99e37ea08c08fef6e274b5bf8567bb094d1dbe86a20e532aca088",
                "sha256:dc60bb302f48acf6da8ca4444cfa17d52c63c5415302a9ee77b3b21618090521",
                "sha256:dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59"
            ],
            "version": "==1.4.1"
        },
        "send2trash": {
            "hashes": [
                "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2",
                "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b"
            ],
            "version": "==1.5.0"
        },
        "six": {
            "hashes": [
                "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
                "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
            ],
            "version": "==1.14.0"
        },
        "terminado": {
            "hashes": [
                "sha256:4804a774f802306a7d9af7322193c5390f1da0abb429e082a10ef1d46e6fb2c2",
                "sha256:a43dcb3e353bc680dd0783b1d9c3fc28d529f190bc54ba9a229f72fe6e7a54d7"
            ],
            "version": "==0.8.3"
        },
        "testpath": {
            "hashes": [
                "sha256:60e0a3261c149755f4399a1fff7d37523179a70fdc3abdf78de9fc2604aeec7e",
                "sha256:bfcf9411ef4bf3db7579063e0546938b1edda3d69f4e1fb8756991f5951f85d4"
            ],
            "version": "==0.4.4"
        },
        "tornado": {
            "hashes": [
                "sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc",
                "sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52",
                "sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6",
                "sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d",
                "sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b",
                "sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673",
                "sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9",
                "sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a",
                "sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740"
            ],
            "version": "==6.0.4"
        },
        "traitlets": {
            "hashes": [
                "sha256:70b4c6a1d9019d7b4f6846832288f86998aa3b9207c6821f3578a6a6a467fe44",
                "sha256:d023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7"
            ],
            "version": "==4.3.3"
        },
        "wcwidth": {
            "hashes": [
                "sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1",
                "sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1"
            ],
            "version": "==0.1.9"
        },
        "webencodings": {
            "hashes": [
                "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
                "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
            ],
            "version": "==0.5.1"
        },
        "widgetsnbextension": {
            "hashes": [
                "sha256:079f87d87270bce047512400efd70238820751a11d2d8cb137a5a5bdbaf255c7",
                "sha256:bd314f8ceb488571a5ffea6cc5b9fc6cba0adaf88a9d2386b93a489751938bcd"
            ],
            "version": "==3.5.1"
        },
        "zipp": {
            "hashes": [
                "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
                "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
            ],
            "version": "==3.1.0"
        }
    },
    "develop": {}
}

A  => README.md +15 -0
@@ 1,15 @@
# pyspice-notebook

Minimal notebook showing a workflow using PySpice with Jupyter and Matplotlib.

## Install Dependencies

    pipenv install

## Run the notebook

    pipenv run jupyter notebook

## Example output

![example plot](doc/example_plot.png)

A  => doc/example_plot.png +0 -0
A  => pyspice-notebook.ipynb +986 -0
@@ 1,986 @@
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib notebook\n",
    "%config InlineBackend.figure_format = 'svg'\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/cypheon/.local/share/virtualenvs/pyspice-notebook-JSLbnKOc/lib/python3.7/site-packages/PySpice/Logging/Logging.py:47: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.\n",
      "  logging_config = yaml.load(open(logging_config_file_name, 'r'))\n"
     ]
    }
   ],
   "source": [
    "import PySpice.Logging.Logging as Logging\n",
    "logger = Logging.setup_logging()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PySpice.Spice.Netlist import Circuit, SubCircuit, SubCircuitFactory\n",
    "from PySpice.Unit import *\n",
    "from PySpice.Spice.Parser import SpiceParser\n",
    "from PySpice.Probe.Plot import plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PieceWiseLinearVoltageSource Vvin"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# define a small circuit in code, you could also read a file and load the netlist from a string (see below)\n",
    "circ = Circuit('small test')\n",
    "\n",
    "circ.R('1', 1, 2, 10@u_kOhm)\n",
    "circ.C('2', 2, 0, 100@u_nF)\n",
    "circ.PieceWiseLinearVoltageSource('vin', 1, 0, [(0@u_ms, 0@u_V), (10@u_ms, 0@u_V), (11@u_ms, 5@u_V), (20@u_ms, 5@u_V)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".title small test\n",
      "R1 1 2 10kOhm\n",
      "C2 2 0 100nF\n",
      "Vvin 1 0 PWL(0ms 0V 10ms 0V 11ms 5V 20ms 5V r=0s td=0.0s)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# check the generated netlist\n",
    "netlist = str(circ)\n",
    "print(netlist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# re-parse the stringified netlist into a netlist again\n",
    "parser = SpiceParser(source=netlist)\n",
    "parsed_circuit = parser.build_circuit()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".title small test\n",
      "R1 1 2 10kOhm\n",
      "C2 2 0 100nF\n",
      "Vvin 1 0 PWL(0ms 0V 10ms 0V 11ms 5V 20ms 5V r=0s td=0.0s)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# this netlist output string should be equivalent to the one above\n",
    "print(str(parsed_circuit))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<ESC>[1;32m2020-04-02 20:21:27,600<ESC>[0m - <ESC>[1;34mPySpice.Spice.NgSpice.Shared.NgSpiceShared.new_instance<ESC>[0m - <ESC>[1;31mINFO<ESC>[0m - New instance for id 0\n",
      "<ESC>[1;32m2020-04-02 20:21:27,650<ESC>[0m - <ESC>[1;34mPySpice.Spice.NgSpice.Shared.NgSpiceShared._init_ngspice<ESC>[0m - <ESC>[1;31mWARNING<ESC>[0m - Unsupported Ngspice version 31\n",
      "<ESC>[1;32m2020-04-02 20:21:27,656<ESC>[0m - <ESC>[1;34mPySpice.Spice.NgSpice.Shared.NgSpiceShared._send_char<ESC>[0m - <ESC>[1;31mERROR<ESC>[0m - Warning: vvin: no DC value, transient time 0 value used\n",
      "CPU times: user 12.6 ms, sys: 3.56 ms, total: 16.2 ms\n",
      "Wall time: 15.9 ms\n"
     ]
    }
   ],
   "source": [
    "# create a simulator\n",
    "sim = circ.simulator()\n",
    "\n",
    "# perform the analysis (and time it)\n",
    "%time analysis = sim.transient(100@u_us, 50@u_ms)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support. ' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option);\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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YeSFF17AV199ZWL13sOKfm6KAVCwup9dEhIScMstt/j0EwA80de1tbUIDQ1Fx44dUVZWZk7hXsaqfnY4HHj55ZcxZcoUAPD5AGhVPw8YMAAdO3bEHXfcga5du+Lzzz/H2bNnzf8AEmIAtFhJSQn8/PyQkpLSrP3bb7+Fv7//dV9z2223ITIyslnbzJkzceeddwIQp8X9/Pxw8uTJZj/z9ttvo3///iZW7z2s6OemGAAFq/sZAKqrq/HUU0/h3XffNadoL2VlX69btw7//u//jltuuQVdunRBenq6ucV7Eav6OTAwEL1790ZDQwMABkCr+nnZsmVYu3Yt9u/fj5iYGDzyyCN4+umnUV9fb/6HkAwDoMUYAD2DAdAzrO7nuro6vPnmm3jyySd9+uwfYG1fX7p0CQUFBUhNTcVHH32E+++//4bXYcnOin7OyMjAXXfd1exGJgZA6//zCOjfkPnyJQ3uYgC0GL8C9gx+BewZVvZzXV0dfv/73+Pxxx/nVzjw3NftAPDQQw8hMDDQWMFeyop+njx5Mm655RbceuutjZufnx/+5V/+BYqiWPI52jpPjufbb78dc+bMMVawD2AA9AB/f398+eWXjX92OBy45557fvTC1zfeeKNZ27PPPnvNTSATJ05s/PuKigreBGJyPzfFAKizop9d4e/RRx/16btRr2blmG7qwQcfREBAgOF6vZXZ/Xz27FlkZ2c327p06QJVVXHgwAHrPkgb54nxXFxcjFtuuQVr1641p2iJMQB6QFRUFNq3b4/w8HDk5eXh008/RadOnXD69GkAwPvvv4/Bgwc3/nxycjL+9V//FRMnTkR+fj4CAgKuuwxMp06dGq996NevH5eBsaCfz507h8zMTKxfvx5+fn6IiopCZmYmTp065fHP11aY3c91dXXo27cv7r33XmRlZTVbzqG2ttaWz9hWmN3Xly5dwpAhQ5CamoqjR48iIyMDH374Idq3b4+cnBxbPmNbYMWx42q+/hUwYH4/V1ZW4ptvvkFqaiqKioqwefNmPPXUU3j44YdRU1Njy2f0JgyAHjJ9+nTcd999aNeuHfz9/ZstvPriiy9iwIABzX4+OjoaXbt2Rbt27fDoo4/ecCHou+66C+3bt0fPnj1x8OBBT3yUNs3sfl68ePE1i4z6+fn59NkSwNx+dp1dvd62detWD32itsvMvq6ursZbb72FLl26oF27dujcuTP69u3r0zeBuJh97LgaA6BgZj9fvnwZr7zyCu644w7cdtttUBQFAwcObAyU9OMYAImIiIh8DAMgERERkY9hACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORjGACJiIiIfAwDIBEREZGPYQAkIiIi8jEMgEREREQ+hgGQiIiIyMcwABIRERH5GAZAIiIiIh/DAEhERETkYxgAiYiIiHwMAyARERGRj2EAJCIiIvIxDIBEREREPoYBkIiIiMjHMAASERER+RgGQCIiIiIfwwBIRERE5GMYAImIiIh8DAMgERERkY9hACQiIiLyMQyARERERD6GAZCIiIjIxzAAEhEREfkYBkAiIiIiH8MASERERORj/h9GTTMv6YdZ0wAAAABJRU5ErkJggg==\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "axe = plt.subplot()\n",
    "plot(analysis['1'], label=r'$V_{in}$')\n",
    "plot(analysis['2'], label=r'$V_{C_2}$')\n",
    "axe.legend();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}