Merge pull request #3 from HideyoshiNakazone/develop

Adds Setup.py and Implements Process Submodule in Cython
This commit is contained in:
2022-12-06 23:10:45 -03:00
committed by GitHub
26 changed files with 900 additions and 402 deletions

9
.gitignore vendored
View File

@@ -1,2 +1,9 @@
*.pyc
build/
.vscode
.idea/
*.pyc
*.so
*.c
yoshi_seals.egg-info/

View File

@@ -6,8 +6,10 @@ name = "pypi"
[packages]
numpy = "*"
pandas = "*"
cython = "*"
[dev-packages]
coverage = "*"
[requires]
python_version = "3.10"

229
Pipfile.lock generated
View File

@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
"sha256": "b883be20349a56066666bdb40b43b81bd8af31c5b981137388600154591c7351"
"sha256": "05244cb1f31b353649158a164e637872ff2c8db06a22b2c25e1275572ca58092"
},
"pipfile-spec": 6,
"requires": {
@@ -16,72 +16,118 @@
]
},
"default": {
"numpy": {
"cython": {
"hashes": [
"sha256:004f0efcb2fe1c0bd6ae1fcfc69cc8b6bf2407e0f18be308612007a0762b4089",
"sha256:09f6b7bdffe57fc61d869a22f506049825d707b288039d30f26a0d0d8ea05164",
"sha256:0ea3f98a0ffce3f8f57675eb9119f3f4edb81888b6874bc1953f91e0b1d4f440",
"sha256:17c0e467ade9bda685d5ac7f5fa729d8d3e76b23195471adae2d6a6941bd2c18",
"sha256:1f27b5322ac4067e67c8f9378b41c746d8feac8bdd0e0ffede5324667b8a075c",
"sha256:22d43376ee0acd547f3149b9ec12eec2f0ca4a6ab2f61753c5b29bb3e795ac4d",
"sha256:2ad3ec9a748a8943e6eb4358201f7e1c12ede35f510b1a2221b70af4bb64295c",
"sha256:301c00cf5e60e08e04d842fc47df641d4a181e651c7135c50dc2762ffe293dbd",
"sha256:39a664e3d26ea854211867d20ebcc8023257c1800ae89773cbba9f9e97bae036",
"sha256:51bf49c0cd1d52be0a240aa66f3458afc4b95d8993d2d04f0d91fa60c10af6cd",
"sha256:78a63d2df1d947bd9d1b11d35564c2f9e4b57898aae4626638056ec1a231c40c",
"sha256:7cd1328e5bdf0dee621912f5833648e2daca72e3839ec1d6695e91089625f0b4",
"sha256:8355fc10fd33a5a70981a5b8a0de51d10af3688d7a9e4a34fcc8fa0d7467bb7f",
"sha256:8c79d7cf86d049d0c5089231a5bcd31edb03555bd93d81a16870aa98c6cfb79d",
"sha256:91b8d6768a75247026e951dce3b2aac79dc7e78622fc148329135ba189813584",
"sha256:94c15ca4e52671a59219146ff584488907b1f9b3fc232622b47e2cf832e94fb8",
"sha256:98dcbc02e39b1658dc4b4508442a560fe3ca5ca0d989f0df062534e5ca3a5c1a",
"sha256:a64403f634e5ffdcd85e0b12c08f04b3080d3e840aef118721021f9b48fc1460",
"sha256:bc6e8da415f359b578b00bcfb1d08411c96e9a97f9e6c7adada554a0812a6cc6",
"sha256:bdc9febce3e68b697d931941b263c59e0c74e8f18861f4064c1f712562903411",
"sha256:c1ba66c48b19cc9c2975c0d354f24058888cdc674bebadceb3cdc9ec403fb5d1",
"sha256:c9f707b5bb73bf277d812ded9896f9512a43edff72712f31667d0a8c2f8e71ee",
"sha256:d5422d6a1ea9b15577a9432e26608c73a78faf0b9039437b075cf322c92e98e7",
"sha256:e5d5420053bbb3dd64c30e58f9363d7a9c27444c3648e61460c1237f9ec3fa14",
"sha256:e868b0389c5ccfc092031a861d4e158ea164d8b7fdbb10e3b5689b4fc6498df6",
"sha256:efd9d3abe5774404becdb0748178b48a218f1d8c44e0375475732211ea47c67e",
"sha256:f8c02ec3c4c4fcb718fdf89a6c6f709b14949408e8cf2a2be5bfa9c49548fd85",
"sha256:ffcf105ecdd9396e05a8e58e81faaaf34d3f9875f137c7372450baa5d77c9a54"
"sha256:061e25151c38f2361bc790d3bcf7f9d9828a0b6a4d5afa56fbed3bd33fb2373a",
"sha256:06be83490c906b6429b4389e13487a26254ccaad2eef6f3d4ee21d8d3a4aaa2b",
"sha256:07d173d3289415bb496e72cb0ddd609961be08fe2968c39094d5712ffb78672b",
"sha256:0bbc27abdf6aebfa1bce34cd92bd403070356f28b0ecb3198ff8a182791d58b9",
"sha256:0ea8267fc373a2c5064ad77d8ff7bf0ea8b88f7407098ff51829381f8ec1d5d9",
"sha256:3875c2b2ea752816a4d7ae59d45bb546e7c4c79093c83e3ba7f4d9051dd02928",
"sha256:39afb4679b8c6bf7ccb15b24025568f4f9b4d7f9bf3cbd981021f542acecd75b",
"sha256:3f85eb2343d20d91a4ea9cf14e5748092b376a64b7e07fc224e85b2753e9070b",
"sha256:40eff7aa26e91cf108fd740ffd4daf49f39b2fdffadabc7292b4b7dc5df879f0",
"sha256:479690d2892ca56d34812fe6ab8f58e4b2e0129140f3d94518f15993c40553da",
"sha256:4a4b03ab483271f69221c3210f7cde0dcc456749ecf8243b95bc7a701e5677e0",
"sha256:513e9707407608ac0d306c8b09d55a28be23ea4152cbd356ceaec0f32ef08d65",
"sha256:5514f3b4122cb22317122a48e175a7194e18e1803ca555c4c959d7dfe68eaf98",
"sha256:5ba622326f2862f9c1f99ca8d47ade49871241920a352c917e16861e25b0e5c3",
"sha256:63b79d9e1f7c4d1f498ab1322156a0d7dc1b6004bf981a8abda3f66800e140cd",
"sha256:656dc5ff1d269de4d11ee8542f2ffd15ab466c447c1f10e5b8aba6f561967276",
"sha256:67fdd2f652f8d4840042e2d2d91e15636ba2bcdcd92e7e5ffbc68e6ef633a754",
"sha256:79e3bab19cf1b021b613567c22eb18b76c0c547b9bc3903881a07bfd9e7e64cf",
"sha256:856d2fec682b3f31583719cb6925c6cdbb9aa30f03122bcc45c65c8b6f515754",
"sha256:8669cadeb26d9a58a5e6b8ce34d2c8986cc3b5c0bfa77eda6ceb471596cb2ec3",
"sha256:8733cf4758b79304f2a4e39ebfac5e92341bce47bcceb26c1254398b2f8c1af7",
"sha256:97335b2cd4acebf30d14e2855d882de83ad838491a09be2011745579ac975833",
"sha256:afbce249133a830f121b917f8c9404a44f2950e0e4f5d1e68f043da4c2e9f457",
"sha256:b0595aee62809ba353cebc5c7978e0e443760c3e882e2c7672c73ffe46383673",
"sha256:b6da3063c5c476f5311fd76854abae6c315f1513ef7d7904deed2e774623bbb9",
"sha256:c8e8025f496b5acb6ba95da2fb3e9dacffc97d9a92711aacfdd42f9c5927e094",
"sha256:cddc47ec746a08603037731f5d10aebf770ced08666100bd2cdcaf06a85d4d1b",
"sha256:cdf10af3e2e3279dc09fdc5f95deaa624850a53913f30350ceee824dc14fc1a6",
"sha256:d968ffc403d92addf20b68924d95428d523436adfd25cf505d427ed7ba3bee8b",
"sha256:dbee03b8d42dca924e6aa057b836a064c769ddfd2a4c2919e65da2c8a362d528",
"sha256:e1958e0227a4a6a2c06fd6e35b7469de50adf174102454db397cec6e1403cce3",
"sha256:e6ffa08aa1c111a1ebcbd1cf4afaaec120bc0bbdec3f2545f8bb7d3e8e77a1cd",
"sha256:e83228e0994497900af954adcac27f64c9a57cd70a9ec768ab0cb2c01fd15cf1",
"sha256:ea1dcc07bfb37367b639415333cfbfe4a93c3be340edf1db10964bc27d42ed64",
"sha256:eca3065a1279456e81c615211d025ea11bfe4e19f0c5650b859868ca04b3fcbd",
"sha256:ed087eeb88a8cf96c60fb76c5c3b5fb87188adee5e179f89ec9ad9a43c0c54b3",
"sha256:eeb475eb6f0ccf6c039035eb4f0f928eb53ead88777e0a760eccb140ad90930b",
"sha256:eefd2b9a5f38ded8d859fe96cc28d7d06e098dc3f677e7adbafda4dcdd4a461c",
"sha256:f3fd44cc362eee8ae569025f070d56208908916794b6ab21e139cea56470a2b3",
"sha256:f9944013588a3543fca795fffb0a070a31a243aa4f2d212f118aa95e69485831"
],
"index": "pypi",
"version": "==1.23.3"
"version": "==0.29.32"
},
"numpy": {
"hashes": [
"sha256:01dd17cbb340bf0fc23981e52e1d18a9d4050792e8fb8363cecbf066a84b827d",
"sha256:06005a2ef6014e9956c09ba07654f9837d9e26696a0470e42beedadb78c11b07",
"sha256:09b7847f7e83ca37c6e627682f145856de331049013853f344f37b0c9690e3df",
"sha256:0aaee12d8883552fadfc41e96b4c82ee7d794949e2a7c3b3a7201e968c7ecab9",
"sha256:0cbe9848fad08baf71de1a39e12d1b6310f1d5b2d0ea4de051058e6e1076852d",
"sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a",
"sha256:33161613d2269025873025b33e879825ec7b1d831317e68f4f2f0f84ed14c719",
"sha256:5039f55555e1eab31124a5768898c9e22c25a65c1e0037f4d7c495a45778c9f2",
"sha256:522e26bbf6377e4d76403826ed689c295b0b238f46c28a7251ab94716da0b280",
"sha256:56e454c7833e94ec9769fa0f86e6ff8e42ee38ce0ce1fa4cbb747ea7e06d56aa",
"sha256:58f545efd1108e647604a1b5aa809591ccd2540f468a880bedb97247e72db387",
"sha256:5e05b1c973a9f858c74367553e236f287e749465f773328c8ef31abe18f691e1",
"sha256:7903ba8ab592b82014713c491f6c5d3a1cde5b4a3bf116404e08f5b52f6daf43",
"sha256:8969bfd28e85c81f3f94eb4a66bc2cf1dbdc5c18efc320af34bffc54d6b1e38f",
"sha256:92c8c1e89a1f5028a4c6d9e3ccbe311b6ba53694811269b992c0b224269e2398",
"sha256:9c88793f78fca17da0145455f0d7826bcb9f37da4764af27ac945488116efe63",
"sha256:a7ac231a08bb37f852849bbb387a20a57574a97cfc7b6cabb488a4fc8be176de",
"sha256:abdde9f795cf292fb9651ed48185503a2ff29be87770c3b8e2a14b0cd7aa16f8",
"sha256:af1da88f6bc3d2338ebbf0e22fe487821ea4d8e89053e25fa59d1d79786e7481",
"sha256:b2a9ab7c279c91974f756c84c365a669a887efa287365a8e2c418f8b3ba73fb0",
"sha256:bf837dc63ba5c06dc8797c398db1e223a466c7ece27a1f7b5232ba3466aafe3d",
"sha256:ca51fcfcc5f9354c45f400059e88bc09215fb71a48d3768fb80e357f3b457e1e",
"sha256:ce571367b6dfe60af04e04a1834ca2dc5f46004ac1cc756fb95319f64c095a96",
"sha256:d208a0f8729f3fb790ed18a003f3a57895b989b40ea4dce4717e9cf4af62c6bb",
"sha256:dbee87b469018961d1ad79b1a5d50c0ae850000b639bcb1b694e9981083243b6",
"sha256:e9f4c4e51567b616be64e05d517c79a8a22f3606499941d97bb76f2ca59f982d",
"sha256:f063b69b090c9d918f9df0a12116029e274daf0181df392839661c4c7ec9018a",
"sha256:f9a909a8bae284d46bbfdefbdd4a262ba19d3bc9921b1e76126b1d21c3c34135"
],
"index": "pypi",
"version": "==1.23.5"
},
"pandas": {
"hashes": [
"sha256:0d8d7433d19bfa33f11c92ad9997f15a902bda4f5ad3a4814a21d2e910894484",
"sha256:1642fc6138b4e45d57a12c1b464a01a6d868c0148996af23f72dde8d12486bbc",
"sha256:171cef540bfcec52257077816a4dbbac152acdb8236ba11d3196ae02bf0959d8",
"sha256:1b82ccc7b093e0a93f8dffd97a542646a3e026817140e2c01266aaef5fdde11b",
"sha256:1d34b1f43d9e3f4aea056ba251f6e9b143055ebe101ed04c847b41bb0bb4a989",
"sha256:207d63ac851e60ec57458814613ef4b3b6a5e9f0b33c57623ba2bf8126c311f8",
"sha256:2504c032f221ef9e4a289f5e46a42b76f5e087ecb67d62e342ccbba95a32a488",
"sha256:33a9d9e21ab2d91e2ab6e83598419ea6a664efd4c639606b299aae8097c1c94f",
"sha256:3ee61b881d2f64dd90c356eb4a4a4de75376586cd3c9341c6c0fcaae18d52977",
"sha256:41aec9f87455306496d4486df07c1b98c15569c714be2dd552a6124cd9fda88f",
"sha256:4e30a31039574d96f3d683df34ccb50bb435426ad65793e42a613786901f6761",
"sha256:5cc47f2ebaa20ef96ae72ee082f9e101b3dfbf74f0e62c7a12c0b075a683f03c",
"sha256:62e61003411382e20d7c2aec1ee8d7c86c8b9cf46290993dd8a0a3be44daeb38",
"sha256:73844e247a7b7dac2daa9df7339ecf1fcf1dfb8cbfd11e3ffe9819ae6c31c515",
"sha256:85a516a7f6723ca1528f03f7851fa8d0360d1d6121cf15128b290cf79b8a7f6a",
"sha256:86d87279ebc5bc20848b4ceb619073490037323f80f515e0ec891c80abad958a",
"sha256:8a4fc04838615bf0a8d3a03ed68197f358054f0df61f390bcc64fbe39e3d71ec",
"sha256:8e8e5edf97d8793f51d258c07c629bd49d271d536ce15d66ac00ceda5c150eb3",
"sha256:947ed9f896ee61adbe61829a7ae1ade493c5a28c66366ec1de85c0642009faac",
"sha256:a68a9b9754efff364b0c5ee5b0f18e15ca640c01afe605d12ba8b239ca304d6b",
"sha256:c76f1d104844c5360c21d2ef0e1a8b2ccf8b8ebb40788475e255b9462e32b2be",
"sha256:c7f38d91f21937fe2bec9449570d7bf36ad7136227ef43b321194ec249e2149d",
"sha256:de34636e2dc04e8ac2136a8d3c2051fd56ebe9fd6cd185581259330649e73ca9",
"sha256:e178ce2d7e3b934cf8d01dc2d48d04d67cb0abfaffdcc8aa6271fd5a436f39c8",
"sha256:e252a9e49b233ff96e2815c67c29702ac3a062098d80a170c506dff3470fd060",
"sha256:e9c5049333c5bebf993033f4bf807d163e30e8fada06e1da7fa9db86e2392009",
"sha256:fc987f7717e53d372f586323fff441263204128a1ead053c1b98d7288f836ac9"
"sha256:0183cb04a057cc38fde5244909fca9826d5d57c4a5b7390c0cc3fa7acd9fa883",
"sha256:1fc87eac0541a7d24648a001d553406f4256e744d92df1df8ebe41829a915028",
"sha256:220b98d15cee0b2cd839a6358bd1f273d0356bf964c1a1aeb32d47db0215488b",
"sha256:2552bffc808641c6eb471e55aa6899fa002ac94e4eebfa9ec058649122db5824",
"sha256:315e19a3e5c2ab47a67467fc0362cb36c7c60a93b6457f675d7d9615edad2ebe",
"sha256:344021ed3e639e017b452aa8f5f6bf38a8806f5852e217a7594417fb9bbfa00e",
"sha256:375262829c8c700c3e7cbb336810b94367b9c4889818bbd910d0ecb4e45dc261",
"sha256:457d8c3d42314ff47cc2d6c54f8fc0d23954b47977b2caed09cd9635cb75388b",
"sha256:4aed257c7484d01c9a194d9a94758b37d3d751849c05a0050c087a358c41ad1f",
"sha256:530948945e7b6c95e6fa7aa4be2be25764af53fba93fe76d912e35d1c9ee46f5",
"sha256:5ae7e989f12628f41e804847a8cc2943d362440132919a69429d4dea1f164da0",
"sha256:71f510b0efe1629bf2f7c0eadb1ff0b9cf611e87b73cd017e6b7d6adb40e2b3a",
"sha256:73f219fdc1777cf3c45fde7f0708732ec6950dfc598afc50588d0d285fddaefc",
"sha256:8092a368d3eb7116e270525329a3e5c15ae796ccdf7ccb17839a73b4f5084a39",
"sha256:82ae615826da838a8e5d4d630eb70c993ab8636f0eff13cb28aafc4291b632b5",
"sha256:9608000a5a45f663be6af5c70c3cbe634fa19243e720eb380c0d378666bc7702",
"sha256:a40dd1e9f22e01e66ed534d6a965eb99546b41d4d52dbdb66565608fde48203f",
"sha256:b4f5a82afa4f1ff482ab8ded2ae8a453a2cdfde2001567b3ca24a4c5c5ca0db3",
"sha256:c009a92e81ce836212ce7aa98b219db7961a8b95999b97af566b8dc8c33e9519",
"sha256:c218796d59d5abd8780170c937b812c9637e84c32f8271bbf9845970f8c1351f",
"sha256:cc3cd122bea268998b79adebbb8343b735a5511ec14efb70a39e7acbc11ccbdc",
"sha256:d0d8fd58df5d17ddb8c72a5075d87cd80d71b542571b5f78178fb067fa4e9c72",
"sha256:e18bc3764cbb5e118be139b3b611bc3fbc5d3be42a7e827d1096f46087b395eb",
"sha256:e2b83abd292194f350bb04e188f9379d36b8dfac24dd445d5c87575f3beaf789",
"sha256:e7469271497960b6a781eaa930cba8af400dd59b62ec9ca2f4d31a19f2f91090",
"sha256:e9dbacd22555c2d47f262ef96bb4e30880e5956169741400af8b306bbb24a273",
"sha256:f6257b314fc14958f8122779e5a1557517b0f8e500cfb2bd53fa1f75a8ad0af2"
],
"index": "pypi",
"version": "==1.5.0"
"version": "==1.5.2"
},
"python-dateutil": {
"hashes": [
@@ -93,10 +139,10 @@
},
"pytz": {
"hashes": [
"sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197",
"sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5"
"sha256:222439474e9c98fced559f1709d89e6c9cbf8d79c794ff3eb9f8800064291427",
"sha256:e89512406b793ca39f5971bc999cc538ce125c0e51c27941bef4568b460095e2"
],
"version": "==2022.2.1"
"version": "==2022.6"
},
"six": {
"hashes": [
@@ -107,5 +153,62 @@
"version": "==1.16.0"
}
},
"develop": {}
"develop": {
"coverage": {
"hashes": [
"sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79",
"sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a",
"sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f",
"sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a",
"sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa",
"sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398",
"sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba",
"sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d",
"sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf",
"sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b",
"sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518",
"sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d",
"sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795",
"sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2",
"sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e",
"sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32",
"sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745",
"sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b",
"sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e",
"sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d",
"sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f",
"sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660",
"sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62",
"sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6",
"sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04",
"sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c",
"sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5",
"sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef",
"sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc",
"sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae",
"sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578",
"sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466",
"sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4",
"sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91",
"sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0",
"sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4",
"sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b",
"sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe",
"sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b",
"sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75",
"sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b",
"sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c",
"sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72",
"sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b",
"sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f",
"sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e",
"sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53",
"sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3",
"sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84",
"sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987"
],
"index": "pypi",
"version": "==6.5.0"
}
}
}

20
makefile Normal file
View File

@@ -0,0 +1,20 @@
WORK=./yoshi_seals
PROCESS=$(WORK)/process
SHARED=$(WORK)/shared
SETUP_CYTHON=setup_cython.py
OBJS= $(PROCESS)/process.pyx $(SHARED)/array.pyx $(SETUP_CYTHON)
PYTHON?=python
PARALLEL?=$(shell ${PYTHON} -c 'import sys; print("-j5" if sys.version_info >= (3,5) else "")' || true)
all: $(OBJS)
python3 $(SETUP_CYTHON) build_ext --inplace $(PARALLEL) && \
rm -r build
clean:
rm $(WORK)/**/*.cpython-310-x86_64-linux-gnu.so
rm $(WORK)/**/*.c

35
setup.py Normal file
View File

@@ -0,0 +1,35 @@
import setuptools
import os
__name = "yoshi_seals"
__version_sufix = os.environ.get('VERSION_SUFIX')
if not __version_sufix:
__version_sufix = "dev"
__version = f"2.0.{__version_sufix}"
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name=__name,
version=__version,
author="Vitor Hideyoshi",
author_email="vitor.h.n.batista@gmail.com",
description="Numeric Calculus python module in the topic of Linear Algebra",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/HideyoshiNakazone/Seals-NumericCalculus.git",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
"Operating System :: OS Independent"
],
python_requires='>=3.6',
install_requires=[
'numpy',
'pandas',
],
)

29
setup_cython.py Normal file
View File

@@ -0,0 +1,29 @@
import numpy
from Cython.Build import cythonize
from setuptools import Extension, setup
ext_modules = [
Extension(
"yoshi_seals.shared.array",
[
"yoshi_seals/shared/array.pyx",
],
extra_compile_args=["-O3", "-fopenmp"],
extra_link_args=['-fopenmp'],
define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")],
),
Extension(
"yoshi_seals.process.process",
[
"yoshi_seals/process/process.pyx",
],
extra_compile_args=["-O3", "-fopenmp"],
extra_link_args=['-fopenmp'],
define_macros=[("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")]
),
]
setup(
ext_modules=cythonize(ext_modules),
include_dirs=[numpy.get_include()]
)

0
test/__init__.py Normal file
View File

90
test/test_process.py Normal file
View File

@@ -0,0 +1,90 @@
from yoshi_seals import process as ps
import numpy as np
from numpy import testing as npt
import unittest
class TestProcess(unittest.TestCase):
def test_det(self):
a = np.array(([1., 0.], [0., 1.]))
a_det = ps.det(a)
self.assertEqual(a_det, 1)
def test_inverse(self):
a = np.array(([1., 0.], [0., 1.]))
a_inv = ps.inverse(a)
npt.assert_array_equal(a, a_inv)
def test_hstack_returns_stacked_array(self):
a = np.array(([1., ], [1., ]))
b = np.array(([1., ], [1., ]))
stacked = ps.hstack(a, b)
expected_stacked_array = np.array(([1., 1.], [1., 1.]))
npt.assert_array_equal(stacked, expected_stacked_array)
def test_hstack_throws_exception(self):
a = np.array(([1., ], [1., ]))
b = np.array(([1., ]))
with self.assertRaises(ValueError):
ps.hstack(a, b)
def test_vstack_returns_stacked_array(self):
a = np.array(([[1., 1.]]))
b = np.array(([[1., 1.]]))
stacked = ps.vstack(a, b)
expected_stacked_array = np.array(([1., 1.], [1., 1.]))
npt.assert_array_equal(stacked, expected_stacked_array)
def test_vstack_throws_exception(self):
a = np.array(([[1., 1.]]))
b = np.array(([[1.]]))
with self.assertRaises(ValueError):
ps.vstack(a, b)
def test_gauss(self):
a = np.array(([4., 10., 8.], [10., 26., 26], [8., 26., 61.]))
b = np.array(([44.], [128.], [214.]))
matrix = ps.gauss(a, b)
expected_matrix = np.array([[-8.], [6.], [2.]])
npt.assert_almost_equal(matrix, expected_matrix)
def test_cholesky(self):
a = np.array(([4., 10., 8.], [10., 26., 26], [8., 26., 61.]))
b = np.array(([44.], [128.], [214.]))
matrix = ps.cholesky(a, b)
expected_matrix = np.array([[-8.], [6.], [2.]])
npt.assert_almost_equal(matrix, expected_matrix)
def test_decomposition(self):
a = np.array(([4., 10., 8.], [10., 26., 26], [8., 26., 61.]))
b = np.array(([44.], [128.], [214.]))
matrix = ps.decomposition(a, b)
expected_matrix = np.array([[-8.], [6.], [2.]])
npt.assert_almost_equal(matrix, expected_matrix)
def test_cramer(self):
a = np.array(([4., 10., 8.], [10., 26., 26], [8., 26., 61.]))
b = np.array(([44.], [128.], [214.]))
matrix = ps.cramer(a, b)
expected_matrix = np.array([[-8.], [6.], [2.]])
npt.assert_almost_equal(matrix, expected_matrix)

View File

@@ -1,48 +0,0 @@
# Seals - Program made for educational intent, can be freely distributed
# and can be used for economical intent. I will not take legal actions
# unless my intelectual propperty, the code, is stolen or change without permission.
# Copyright (C) 2020 VItor Hideyoshi Nakazone Batista
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as published by
# the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import numpy as np
def matrix(matrix: np.ndarray) -> np.ndarray:
i = 0
while (i < matrix.shape[0]):
j = 0
while (j < matrix.shape[1]):
matrix[i][j] = float(input('Insira o elemento {}x{}: '.format((i+1),(j+1))))
j += 1
i += 1
return matrix
def vector(vector: np.ndarray) -> np.ndarray:
j=0
while (j < vector.shape[0]):
vector[j] = float(input('Insira o elemento b{}: '.format((j+1))))
j += 1
return vector

View File

@@ -1,239 +0,0 @@
# Seals - Program made for educational intent, can be freely distributed
# and can be used for economical intent. I will not take legal actions
# unless my intelectual propperty, the code, is stolen or change without permission.
# Copyright (C) 2020 VItor Hideyoshi Nakazone Batista
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as published by
# the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import numpy as np
import math
def identity(matrix: np.ndarray) -> np.ndarray:
i = 0
while (i < matrix.shape[0]):
j = 0
while (j < matrix.shape[0]):
if (i == j):
matrix[i][j] = 1
elif (i != j):
matrix[i][j] = 0
j += 1
i += 1
return matrix
def gauss(a: np.ndarray) -> np.ndarray:
for i in range(a.shape[0]):
k = i + 1
while (k<a.shape[0]):
l = 1
while (a[i][i] == 0 and l < a.shape[0]):
temp = a[i].copy()
a[i] = a[i+l]
a[i+l] = temp
l += 1
if (a[k][i] == 0):
while (k < a.shape[0]):
k += 1
else:
a[k] = a[k] - (a[k][i]/a[i][i])*a[i]
k += 1
i += 1
x = np.zeros(a.shape[0])
for j in reversed(range(x.shape[0])):
suma = 0
for k in range (j,a.shape[0]):
suma += a[j][k]*x[k]
x[j] = (a[j][a.shape[0]] - suma)/a[j][j]
return x
def inverse(matrix: np.ndarray) -> np.ndarray:
matrix = np.hstack(matrix,np.identity(matrix.shape[0]))
i = 0
k = 0
while (i < matrix.shape[0]):
if (matrix[i][i] == 0):
n = i
while (matrix[i][i] == 0) and (n < matrix.shape[0]):
temp = matrix[i].copy()
matrix[i] = matrix[n]
matrix[n] = temp
n += 1
while (k < matrix.shape[0]):
if (k == i) or (matrix[k][i] == 0) or (matrix[i][i] == 0):
k += 1
else:
mult = matrix[k][i]/matrix[i][i]
matrix[k] = matrix[k] - mult*matrix[i]
k += 1
i += 1
k = 0
i = 0
while ((i) < matrix.shape[0]) and (matrix[i][i] != 0):
matrix[i] = matrix[i]/matrix[i][i]
i += 1
return matrix[:,(matrix.shape[0]):]
def cholesky(A: np.ndarray, b: np.ndarray) -> np.ndarray:
g = np.zeros((A.shape))
i = 0
j = 0
while j < A.shape[1]:
while i < A.shape[0]:
if i == 0 and j == 0:
g[i][j] = math.sqrt(A[0][0])
elif j == 0:
g[i][j] = A[i][0]/g[0][0]
elif i == j:
k = 0
theta = 0
while k < i:
theta += g[i][k]**2
k += 1
g[i][j] = math.sqrt(A[i][i] - theta)
else:
k = 0
theta = 0
while k < j:
theta += g[i][k]*g[j][k]
k += 1
g[i][j] = (A[i][j] - theta)/g[j][j]
i += 1
j += 1
i = j
y = (inverse(g)).dot(b)
x = (inverse(g.T)).dot(y)
return x
def decomposition(U: np.ndarray, b: np.ndarray) -> np.ndarray:
L = identity(np.zeros(U.shape))
i = 0
k = 0
while (i < U.shape[0]):
k = 0
if (U[i][i] == 0):
n = i
while (U[i][i] == 0) and (n < U.shape[0]):
temp = U[i].copy()
U[i] = U[n]
U[n] = temp
n += 1
while (k < U.shape[0]):
if (k <= i) or (U[i][i] == 0):
k += 1
else:
L[k][i] = U[k][i]/U[i][i]
U[k] = U[k] - L[k][i]*U[i]
k += 1
i += 1
y = (inverse(L)).dot(b)
x = (inverse(U)).dot(y)
return x
def cramer(A: np.ndarray, b: np.ndarray) -> np.ndarray:
x = np.vstack(np.zeros(b.shape))
k = 0
while (k < A.shape[0]):
temp = A.copy()
temp[:,k] = b
x[k] = np.linalg.det(temp)/np.linalg.det(A)
k += 1
return x

0
yoshi_seals/__init__.pxd Normal file
View File

View File

@@ -19,23 +19,21 @@
import numpy as np
def eigen(a: np.ndarray) -> np.ndarray:
k = 0
def eigen(a: np.ndarray) -> np.ndarray:
l = np.ones((a.shape[0]))
at = a # variavel temporaria para A
b = np.random.rand(a.shape[0], a.shape[1])
while (k < at.shape[0]):
for k in range(at.shape[0]):
u = np.random.rand(at.shape[0], 1)
u = u / max(u.min(), u.max(), key=abs)
ctrl = 0
while (ctrl != l[k]):
while ctrl != l[k]:
ctrl = l[k]
u = at.dot(u)
l[k] = max(u.min(), u.max(), key=abs)
@@ -55,10 +53,9 @@ def eigen(a: np.ndarray) -> np.ndarray:
i = 0
while (u[i] == 0):
while u[i] == 0:
i += 1
at = at - (1 / u[i]) * u * at[i]
k += 1
return l, b

View File

@@ -17,9 +17,21 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from .process import identity
from .process import gauss
from .process import inverse
from .process import cholesky
from .process import decomposition
from .process import cramer
import numpy as np
def matrix(a: np.ndarray) -> np.ndarray:
for i in range(a.shape[0]):
for j in range(a.shape[1]):
a[i][j] = float(input(f"Insert the element a{i+1}x{j+1}: "))
return a
def vector(v: np.ndarray) -> np.ndarray:
for j in range(v.shape[0]):
v[j] = float(input(f"Insert the element b{j+1}: "))
return v

View File

@@ -0,0 +1,35 @@
import yoshi_seals.process.process as ps
import numpy as np
def det(a: np.ndarray) -> float:
return ps.det(a)
def inverse(a: np.ndarray) -> np.ndarray:
return ps.inverse(a)
def hstack(a: np.ndarray, b: np.ndarray) -> np.ndarray:
return ps.hstack(a, b)
def vstack(a: np.ndarray, b: np.ndarray) -> np.ndarray:
return ps.vstack(a, b)
def gauss(a: np.ndarray, b: np.ndarray) -> np.ndarray:
return ps.gauss(a, b)
def cholesky(a: np.ndarray, b: np.ndarray) -> np.ndarray:
return ps.cholesky(a, b)
def decomposition(a: np.ndarray, b: np.ndarray) -> np.ndarray:
return ps.decomposition(a, b)
def cramer(a: np.ndarray, b: np.ndarray) -> np.ndarray:
return ps.cramer(a, b)

View File

@@ -0,0 +1,193 @@
# Seals - Program made for educational intent, can be freely distributed
# and can be used for economical intent. I will not take legal actions
# unless my intelectual propperty, the code, is stolen or change without permission.
# Copyright (C) 2020 VItor Hideyoshi Nakazone Batista
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as published by
# the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from yoshi_seals.shared cimport array
from libc.stdlib cimport malloc
from libc cimport math
cimport numpy as np
import numpy as np
cpdef double det(double[::,::] a):
return array.det(a)
cpdef np.ndarray[np.float64_t, ndim=2] inverse(double[::,::] matrix):
return np.asarray(array.inverse(matrix))
cpdef np.ndarray[np.float64_t, ndim=2] hstack(double[::,::] a, double[::,::] b):
return np.asarray(array.hstack(a, b))
cpdef np.ndarray[np.float64_t, ndim=2] vstack(double[::,::] a, double[::,::] b):
return np.asarray(array.vstack(a, b))
cpdef np.ndarray[np.float64_t, ndim=2] gauss(double[::,::] A, double[::,::] b):
cdef:
int i = 0, j = 0, k = 0, l = 0, reversed_index = 0
double[:] tmp
double sum_var
double[::,::] a = array.hstack(A,b)
double *c_pointer = <double *> malloc(A.shape[1]*sizeof(double))
double[:] x = <double[:A.shape[1]]>c_pointer
if not c_pointer:
raise MemoryError()
for i in range(A.shape[0]):
l = 1
while i < A.shape[1] and a[i][i] == 0 and (l + i) < A.shape[0]:
tmp = a[i]
a[i] = a[i+l]
a[i+l] = tmp
l += 1
for k in range(i + 1, A.shape[1]):
if a[k][i] != 0:
a[k] = array.subtract(a[k],array.mult(a[i], (a[k][i]/a[i][i])))
for j in range(A.shape[1]):
sum_var = 0
reversed_index = (A.shape[1] - 1) - j
for k in range(reversed_index,A.shape[1]):
sum_var += a[reversed_index][k]*x[k]
x[reversed_index] = (a[reversed_index][A.shape[1]] - sum_var)/a[reversed_index][reversed_index]
return np.asarray(x).reshape(b.shape[0],b.shape[1])
cpdef np.ndarray[np.float64_t, ndim=2] cholesky(double[:,:] A, double[:,:] b):
cdef:
int i = 0, j = 0, size_x = A.shape[0], size_y = A.shape[1]
double *c_pointer = <double *> malloc(size_x*size_y*sizeof(double))
double[::,::] g = <double[:size_x,:size_y]>c_pointer, y, x
while j < size_y:
while i < size_x:
if i == 0 and j == 0:
g[i][j] = math.sqrt(A[0][0])
elif j == 0:
g[i][j] = A[i][0] / g[0][0]
elif i == j:
k = 0
theta = 0
while k < i:
theta += g[i][k] ** 2
k += 1
g[i][j] = math.sqrt(A[i][i] - theta)
else:
k = 0
theta = 0
while k < j:
theta += g[i][k] * g[j][k]
k += 1
g[i][j] = (A[i][j] - theta) / g[j][j]
i += 1
j += 1
i = j
y = array.dot(array.inverse(g), b)
x = array.dot(array.inverse(array.transpose(g)), y)
return np.asarray(x)
cpdef np.ndarray[np.float64_t, ndim=2] decomposition(double[::,::] U, double[::,::] b):
cdef:
int i = 0, k = 0
double[::,::] L = array.identity(U.shape[0]), y, x
for i in range(U.shape[0]):
if U[i][i] == 0:
n = i
while (U[i][i] == 0) and (n < U.shape[0]):
temp = U[i].copy()
U[i] = U[n]
U[n] = temp
n += 1
for k in range(U.shape[0]):
if (k > i) and (U[i][i] != 0):
L[k][i] = U[k][i] / U[i][i]
U[k] = array.subtract(U[k], array.mult(U[i], L[k][i]))
y = array.dot(array.inverse(L), b)
x = array.dot(array.inverse(U), y)
return np.asarray(x)
cpdef np.ndarray[np.float64_t, ndim=2] cramer(double[:,:] A, double[:,:] b):
cdef:
int size_a_y = A.shape[0], size_a_x = A.shape[1]
int size_b_y = b.shape[0], size_b_x = b.shape[1]
int k = 0
double *c_pointer_tmp = <double *> malloc(size_a_x*size_a_y*sizeof(double))
double[::,::] tmp = <double[:size_a_y,:size_a_x]>c_pointer_tmp
double *c_pointer_x = <double *> malloc(size_b_x*size_b_y*sizeof(double))
double[::,::] x = <double[:size_b_y,:size_b_x]>c_pointer_x
if size_a_y != size_b_y:
raise ValueError("The matrices must have the same height.")
if size_b_x != 1:
raise ValueError("The b matrix must be a column matrix.")
for k in range(size_a_x):
tmp = A.copy()
for i in range(size_a_y):
tmp[i, k] = b[i,0]
x[k,0] = np.linalg.det(tmp) / np.linalg.det(A)
k += 1
return np.asarray(x)

View File

@@ -20,26 +20,13 @@
import numpy as np
import pandas as pd
def numpy(path:str, sep: str = None, decimal: str = None) -> np.ndarray:
if sep is None:
sep = ","
if decimal is None:
decimal = "."
def numpy(path: str, sep: str = ",", decimal: str = ".") -> np.ndarray:
df = pd.read_csv(path, sep=sep, decimal=decimal, header=None)
array = df.to_numpy()
return array
def pandas(path: str, sep: str = None, decimal: str = None) -> pd.DataFrame:
if sep is None:
sep = ","
if decimal is None:
decimal = "."
def pandas(path: str, sep: str = ",", decimal: str = ".") -> pd.DataFrame:
return pd.read_csv(path, sep=sep, decimal=decimal)

View File

View File

View File

@@ -0,0 +1,25 @@
cdef double[::] mult(double[::] array, double value)
cdef double[::] div(double[::] array, double value)
cdef double[::] addition(double[::] a, double[::] b)
cdef double[::] subtract(double[::] a, double[::] b)
cdef double[::,:] hstack(double[:,:] a, double[:,:] b)
cdef double[::,::] vstack(double[:,:] a, double[:,:] b)
cdef double[::,::] identity(int size)
cdef double[:,:] zeros((int, int) sizes)
cdef double[:,:] ones((int, int) sizes)
cdef double[:,:] inverse(double[:,:] a)
cdef double[:,:] transpose(double[:,:] a)
cdef double[:,:] dot(double[:,:] a, double[:,:] b)
cdef double det(double[::,::] a)

View File

@@ -0,0 +1,251 @@
from libc.stdlib cimport malloc
cimport numpy as np
import numpy as np
cdef double[::] mult(double[::] array, double value):
cdef int size = array.shape[0], i = 0
cdef:
double *c_pointer = <double *> malloc(size*sizeof(double))
double[::] mult_array = <double[:size]>c_pointer
for i in range(size):
mult_array[i] = array[i]*value
return mult_array
cdef double[::] div(double[::] array, double value):
cdef int size = array.shape[0], i = 0
cdef:
double *c_pointer = <double *> malloc(size*sizeof(double))
double[::] mult_array = <double[:size]>c_pointer
for i in range(size):
mult_array[i] = array[i]/value
return mult_array
cdef double[::] addition(double[::] a, double[::] b):
cdef int size_a = a.shape[0], size_b = b.shape[0], i = 0
cdef double *c_pointer = <double *> malloc(size_a*sizeof(double))
cdef double[::] mult_array = <double[:size_a]>c_pointer
for i in range(size_a):
mult_array[i] = a[i] + b[i]
return mult_array
cdef double[::] subtract(double[::] a, double[::] b):
cdef int size_a = a.shape[0], size_b = b.shape[0], i = 0
cdef double *c_pointer = <double *> malloc(size_a*sizeof(double))
cdef double[::] mult_array = <double[:size_a]>c_pointer
for i in range(size_a):
mult_array[i] = a[i] - b[i]
return mult_array
cdef double[::,::] identity(int size):
cdef int i = 0
cdef double *c_pointer = <double *> malloc(size*size*sizeof(double))
cdef double[::,:] matrix = <double[:size,:size]>c_pointer
for i in range(size):
for j in range(size):
if i == j:
matrix[i][j] = 1
elif i != j:
matrix[i][j] = 0
return matrix
cdef double[:,:] zeros((int, int) size):
cdef int i = 0, j = 0
cdef:
double *c_pointer = <double *> malloc(size[0]*size[1]*sizeof(double))
double[:,:] id_array = <double[:size[0],:size[1]]>c_pointer
if not c_pointer:
raise MemoryError()
for i in range(size[0]):
for j in range(size[1]):
id_array[i,j] = 0.0
return id_array
cdef double[:,:] ones((int, int) size):
cdef int i = 0, j = 0
cdef:
double *c_pointer = <double *> malloc(size[0]*size[1]*sizeof(double))
double[:,:] id_array = <double[:size[0],:size[1]]>c_pointer
for i in range(size[0]):
for j in range(size[1]):
id_array[i,j] = 1.0
return id_array
cdef double[:,:] hstack(double[:,:] a, double[:,:] b):
cdef:
int i, j
int a_x = a.shape[0], a_y = a.shape[1]
int b_x = b.shape[0], b_y = b.shape[1]
int size_x = a_x, size_y = a_y + b_y
double *c_pointer = <double *> malloc(size_x*size_y*sizeof(double))
double[::,::] matrix = <double[:size_x,:size_y]>c_pointer
if a_x != b_x:
raise ValueError("Cannot hstack matrices")
for i in range(size_x):
for j in range(size_y):
if j < a_y:
matrix[i,j] = a[i,j]
else:
matrix[i,j] = b[i,j-a_y]
return matrix
cdef double[:,:] vstack(double[:,:] a, double[:,:] b):
cdef:
int i, j
int a_x = a.shape[0], b_x = b.shape[0]
int a_y = a.shape[1], b_y = b.shape[1]
int size_x = a_x + b_x, size_y = a_y
double *c_pointer = <double *> malloc(size_x*size_y*sizeof(double))
double[:,:] matrix = <double[:size_x,:size_y]>c_pointer
if a_y != b_y:
raise ValueError("Cannot vstack matrices")
for i in range(size_x):
for j in range(size_y,):
if i < a_x:
matrix[i,j] = a[i,j]
else:
matrix[i,j] = b[i-a_x, j]
return matrix
cdef double[:,:] inverse(double[:,:] a):
cdef:
int i = 0, k = 0, n, size = a.shape[0]
double[:,:] matrix = hstack(a,identity(size))
double mult_const
double[:] tmp
if a.shape[0] != a.shape[1]:
raise ValueError("Non Quadratic Matrix doesn't have an Inverse Matrix")
for i in range(size):
if matrix[i][i] == 0:
n = i
while (matrix[i][i] == 0) and (n < size):
tmp = matrix[i]
matrix[i] = matrix[n].copy()
matrix[n] = tmp
n += 1
for k in range(size):
if (k != i) and (matrix[i][i] != 0):
mult_const = matrix[k][i]/matrix[i][i]
matrix[k] = subtract(matrix[k], mult(matrix[i], mult_const))
for k in range(size):
if matrix[k][k] != 0:
matrix[k] = div(matrix[k], matrix[k][k])
return matrix[:,size:]
cdef double[:,:] transpose(double[:,:] a):
cdef:
int size_x = a.shape[0], size_y = a.shape[1]
double *c_pointer = <double *> malloc(size_y*size_x*sizeof(double))
double[:,:] tmp = <double[:size_y,:size_x]>c_pointer
for i in range(size_x):
for j in range(size_y):
tmp[j,i] = a[i,j]
return tmp
cdef double[:,:] dot(double[:,:] a, double[:,:] b):
c = np.zeros((a.shape[0], b.shape[1]))
for i in range(a.shape[0]):
for j in range(b.shape[1]):
for k in range(a.shape[0]):
c[i][j] += a[i][k] * b[k][j]
return c
cdef double det(double[::,::] a):
cdef:
double[:,:] tmp
double total = 0, sub_det
int size_x = a.shape[0], size_y = a.shape[1], i
if size_x != size_y:
raise ValueError("Determinant Operation is only valid for Quadratic Matrices.")
if size_x == 2 and size_y == 2:
total = a[0][0] * a[1][1] - a[1][0] * a[0][1]
return total
for i in range(size_x):
tmp = a.copy()
tmp = tmp[1:]
for i in range(size_y):
tmp[i] = addition(tmp[i][0:i], tmp[i][i + 1:])
sign = (-1) ** (i % 2)
sub_det = det(tmp)
total += sign * a[0][i] * sub_det
return total

View File

@@ -21,15 +21,14 @@ import pandas as pd
import numpy as np
import csv
def numpy(array: np.ndarray, path: str) -> np.ndarray:
with open(path, mode='w') as sistema_linear:
solution_writer = csv.writer(sistema_linear, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
with open(path, mode='w') as linear_system:
solution_writer = csv.writer(linear_system, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
solution_writer.writerows(array)
return array
def pandas(df: pd.DataFrame, path:str) -> None:
def pandas(df: pd.DataFrame, path: str) -> None:
df.to_csv(path)