Skip to content

Instantly share code, notes, and snippets.

@hanslovsky
Last active July 5, 2022 14:35
Show Gist options
  • Save hanslovsky/0297254d70333d3abeecf4df4855bb98 to your computer and use it in GitHub Desktop.
Save hanslovsky/0297254d70333d3abeecf4df4855bb98 to your computer and use it in GitHub Desktop.
Explore quicksort with numba
[packages]
numba = "~=0.55"
matplotlib = "~=3.5"
[requires]
python_version = "3.9"
{
"_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": {}
}
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()
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment