Last active
July 5, 2022 14:35
-
-
Save hanslovsky/0297254d70333d3abeecf4df4855bb98 to your computer and use it in GitHub Desktop.
Explore quicksort with numba
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[packages] | |
numba = "~=0.55" | |
matplotlib = "~=3.5" | |
[requires] | |
python_version = "3.9" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"_meta": { | |
"hash": { | |
"sha256": "3718d7b9c26deaa3e0352d4961aaceed035344cbc9fafe521ce3803e03658542" | |
}, | |
"pipfile-spec": 6, | |
"requires": { | |
"python_version": "3.9" | |
}, | |
"sources": [ | |
{ | |
"name": "pypi", | |
"url": "https://pypi.org/simple", | |
"verify_ssl": true | |
} | |
] | |
}, | |
"default": { | |
"cycler": { | |
"hashes": [ | |
"sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3", | |
"sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f" | |
], | |
"markers": "python_version >= '3.6'", | |
"version": "==0.11.0" | |
}, | |
"fonttools": { | |
"hashes": [ | |
"sha256:c0fdcfa8ceebd7c1b2021240bd46ef77aa8e7408cf10434be55df52384865f8e", | |
"sha256:f829c579a8678fa939a1d9e9894d01941db869de44390adb49ce67055a06cc2a" | |
], | |
"markers": "python_version >= '3.7'", | |
"version": "==4.33.3" | |
}, | |
"kiwisolver": { | |
"hashes": [ | |
"sha256:007799c7fa934646318fc128b033bb6e6baabe7fbad521bfb2279aac26225cd7", | |
"sha256:130c6c35eded399d3967cf8a542c20b671f5ba85bd6f210f8b939f868360e9eb", | |
"sha256:1858ad3cb686eccc7c6b7c5eac846a1cfd45aacb5811b2cf575e80b208f5622a", | |
"sha256:1ae7aa0784aeadfbd693c27993727792fbe1455b84d49970bad5886b42976b18", | |
"sha256:1d2c744aeedce22c122bb42d176b4aa6d063202a05a4abdacb3e413c214b3694", | |
"sha256:21a3a98f0a21fc602663ca9bce2b12a4114891bdeba2dea1e9ad84db59892fca", | |
"sha256:22ccba48abae827a0f952a78a7b1a7ff01866131e5bbe1f826ce9bda406bf051", | |
"sha256:26b5a70bdab09e6a2f40babc4f8f992e3771751e144bda1938084c70d3001c09", | |
"sha256:2d76780d9c65c7529cedd49fa4802d713e60798d8dc3b0d5b12a0a8f38cca51c", | |
"sha256:325fa1b15098e44fe4590a6c5c09a212ca10c6ebb5d96f7447d675f6c8340e4e", | |
"sha256:3a297d77b3d6979693f5948df02b89431ae3645ec95865e351fb45578031bdae", | |
"sha256:3b1dcbc49923ac3c973184a82832e1f018dec643b1e054867d04a3a22255ec6a", | |
"sha256:40240da438c0ebfe2aa76dd04b844effac6679423df61adbe3437d32f23468d9", | |
"sha256:46c6e5018ba31d5ee7582f323d8661498a154dea1117486a571db4c244531f24", | |
"sha256:46fb56fde006b7ef5f8eaa3698299b0ea47444238b869ff3ced1426aa9fedcb5", | |
"sha256:4dc350cb65fe4e3f737d50f0465fa6ea0dcae0e5722b7edf5d5b0a0e3cd2c3c7", | |
"sha256:51078855a16b7a4984ed2067b54e35803d18bca9861cb60c60f6234b50869a56", | |
"sha256:547111ef7cf13d73546c2de97ce434935626c897bdec96a578ca100b5fcd694b", | |
"sha256:5fb73cc8a34baba1dfa546ae83b9c248ef6150c238b06fc53d2773685b67ec67", | |
"sha256:654280c5f41831ddcc5a331c0e3ce2e480bbc3d7c93c18ecf6236313aae2d61a", | |
"sha256:6b3136eecf7e1b4a4d23e4b19d6c4e7a8e0b42d55f30444e3c529700cdacaa0d", | |
"sha256:7118ca592d25b2957ff7b662bc0fe4f4c2b5d5b27814b9b1bc9f2fb249a970e7", | |
"sha256:71af5b43e4fa286a35110fc5bb740fdeae2b36ca79fbcf0a54237485baeee8be", | |
"sha256:747190fcdadc377263223f8f72b038381b3b549a8a3df5baf4d067da4749b046", | |
"sha256:8395064d63b26947fa2c9faeea9c3eee35e52148c5339c37987e1d96fbf009b3", | |
"sha256:84f85adfebd7d3c3db649efdf73659e1677a2cf3fa6e2556a3f373578af14bf7", | |
"sha256:86bcf0009f2012847a688f2f4f9b16203ca4c835979a02549aa0595d9f457cc8", | |
"sha256:ab8a15c2750ae8d53e31f77a94f846d0a00772240f1c12817411fa2344351f86", | |
"sha256:af24b21c2283ca69c416a8a42cde9764dc36c63d3389645d28c69b0e93db3cd7", | |
"sha256:afe173ac2646c2636305ab820cc0380b22a00a7bca4290452e7166b4f4fa49d0", | |
"sha256:b9eb88593159a53a5ee0b0159daee531ff7dd9c87fa78f5d807ca059c7eb1b2b", | |
"sha256:c16635f8dddbeb1b827977d0b00d07b644b040aeb9ff8607a9fc0997afa3e567", | |
"sha256:ca3eefb02ef17257fae8b8555c85e7c1efdfd777f671384b0e4ef27409b02720", | |
"sha256:caa59e2cae0e23b1e225447d7a9ddb0f982f42a6a22d497a484dfe62a06f7c0e", | |
"sha256:cb55258931448d61e2d50187de4ee66fc9d9f34908b524949b8b2b93d0c57136", | |
"sha256:d248c46c0aa406695bda2abf99632db991f8b3a6d46018721a2892312a99f069", | |
"sha256:d2578e5149ff49878934debfacf5c743fab49eca5ecdb983d0b218e1e554c498", | |
"sha256:dd22085446f3eca990d12a0878eeb5199dc9553b2e71716bfe7bed9915a472ab", | |
"sha256:e7cf940af5fee00a92e281eb157abe8770227a5255207818ea9a34e54a29f5b2", | |
"sha256:f70f3d028794e31cf9d1a822914efc935aadb2438ec4e8d4871d95eb1ce032d6", | |
"sha256:fd2842a0faed9ab9aba0922c951906132d9384be89690570f0ed18cd4f20e658", | |
"sha256:fd628e63ffdba0112e3ddf1b1e9f3db29dd8262345138e08f4938acbc6d0805a", | |
"sha256:ffd7cf165ff71afb202b3f36daafbf298932bee325aac9f58e1c9cd55838bef0" | |
], | |
"markers": "python_version >= '3.7'", | |
"version": "==1.4.3" | |
}, | |
"llvmlite": { | |
"hashes": [ | |
"sha256:0622a86301fcf81cc50d7ed5b4bebe992c030580d413a8443b328ed4f4d82561", | |
"sha256:0c0adce1793d66d009c554809f27baeb6258bf13f6fbaa12eff7443500caec25", | |
"sha256:0e609f7312a439b53b6f622d99180c3ff6a3e1e4ceca4d18aca1c5b46f4e3664", | |
"sha256:3d76c0fa42390bef56979ed213fbf0150c3fef36f5ea68d3d780d5d725da8c01", | |
"sha256:41e638a71c85a9a4a33f279c4cd812bc2f84122505b1f6ab8984ec7debb8548b", | |
"sha256:4c1e5805c92e049b4956ed01204c6647de6160ab9aefb0d67ea83ca02a1d889a", | |
"sha256:4e11bd9929dcbd55d5eb5cd7b08bf71b0097ea48cc192b69d102a90dd6e9816f", | |
"sha256:5559e46c79b4017c3c25edc3b9512d11adc3689b9046120c685b0905c08d48a5", | |
"sha256:5c07d63df4578f31b39b764d3b4291f70157af7f42e171a8884ae7aaf989d1f7", | |
"sha256:633c9026eb43b9903cc4ffbc1c7d5293b2e3ad95d06fa9eab0f6ce6ff6ea15b3", | |
"sha256:66462d768c30d5f648ca3361d657b434efa8b09f6cf04d6b6eae66e62e993644", | |
"sha256:7a5e0ed215a576f0f872f47a70b8cb49864e0aefc8586aff5ce83e3bff47bc23", | |
"sha256:7db018da2863034ad9c73c946625637f3a89635bc70576068bab4bd085eea90d", | |
"sha256:84d5a0163c172db2b2ae561d2fc0866fbd9f716cf13f92c0d41ca4338e682672", | |
"sha256:8c4f26c6c370e134a909ac555a671fa1376e74c69af0208f25c0979472577a9d", | |
"sha256:8c64c90a8b0b7b7e1ed1912ba82c1a3f43cf25affbe06aa3c56c84050edee8ac", | |
"sha256:9c8fac4edbadefa4dddf5dc6cca76bc2ae81df211dcd16a6638d60cc41249e56", | |
"sha256:9f53c3448410cc84d0e1af84dbc0d60ad32779853d40bcc8b1ee3c67ebbe94b1", | |
"sha256:a263252a68d85450110ec1f2b406c0414e49b04a4d216d31c0515ea1d59c3882", | |
"sha256:a7dd2bd1d6406e7789273e3f8a304ed5d9adcfaa5768052fca7dc233a857be98", | |
"sha256:ab070266f0f51304789a6c20d4be91a9e69683ad9bd4861eb89980e8eb613b3a", | |
"sha256:b98da8436dbc29013ea301f1fdb0d596ab53bf0ab65c976d96d00bb6faa0b479", | |
"sha256:de8bd61480173930f2a029673e7cd0738fbbb5171dfe490340839ad7301d4cf0", | |
"sha256:ed7528b8b85de930b76407e44b080e4f376b7a007c2879749599ff8e2fe32753", | |
"sha256:edfa2c761cfa56cf76e783290d82e117f829bb691d8d90aa375505204888abac", | |
"sha256:ef9aa574eff2e15f8c47b255da0db5dab326dc7f76384c307ae35490e2d2489a", | |
"sha256:f95f455697c44d7c04ef95fdfce04629f48df08a832d0a0d9eb2363186dbb969", | |
"sha256:fbfbe546394c39db39a6898a51972aa131c8d6b0628517728b350552f58bdc19" | |
], | |
"markers": "python_version < '3.11' and python_version >= '3.7'", | |
"version": "==0.38.1" | |
}, | |
"matplotlib": { | |
"hashes": [ | |
"sha256:03bbb3f5f78836855e127b5dab228d99551ad0642918ccbf3067fcd52ac7ac5e", | |
"sha256:24173c23d1bcbaed5bf47b8785d27933a1ac26a5d772200a0f3e0e38f471b001", | |
"sha256:2a0967d4156adbd0d46db06bc1a877f0370bce28d10206a5071f9ecd6dc60b79", | |
"sha256:2e8bda1088b941ead50caabd682601bece983cadb2283cafff56e8fcddbf7d7f", | |
"sha256:31fbc2af27ebb820763f077ec7adc79b5a031c2f3f7af446bd7909674cd59460", | |
"sha256:364e6bca34edc10a96aa3b1d7cd76eb2eea19a4097198c1b19e89bee47ed5781", | |
"sha256:3d8e129af95b156b41cb3be0d9a7512cc6d73e2b2109f82108f566dbabdbf377", | |
"sha256:44c6436868186564450df8fd2fc20ed9daaef5caad699aa04069e87099f9b5a8", | |
"sha256:48cf850ce14fa18067f2d9e0d646763681948487a8080ec0af2686468b4607a2", | |
"sha256:49a5938ed6ef9dda560f26ea930a2baae11ea99e1c2080c8714341ecfda72a89", | |
"sha256:4a05f2b37222319753a5d43c0a4fd97ed4ff15ab502113e3f2625c26728040cf", | |
"sha256:4a44cdfdb9d1b2f18b1e7d315eb3843abb097869cd1ef89cfce6a488cd1b5182", | |
"sha256:4fa28ca76ac5c2b2d54bc058b3dad8e22ee85d26d1ee1b116a6fd4d2277b6a04", | |
"sha256:5844cea45d804174bf0fac219b4ab50774e504bef477fc10f8f730ce2d623441", | |
"sha256:5a32ea6e12e80dedaca2d4795d9ed40f97bfa56e6011e14f31502fdd528b9c89", | |
"sha256:6c623b355d605a81c661546af7f24414165a8a2022cddbe7380a31a4170fa2e9", | |
"sha256:751d3815b555dcd6187ad35b21736dc12ce6925fc3fa363bbc6dc0f86f16484f", | |
"sha256:75c406c527a3aa07638689586343f4b344fcc7ab1f79c396699eb550cd2b91f7", | |
"sha256:77157be0fc4469cbfb901270c205e7d8adb3607af23cef8bd11419600647ceed", | |
"sha256:7d7705022df2c42bb02937a2a824f4ec3cca915700dd80dc23916af47ff05f1a", | |
"sha256:7f409716119fa39b03da3d9602bd9b41142fab7a0568758cd136cd80b1bf36c8", | |
"sha256:9480842d5aadb6e754f0b8f4ebeb73065ac8be1855baa93cd082e46e770591e9", | |
"sha256:9776e1a10636ee5f06ca8efe0122c6de57ffe7e8c843e0fb6e001e9d9256ec95", | |
"sha256:a91426ae910819383d337ba0dc7971c7cefdaa38599868476d94389a329e599b", | |
"sha256:b4fedaa5a9aa9ce14001541812849ed1713112651295fdddd640ea6620e6cf98", | |
"sha256:b6c63cd01cad0ea8704f1fd586e9dc5777ccedcd42f63cbbaa3eae8dd41172a1", | |
"sha256:b8d3f4e71e26307e8c120b72c16671d70c5cd08ae412355c11254aa8254fb87f", | |
"sha256:c4b82c2ae6d305fcbeb0eb9c93df2602ebd2f174f6e8c8a5d92f9445baa0c1d3", | |
"sha256:c772264631e5ae61f0bd41313bbe48e1b9bcc95b974033e1118c9caa1a84d5c6", | |
"sha256:c87973ddec10812bddc6c286b88fdd654a666080fbe846a1f7a3b4ba7b11ab78", | |
"sha256:e2b696699386766ef171a259d72b203a3c75d99d03ec383b97fc2054f52e15cf", | |
"sha256:ea75df8e567743207e2b479ba3d8843537be1c146d4b1e3e395319a4e1a77fe9", | |
"sha256:ebc27ad11df3c1661f4677a7762e57a8a91dd41b466c3605e90717c9a5f90c82", | |
"sha256:ee0b8e586ac07f83bb2950717e66cb305e2859baf6f00a9c39cc576e0ce9629c", | |
"sha256:ee175a571e692fc8ae8e41ac353c0e07259113f4cb063b0ec769eff9717e84bb" | |
], | |
"index": "pypi", | |
"version": "==3.5.2" | |
}, | |
"numba": { | |
"hashes": [ | |
"sha256:09ff4d690abb05ffbb8a29a96d1cf35b46887a26796d3670de104beeec73d639", | |
"sha256:1105449247f338e49d63eb04a4aaa5c440bb5435df00f718c8e6e7afad841bb0", | |
"sha256:135fb7694928f9f57b4ff5b1be58f20f4771fedd1680636a9affdead96051959", | |
"sha256:16a52a0641c342b09b39f6762dcbe3846e44aa9baaaf4703b2ca42a3aee7346f", | |
"sha256:20de0139d2267c8f0e2470d4f88540446cd1bf40de0f29f31b7ab9bf25d49b45", | |
"sha256:25410557d0deb1d97397b71e142a36772133986a7dd4fe2935786e2dd149245f", | |
"sha256:2665ef28e900b3a55bf370daa81c12ebc64cd434116accd60c38a95a159a3182", | |
"sha256:29b89a68af162acf87adeb8fbf01f6bb1effae4711b28146f95108d82e905624", | |
"sha256:32649584144c35ced239937ab2c416ab22bbc1490ef8d90609c30fff9f6aa1b8", | |
"sha256:3eaf53e73e700370163e58257257299ac0d46fea4f244bf5476e4635bc31d808", | |
"sha256:46715180f87d5a1f3e4077d207ade66c96fc01159f5b7d49cee2d6ffb9e6539f", | |
"sha256:5559c6684bf6cce7a22c656d8fef3e7c38ff5fec5153abef5955f6f7cae9f102", | |
"sha256:676c081162cc9403706071c1d1d42e479c0741551ab28096ba13859a2e3e9b80", | |
"sha256:68bb33eaef1d6155fc1ae4fa6c915b8a42e5052c89a58742254eaad072eab118", | |
"sha256:69b2e823efa40d32b259f5c094476dde2226b92032f17015d8cd7c10472654ce", | |
"sha256:6e0f9b5d1c8ea1bdef39b0ad921a9bbf0cc4a88e76d722d756c68f1653787c35", | |
"sha256:8d5760a1e6a48d98d6b9cf774e4d2a64813d981cca60d7b7356af61195a6ca17", | |
"sha256:a669212aa66ffee4ad778016ac3819add33f9bcb96b4c384d3099531dd175085", | |
"sha256:a85779adc5234f7857615d1bd2c7b514314521f9f0163c33017707ed9816e6e6", | |
"sha256:d1c3cef3289fefb5673ceae32024ab5a8a08d4f4380bcb8348d01f1ba570ccff", | |
"sha256:d7ac9ea5feef9536ab8bfbbb3ded1a0617ea8794d7547800d535b7857800f996", | |
"sha256:da4485e0f0b9562f39c78887149b33d13d787aa696553c9257b95575122905ed", | |
"sha256:dcde1a1a3a430fb5f83c7e095b0b6ac7adb5595f50a3ee05babb2964f31613c4", | |
"sha256:dd05f7c0ce64b6977596aa4e5a44747c6ef414d7989da1c7672337c54381a5ef", | |
"sha256:de1f93bd7e2d431451aec20a52ac651a020e98a4ba46797fad860bba338a7e64", | |
"sha256:dfddd633141608a09cbce275fb9fe7aa514918625ace20b0e587898a2d93c030", | |
"sha256:e36232eccd172c583b1f021c5c48744c087ae6fc9dc5c5f0dd2cb2286e517bf8", | |
"sha256:e428d9e11d9ba592849ccc9f7a009003eb7d30612007e365afe743ce7118c6f4" | |
], | |
"index": "pypi", | |
"version": "==0.55.2" | |
}, | |
"numpy": { | |
"hashes": [ | |
"sha256:0791fbd1e43bf74b3502133207e378901272f3c156c4df4954cad833b1380207", | |
"sha256:1ce7ab2053e36c0a71e7a13a7475bd3b1f54750b4b433adc96313e127b870887", | |
"sha256:2d487e06ecbf1dc2f18e7efce82ded4f705f4bd0cd02677ffccfb39e5c284c7e", | |
"sha256:37431a77ceb9307c28382c9773da9f306435135fae6b80b62a11c53cfedd8802", | |
"sha256:3e1ffa4748168e1cc8d3cde93f006fe92b5421396221a02f2274aab6ac83b077", | |
"sha256:425b390e4619f58d8526b3dcf656dde069133ae5c240229821f01b5f44ea07af", | |
"sha256:43a8ca7391b626b4c4fe20aefe79fec683279e31e7c79716863b4b25021e0e74", | |
"sha256:4c6036521f11a731ce0648f10c18ae66d7143865f19f7299943c985cdc95afb5", | |
"sha256:59d55e634968b8f77d3fd674a3cf0b96e85147cd6556ec64ade018f27e9479e1", | |
"sha256:64f56fc53a2d18b1924abd15745e30d82a5782b2cab3429aceecc6875bd5add0", | |
"sha256:7228ad13744f63575b3a972d7ee4fd61815b2879998e70930d4ccf9ec721dce0", | |
"sha256:9ce7df0abeabe7fbd8ccbf343dc0db72f68549856b863ae3dd580255d009648e", | |
"sha256:a911e317e8c826ea632205e63ed8507e0dc877dcdc49744584dfc363df9ca08c", | |
"sha256:b89bf9b94b3d624e7bb480344e91f68c1c6c75f026ed6755955117de00917a7c", | |
"sha256:ba9ead61dfb5d971d77b6c131a9dbee62294a932bf6a356e48c75ae684e635b3", | |
"sha256:c1d937820db6e43bec43e8d016b9b3165dcb42892ea9f106c70fb13d430ffe72", | |
"sha256:cc7f00008eb7d3f2489fca6f334ec19ca63e31371be28fd5dad955b16ec285bd", | |
"sha256:d4c5d5eb2ec8da0b4f50c9a843393971f31f1d60be87e0fb0917a49133d257d6", | |
"sha256:e96d7f3096a36c8754207ab89d4b3282ba7b49ea140e4973591852c77d09eb76", | |
"sha256:f0725df166cf4785c0bc4cbfb320203182b1ecd30fee6e541c8752a92df6aa32", | |
"sha256:f3eb268dbd5cfaffd9448113539e44e2dd1c5ca9ce25576f7c04a5453edc26fa", | |
"sha256:fb7a980c81dd932381f8228a426df8aeb70d59bbcda2af075b627bbc50207cba" | |
], | |
"markers": "python_version >= '3.8'", | |
"version": "==1.22.4" | |
}, | |
"packaging": { | |
"hashes": [ | |
"sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", | |
"sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" | |
], | |
"markers": "python_version >= '3.6'", | |
"version": "==21.3" | |
}, | |
"pillow": { | |
"hashes": [ | |
"sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f", | |
"sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d", | |
"sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b", | |
"sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c", | |
"sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9", | |
"sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546", | |
"sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578", | |
"sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1", | |
"sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe", | |
"sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098", | |
"sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2", | |
"sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a", | |
"sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45", | |
"sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530", | |
"sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108", | |
"sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1", | |
"sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd", | |
"sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0", | |
"sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6", | |
"sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c", | |
"sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf", | |
"sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4", | |
"sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d", | |
"sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765", | |
"sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602", | |
"sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340", | |
"sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c", | |
"sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b", | |
"sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84", | |
"sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8", | |
"sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92", | |
"sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54", | |
"sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601", | |
"sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a", | |
"sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf", | |
"sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251", | |
"sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a", | |
"sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e" | |
], | |
"markers": "python_version >= '3.7'", | |
"version": "==9.1.1" | |
}, | |
"pyparsing": { | |
"hashes": [ | |
"sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", | |
"sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" | |
], | |
"markers": "python_full_version >= '3.6.8'", | |
"version": "==3.0.9" | |
}, | |
"python-dateutil": { | |
"hashes": [ | |
"sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", | |
"sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" | |
], | |
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", | |
"version": "==2.8.2" | |
}, | |
"setuptools": { | |
"hashes": [ | |
"sha256:5a844ad6e190dccc67d6d7411d119c5152ce01f7c76be4d8a1eaa314501bba77", | |
"sha256:bf8a748ac98b09d32c9a64a995a6b25921c96cc5743c1efa82763ba80ff54e91" | |
], | |
"markers": "python_version >= '3.7'", | |
"version": "==62.4.0" | |
}, | |
"six": { | |
"hashes": [ | |
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", | |
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" | |
], | |
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", | |
"version": "==1.16.0" | |
} | |
}, | |
"develop": {} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
import matplotlib.pyplot as plt | |
import numba as nb | |
import numpy as np | |
from collections import defaultdict | |
from dataclasses import dataclass | |
from time import time | |
from numba.typed import List | |
@dataclass | |
class Statistics: | |
data: list[float] | |
_mean: float = None | |
_stdev: float = None | |
@property | |
def mean(self): | |
if self._mean is None: | |
self._mean = np.mean(self.data) | |
return self._mean | |
@property | |
def stdev(self): | |
if self._stdev is None: | |
self._stdev = np.std(self.data) | |
return self._stdev | |
class Timer: | |
def __init__(self, n, result_check, n_warmup=1, ): | |
self.n_warmup = n_warmup | |
self.n = n | |
self.result_check = result_check | |
def time(self, func): | |
result = None | |
times = [] | |
for _ in range(self.n_warmup): | |
result = func() | |
for _ in range(self.n): | |
t0 = time() | |
result = func() | |
t1 = time() | |
times.append(t1 - t0) | |
assert self.result_check(result) | |
return Statistics(times) | |
def partition(l: list[float], low: int, high: int) -> int: | |
pivot = l[high] | |
idx = low - 1 | |
for k in range(low, high): | |
tmp = l[k] | |
if tmp <= pivot: | |
idx += 1 | |
# swap | |
l[k] = l[idx] | |
l[idx] = tmp | |
idx += 1 | |
tmp = l[idx] | |
l[idx] = l[high] | |
l[high] = tmp | |
return idx | |
partition_signature=[ | |
nb.int64(nb.typeof(List([1.0])), nb.int64, nb.int64), | |
nb.int64(nb.typeof(np.asarray([1.0])), nb.int64, nb.int64) | |
] | |
@nb.jit(partition_signature, nopython=True) | |
def partition_jit(l: List, low: int, high: int) -> int: | |
pivot = l[high] | |
idx = low - 1 | |
for k in range(low, high): | |
tmp = l[k] | |
if tmp <= pivot: | |
idx += 1 | |
# swap | |
l[k] = l[idx] | |
l[idx] = tmp | |
idx += 1 | |
tmp = l[idx] | |
l[idx] = l[high] | |
l[high] = tmp | |
return idx | |
def quick_sort_inplace(l: List[float]): | |
quick_sort_inplace_impl(l, 0, len(l) - 1) | |
def quick_sort_inplace_impl(l: List[float], low: int, high: int): | |
if low >= high or low < 0: | |
return | |
p = partition(l, low, high) | |
quick_sort_inplace_impl(l, low, p - 1) | |
quick_sort_inplace_impl(l, p + 1, high) | |
def quick_sort_inplace_jit(l: List[float]): | |
quick_sort_inplace_jit_impl(l, 0, len(l) - 1) | |
impl_signature=[ | |
nb.void(nb.typeof(List([1.0])), nb.int64, nb.int64), | |
nb.void(nb.typeof(np.asarray([1.0])), nb.int64, nb.int64), | |
] | |
@nb.jit(impl_signature, nopython=True) | |
def quick_sort_inplace_jit_impl(l: List[float], low: int, high: int): | |
if low >= high or low < 0: | |
return | |
p = partition_jit(l, low, high) | |
quick_sort_inplace_jit_impl(l, low, p - 1) | |
quick_sort_inplace_jit_impl(l, p + 1, high) | |
def sort_with(data, sorter, reference): | |
sorter(data) | |
return data | |
def as_numba_list(l: list) -> List: | |
nl = List() | |
for el in l: | |
nl.append(el) | |
return nl | |
ns = (10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000) | |
runtimes = defaultdict(list) | |
for n in ns: | |
random.seed(42) | |
data = [random.random() for _ in range(n)] | |
ground_truth = sorted(data) | |
t = Timer(2, lambda x: list(x) == ground_truth) | |
runtimes['list.sort(timsort)'].append(t.time(lambda: sort_with(list(data), sorter=lambda x: x.sort(), reference=ground_truth))) | |
runtimes['quicksort-jit(nb.typed.List)'].append(t.time(lambda: sort_with(as_numba_list(data), sorter=quick_sort_inplace_jit, reference=ground_truth))) | |
runtimes['quicksort-jit(np.ndarray)'].append(t.time(lambda: sort_with(np.asarray(data), sorter=quick_sort_inplace_jit, reference=ground_truth))) | |
runtimes['ndarray.sort(quicksort)'].append(t.time(lambda: sort_with(np.asarray(data), sorter=lambda x: x.sort(kind='quicksort'), reference=ground_truth))) | |
runtimes['quicksort(list)'].append(t.time(lambda: sort_with(list(data), sorter=quick_sort_inplace, reference=ground_truth))) | |
runtimes['quicksort(np.ndarray)'].append(t.time(lambda: sort_with(np.asarray(data), sorter=quick_sort_inplace, reference=ground_truth))) | |
for k, v in sorted(runtimes.items()): | |
plt.plot(ns, [rt.mean for rt in v], label=k)#, yerr=[rt.stdev for rt in v]) | |
plt.legend() | |
plt.xscale('log') | |
plt.yscale('log') | |
plt.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment