From 64a433f91e48ded8d3d09c1fad7a785b7db649ac Mon Sep 17 00:00:00 2001 From: Johann Rudloff Date: Thu, 2 Apr 2020 20:29:42 +0200 Subject: [PATCH] Initial commit. --- Pipfile | 14 + Pipfile.lock | 595 +++++++++++++++++++++++++ README.md | 15 + doc/example_plot.png | Bin 0 -> 33305 bytes pyspice-notebook.ipynb | 986 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1610 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 README.md create mode 100644 doc/example_plot.png create mode 100644 pyspice-notebook.ipynb diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..d453a0b --- /dev/null +++ b/Pipfile @@ -0,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" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..c7a8d19 --- /dev/null +++ b/Pipfile.lock @@ -0,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": {} +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..4b29f74 --- /dev/null +++ b/README.md @@ -0,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) diff --git a/doc/example_plot.png b/doc/example_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..44a51d6cbea12c703e47f501371e9a1e3f1ad68b GIT binary patch literal 33305 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[1;32m2020-04-02 20:21:27,600[0m - [1;34mPySpice.Spice.NgSpice.Shared.NgSpiceShared.new_instance[0m - [1;31mINFO[0m - New instance for id 0\n", + "[1;32m2020-04-02 20:21:27,650[0m - [1;34mPySpice.Spice.NgSpice.Shared.NgSpiceShared._init_ngspice[0m - [1;31mWARNING[0m - Unsupported Ngspice version 31\n", + "[1;32m2020-04-02 20:21:27,656[0m - [1;34mPySpice.Spice.NgSpice.Shared.NgSpiceShared._send_char[0m - [1;31mERROR[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 = $('
');\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", + " '
');\n", + " var titletext = $(\n", + " '
');\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 = $('
');\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 = $('');\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 = $('');\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 = $('
');\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 = $('