first commit
This commit is contained in:
0
.dockerignore
Normal file
0
.dockerignore
Normal file
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
src/med_data.csv
|
||||||
|
.env
|
||||||
31
Dockerfile
Normal file
31
Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Use a Python Alpine base image
|
||||||
|
FROM python:3.13-alpine
|
||||||
|
|
||||||
|
# Set the working directory in the container
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install necessary system dependencies
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
build-base \
|
||||||
|
libffi-dev \
|
||||||
|
musl-dev \
|
||||||
|
libressl-dev \
|
||||||
|
tk-dev \
|
||||||
|
tcl-dev \
|
||||||
|
xorg-server \
|
||||||
|
xauth \
|
||||||
|
xvfb \
|
||||||
|
&& pip install --upgrade pip
|
||||||
|
|
||||||
|
# Copy the requirements file and install dependencies
|
||||||
|
COPY src/requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Copy the application code
|
||||||
|
COPY src/ .
|
||||||
|
|
||||||
|
# Expose the port your application listens on (if applicable)
|
||||||
|
# EXPOSE 8000
|
||||||
|
|
||||||
|
# Define the command to run your application
|
||||||
|
CMD ["python", "main.py"]
|
||||||
11
docker-compose.yaml
Normal file
11
docker-compose.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
services:
|
||||||
|
thechart:
|
||||||
|
build: .
|
||||||
|
container_name: 'thechart'
|
||||||
|
stdin_open: true
|
||||||
|
working_dir: '/app'
|
||||||
|
tty: true
|
||||||
|
volumes:
|
||||||
|
- ${SRC_PATH}:/app
|
||||||
|
environment:
|
||||||
|
- DISPLAY=${DISPLAY_IP}:0.0
|
||||||
14
src/Pipfile
Normal file
14
src/Pipfile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[[source]]
|
||||||
|
url = "https://pypi.org/simple"
|
||||||
|
verify_ssl = true
|
||||||
|
name = "pypi"
|
||||||
|
|
||||||
|
[packages]
|
||||||
|
matplotlib = "*"
|
||||||
|
pandas = "*"
|
||||||
|
|
||||||
|
[dev-packages]
|
||||||
|
|
||||||
|
[requires]
|
||||||
|
python_version = "3.13"
|
||||||
|
python_full_version = "3.13.5"
|
||||||
533
src/Pipfile.lock
generated
Normal file
533
src/Pipfile.lock
generated
Normal file
@@ -0,0 +1,533 @@
|
|||||||
|
{
|
||||||
|
"_meta": {
|
||||||
|
"hash": {
|
||||||
|
"sha256": "80d60af3c7e04ae943d7c1d19b8fa89509f625345b05c19ba46ce6fbb6e72750"
|
||||||
|
},
|
||||||
|
"pipfile-spec": 6,
|
||||||
|
"requires": {
|
||||||
|
"python_full_version": "3.13.5",
|
||||||
|
"python_version": "3.13"
|
||||||
|
},
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"name": "pypi",
|
||||||
|
"url": "https://pypi.org/simple",
|
||||||
|
"verify_ssl": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"default": {
|
||||||
|
"contourpy": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f",
|
||||||
|
"sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92",
|
||||||
|
"sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16",
|
||||||
|
"sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f",
|
||||||
|
"sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f",
|
||||||
|
"sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7",
|
||||||
|
"sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e",
|
||||||
|
"sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08",
|
||||||
|
"sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841",
|
||||||
|
"sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5",
|
||||||
|
"sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2",
|
||||||
|
"sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415",
|
||||||
|
"sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878",
|
||||||
|
"sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0",
|
||||||
|
"sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab",
|
||||||
|
"sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445",
|
||||||
|
"sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43",
|
||||||
|
"sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c",
|
||||||
|
"sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823",
|
||||||
|
"sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69",
|
||||||
|
"sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15",
|
||||||
|
"sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef",
|
||||||
|
"sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5",
|
||||||
|
"sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73",
|
||||||
|
"sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9",
|
||||||
|
"sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912",
|
||||||
|
"sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5",
|
||||||
|
"sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85",
|
||||||
|
"sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d",
|
||||||
|
"sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631",
|
||||||
|
"sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2",
|
||||||
|
"sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54",
|
||||||
|
"sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773",
|
||||||
|
"sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934",
|
||||||
|
"sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a",
|
||||||
|
"sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441",
|
||||||
|
"sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422",
|
||||||
|
"sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532",
|
||||||
|
"sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739",
|
||||||
|
"sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b",
|
||||||
|
"sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f",
|
||||||
|
"sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1",
|
||||||
|
"sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87",
|
||||||
|
"sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52",
|
||||||
|
"sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1",
|
||||||
|
"sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd",
|
||||||
|
"sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989",
|
||||||
|
"sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb",
|
||||||
|
"sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f",
|
||||||
|
"sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad",
|
||||||
|
"sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9",
|
||||||
|
"sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512",
|
||||||
|
"sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd",
|
||||||
|
"sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83",
|
||||||
|
"sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe",
|
||||||
|
"sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0",
|
||||||
|
"sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.10'",
|
||||||
|
"version": "==1.3.2"
|
||||||
|
},
|
||||||
|
"cycler": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30",
|
||||||
|
"sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.8'",
|
||||||
|
"version": "==0.12.1"
|
||||||
|
},
|
||||||
|
"fonttools": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:0162a6a37b0ca70d8505311d541e291cd6cab54d1a986ae3d2686c56c0581e8f",
|
||||||
|
"sha256:082410bc40014db55be5457836043f0dd1e6b3817c7d11a0aeb44eaa862890af",
|
||||||
|
"sha256:0b0983be58d8c8acb11161fdd3b43d64015cef8c3d65ad9289a252243b236128",
|
||||||
|
"sha256:0bfddfd09aafbbfb3bd98ae67415fbe51eccd614c17db0c8844fe724fbc5d43d",
|
||||||
|
"sha256:0feac9dda9a48a7a342a593f35d50a5cee2dbd27a03a4c4a5192834a4853b204",
|
||||||
|
"sha256:126c16ec4a672c9cb5c1c255dc438d15436b470afc8e9cac25a2d39dd2dc26eb",
|
||||||
|
"sha256:1cde303422198fdc7f502dbdf1bf65306166cdb9446debd6c7fb826b4d66a530",
|
||||||
|
"sha256:26ec05319353842d127bd02516eacb25b97ca83966e40e9ad6fab85cab0576f4",
|
||||||
|
"sha256:2af65836cf84cd7cb882d0b353bdc73643a497ce23b7414c26499bb8128ca1af",
|
||||||
|
"sha256:2d172b92dff59ef8929b4452d5a7b19b8e92081aa87bfb2d82b03b1ff14fc667",
|
||||||
|
"sha256:3515ac47a9a5ac025d2899d195198314023d89492340ba86e4ba79451f7518a8",
|
||||||
|
"sha256:36555230e168511e83ad8637232268649634b8dfff6ef58f46e1ebc057a041ad",
|
||||||
|
"sha256:3f2c05a8d82a4d15aebfdb3506e90793aea16e0302cec385134dd960647a36c0",
|
||||||
|
"sha256:4a036822e915692aa2c03e2decc60f49a8190f8111b639c947a4f4e5774d0d7a",
|
||||||
|
"sha256:688137789dbd44e8757ad77b49a771539d8069195ffa9a8bcf18176e90bbd86d",
|
||||||
|
"sha256:75cf8c2812c898dd3d70d62b2b768df4eeb524a83fb987a512ddb3863d6a8c54",
|
||||||
|
"sha256:778a632e538f82c1920579c0c01566a8f83dc24470c96efbf2fbac698907f569",
|
||||||
|
"sha256:79f0c4b1cc63839b61deeac646d8dba46f8ed40332c2ac1b9997281462c2e4ba",
|
||||||
|
"sha256:83a96e4a4e65efd6c098da549ec34f328f08963acd2d7bc910ceba01d2dc73e6",
|
||||||
|
"sha256:8ddb7c0c3e91b187acc1bed31857376926569a18a348ac58d6a71eb8a6b22393",
|
||||||
|
"sha256:9e2d71676025dd74a21d682be36d4846aa03644c619f2c2d695a11a7262433f6",
|
||||||
|
"sha256:9f7e2ab9c10b6811b4f12a0768661325a48e664ec0a0530232c1605896a598db",
|
||||||
|
"sha256:a1a9a2c462760976882131cbab7d63407813413a2d32cd699e86a1ff22bf7aa5",
|
||||||
|
"sha256:a6d7709fcf4577b0f294ee6327088884ca95046e1eccde87c53bbba4d5008541",
|
||||||
|
"sha256:a81769fc4d473c808310c9ed91fbe01b67f615e3196fb9773e093939f59e6783",
|
||||||
|
"sha256:adf440deecfcc2390998e649156e3bdd0b615863228c484732dc06ac04f57385",
|
||||||
|
"sha256:b00530b84f87792891874938bd42f47af2f7f4c2a1d70466e6eb7166577853ab",
|
||||||
|
"sha256:b2a35b0a19f1837284b3a23dd64fd7761b8911d50911ecd2bdbaf5b2d1b5df9c",
|
||||||
|
"sha256:b5a0e28fb6abc31ba45a2d11dc2fe826e5a074013d13b7b447b441e8236e5f1c",
|
||||||
|
"sha256:b9b5099ca99b79d6d67162778b1b1616fc0e1de02c1a178248a0da8d78a33852",
|
||||||
|
"sha256:bca61b14031a4b7dc87e14bf6ca34c275f8e4b9f7a37bc2fe746b532a924cf30",
|
||||||
|
"sha256:bf09f14d73a18c62eb9ad1cac98a37569241ba3cd5789cc578286c128cc29f7f",
|
||||||
|
"sha256:c3af3fefaafb570a03051a0d6899b8374dcf8e6a4560e42575843aef33bdbad6",
|
||||||
|
"sha256:c5579fb3744dfec151b5c29b35857df83e01f06fe446e8c2ebaf1effd7e6cdce",
|
||||||
|
"sha256:cda226253bf14c559bc5a17c570d46abd70315c9a687d91c0e01147f87736182",
|
||||||
|
"sha256:cfde5045f1bc92ad11b4b7551807564045a1b38cb037eb3c2bc4e737cd3a8d0f",
|
||||||
|
"sha256:d2d79cfeb456bf438cb9fb87437634d4d6f228f27572ca5c5355e58472d5519d",
|
||||||
|
"sha256:d500d399aa4e92d969a0d21052696fa762385bb23c3e733703af4a195ad9f34c",
|
||||||
|
"sha256:d506652abc285934ee949a5f3a952c5d52a09257bc2ba44a92db3ec2804c76fe",
|
||||||
|
"sha256:e48a487ed24d9b611c5c4b25db1e50e69e9854ca2670e39a3486ffcd98863ec4",
|
||||||
|
"sha256:eb46a73759efc8a7eca40203843241cd3c79aa983ed7f7515548ed3d82073761",
|
||||||
|
"sha256:f4b6f1360da13cecc88c0d60716145b31e1015fbe6a59e32f73a4404e2ea92cf"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.9'",
|
||||||
|
"version": "==4.58.5"
|
||||||
|
},
|
||||||
|
"kiwisolver": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50",
|
||||||
|
"sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c",
|
||||||
|
"sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8",
|
||||||
|
"sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc",
|
||||||
|
"sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f",
|
||||||
|
"sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79",
|
||||||
|
"sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6",
|
||||||
|
"sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2",
|
||||||
|
"sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605",
|
||||||
|
"sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09",
|
||||||
|
"sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab",
|
||||||
|
"sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e",
|
||||||
|
"sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc",
|
||||||
|
"sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8",
|
||||||
|
"sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7",
|
||||||
|
"sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880",
|
||||||
|
"sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b",
|
||||||
|
"sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b",
|
||||||
|
"sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff",
|
||||||
|
"sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3",
|
||||||
|
"sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c",
|
||||||
|
"sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0",
|
||||||
|
"sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6",
|
||||||
|
"sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30",
|
||||||
|
"sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47",
|
||||||
|
"sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0",
|
||||||
|
"sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1",
|
||||||
|
"sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90",
|
||||||
|
"sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d",
|
||||||
|
"sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b",
|
||||||
|
"sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c",
|
||||||
|
"sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a",
|
||||||
|
"sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e",
|
||||||
|
"sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc",
|
||||||
|
"sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16",
|
||||||
|
"sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a",
|
||||||
|
"sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712",
|
||||||
|
"sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c",
|
||||||
|
"sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3",
|
||||||
|
"sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc",
|
||||||
|
"sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561",
|
||||||
|
"sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d",
|
||||||
|
"sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc",
|
||||||
|
"sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db",
|
||||||
|
"sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed",
|
||||||
|
"sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751",
|
||||||
|
"sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957",
|
||||||
|
"sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165",
|
||||||
|
"sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2",
|
||||||
|
"sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476",
|
||||||
|
"sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84",
|
||||||
|
"sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246",
|
||||||
|
"sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4",
|
||||||
|
"sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25",
|
||||||
|
"sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d",
|
||||||
|
"sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271",
|
||||||
|
"sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb",
|
||||||
|
"sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31",
|
||||||
|
"sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e",
|
||||||
|
"sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85",
|
||||||
|
"sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b",
|
||||||
|
"sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7",
|
||||||
|
"sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03",
|
||||||
|
"sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b",
|
||||||
|
"sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d",
|
||||||
|
"sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a",
|
||||||
|
"sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d",
|
||||||
|
"sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3",
|
||||||
|
"sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67",
|
||||||
|
"sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f",
|
||||||
|
"sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c",
|
||||||
|
"sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502",
|
||||||
|
"sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062",
|
||||||
|
"sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954",
|
||||||
|
"sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb",
|
||||||
|
"sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a",
|
||||||
|
"sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b",
|
||||||
|
"sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed",
|
||||||
|
"sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34",
|
||||||
|
"sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.10'",
|
||||||
|
"version": "==1.4.8"
|
||||||
|
},
|
||||||
|
"matplotlib": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:0ab1affc11d1f495ab9e6362b8174a25afc19c081ba5b0775ef00533a4236eea",
|
||||||
|
"sha256:0ef061f74cd488586f552d0c336b2f078d43bc00dc473d2c3e7bfee2272f3fa8",
|
||||||
|
"sha256:151d89cb8d33cb23345cd12490c76fd5d18a56581a16d950b48c6ff19bb2ab93",
|
||||||
|
"sha256:213fadd6348d106ca7db99e113f1bea1e65e383c3ba76e8556ba4a3054b65ae7",
|
||||||
|
"sha256:24853dad5b8c84c8c2390fc31ce4858b6df504156893292ce8092d190ef8151d",
|
||||||
|
"sha256:2a818d8bdcafa7ed2eed74487fdb071c09c1ae24152d403952adad11fa3c65b4",
|
||||||
|
"sha256:2f82d2c5bb7ae93aaaa4cd42aca65d76ce6376f83304fa3a630b569aca274df0",
|
||||||
|
"sha256:3ddbba06a6c126e3301c3d272a99dcbe7f6c24c14024e80307ff03791a5f294e",
|
||||||
|
"sha256:4f23ffe95c5667ef8a2b56eea9b53db7f43910fa4a2d5472ae0f72b64deab4d5",
|
||||||
|
"sha256:55e46cbfe1f8586adb34f7587c3e4f7dedc59d5226719faf6cb54fc24f2fd52d",
|
||||||
|
"sha256:68f7878214d369d7d4215e2a9075fef743be38fa401d32e6020bab2dfabaa566",
|
||||||
|
"sha256:6c7818292a5cc372a2dc4c795e5c356942eb8350b98ef913f7fda51fe175ac5d",
|
||||||
|
"sha256:748302b33ae9326995b238f606e9ed840bf5886ebafcb233775d946aa8107a15",
|
||||||
|
"sha256:748ebc3470c253e770b17d8b0557f0aa85cf8c63fd52f1a61af5b27ec0b7ffee",
|
||||||
|
"sha256:7c5f0283da91e9522bdba4d6583ed9d5521566f63729ffb68334f86d0bb98049",
|
||||||
|
"sha256:86ab63d66bbc83fdb6733471d3bff40897c1e9921cba112accd748eee4bce5e4",
|
||||||
|
"sha256:8c21ae75651c0231b3ba014b6d5e08fb969c40cdb5a011e33e99ed0c9ea86ecb",
|
||||||
|
"sha256:9f2efccc8dcf2b86fc4ee849eea5dcaecedd0773b30f47980dc0cbeabf26ec84",
|
||||||
|
"sha256:a48f9c08bf7444b5d2391a83e75edb464ccda3c380384b36532a0962593a1751",
|
||||||
|
"sha256:a49e39755580b08e30e3620efc659330eac5d6534ab7eae50fa5e31f53ee4e30",
|
||||||
|
"sha256:a80fcccbef63302c0efd78042ea3c2436104c5b1a4d3ae20f864593696364ac7",
|
||||||
|
"sha256:c0b9849a17bce080a16ebcb80a7b714b5677d0ec32161a2cc0a8e5a6030ae220",
|
||||||
|
"sha256:c26dd9834e74d164d06433dc7be5d75a1e9890b926b3e57e74fa446e1a62c3e2",
|
||||||
|
"sha256:cb73d8aa75a237457988f9765e4dfe1c0d2453c5ca4eabc897d4309672c8e014",
|
||||||
|
"sha256:cf37d8c6ef1a48829443e8ba5227b44236d7fcaf7647caa3178a4ff9f7a5be05",
|
||||||
|
"sha256:cf4636203e1190871d3a73664dea03d26fb019b66692cbfd642faafdad6208e8",
|
||||||
|
"sha256:d3bec61cb8221f0ca6313889308326e7bb303d0d302c5cc9e523b2f2e6c73deb",
|
||||||
|
"sha256:d96985d14dc5f4a736bbea4b9de9afaa735f8a0fc2ca75be2fa9e96b2097369d",
|
||||||
|
"sha256:dbed9917b44070e55640bd13419de83b4c918e52d97561544814ba463811cbc7",
|
||||||
|
"sha256:ed70453fd99733293ace1aec568255bc51c6361cb0da94fa5ebf0649fdb2150a",
|
||||||
|
"sha256:eef6ed6c03717083bc6d69c2d7ee8624205c29a8e6ea5a31cd3492ecdbaee1e1",
|
||||||
|
"sha256:f6929fc618cb6db9cb75086f73b3219bbb25920cb24cee2ea7a12b04971a4158",
|
||||||
|
"sha256:fd5641a9bb9d55f4dd2afe897a53b537c834b9012684c8444cc105895c8c16fd",
|
||||||
|
"sha256:fdfa07c0ec58035242bc8b2c8aae37037c9a886370eef6850703d7583e19964b"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"markers": "python_version >= '3.10'",
|
||||||
|
"version": "==3.10.3"
|
||||||
|
},
|
||||||
|
"numpy": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:0025048b3c1557a20bc80d06fdeb8cc7fc193721484cca82b2cfa072fec71a93",
|
||||||
|
"sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280",
|
||||||
|
"sha256:0bb3a4a61e1d327e035275d2a993c96fa786e4913aa089843e6a2d9dd205c66a",
|
||||||
|
"sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e",
|
||||||
|
"sha256:15aa4c392ac396e2ad3d0a2680c0f0dee420f9fed14eef09bdb9450ee6dcb7b7",
|
||||||
|
"sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1",
|
||||||
|
"sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b",
|
||||||
|
"sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c",
|
||||||
|
"sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8",
|
||||||
|
"sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d",
|
||||||
|
"sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc",
|
||||||
|
"sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992",
|
||||||
|
"sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0",
|
||||||
|
"sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8",
|
||||||
|
"sha256:467db865b392168ceb1ef1ffa6f5a86e62468c43e0cfb4ab6da667ede10e58db",
|
||||||
|
"sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943",
|
||||||
|
"sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1",
|
||||||
|
"sha256:5ccb7336eaf0e77c1635b232c141846493a588ec9ea777a7c24d7166bb8533ae",
|
||||||
|
"sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952",
|
||||||
|
"sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e",
|
||||||
|
"sha256:6ea9e48336a402551f52cd8f593343699003d2353daa4b72ce8d34f66b722070",
|
||||||
|
"sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29",
|
||||||
|
"sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30",
|
||||||
|
"sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e",
|
||||||
|
"sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc",
|
||||||
|
"sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42",
|
||||||
|
"sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25",
|
||||||
|
"sha256:a5ee121b60aa509679b682819c602579e1df14a5b07fe95671c8849aad8f2115",
|
||||||
|
"sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8",
|
||||||
|
"sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d",
|
||||||
|
"sha256:a8b740f5579ae4585831b3cf0e3b0425c667274f82a484866d2adf9570539369",
|
||||||
|
"sha256:ad506d4b09e684394c42c966ec1527f6ebc25da7f4da4b1b056606ffe446b8a3",
|
||||||
|
"sha256:afed2ce4a84f6b0fc6c1ce734ff368cbf5a5e24e8954a338f3bdffa0718adffb",
|
||||||
|
"sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8",
|
||||||
|
"sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0",
|
||||||
|
"sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee",
|
||||||
|
"sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb",
|
||||||
|
"sha256:c6e0bf9d1a2f50d2b65a7cf56db37c095af17b59f6c132396f7c6d5dd76484df",
|
||||||
|
"sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48",
|
||||||
|
"sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76",
|
||||||
|
"sha256:d4580adadc53311b163444f877e0789f1c8861e2698f6b2a4ca852fda154f3ff",
|
||||||
|
"sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee",
|
||||||
|
"sha256:e344eb79dab01f1e838ebb67aab09965fb271d6da6b00adda26328ac27d4a66e",
|
||||||
|
"sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb",
|
||||||
|
"sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab",
|
||||||
|
"sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660",
|
||||||
|
"sha256:eabd7e8740d494ce2b4ea0ff05afa1b7b291e978c0ae075487c51e8bd93c0c68",
|
||||||
|
"sha256:ebb8603d45bc86bbd5edb0d63e52c5fd9e7945d3a503b77e486bd88dde67a19b",
|
||||||
|
"sha256:ec0bdafa906f95adc9a0c6f26a4871fa753f25caaa0e032578a30457bff0af6a",
|
||||||
|
"sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244",
|
||||||
|
"sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.11'",
|
||||||
|
"version": "==2.3.1"
|
||||||
|
},
|
||||||
|
"packaging": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484",
|
||||||
|
"sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.8'",
|
||||||
|
"version": "==25.0"
|
||||||
|
},
|
||||||
|
"pandas": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232",
|
||||||
|
"sha256:09e3b1587f0f3b0913e21e8b32c3119174551deb4a4eba4a89bc7377947977e7",
|
||||||
|
"sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2",
|
||||||
|
"sha256:0f951fbb702dacd390561e0ea45cdd8ecfa7fb56935eb3dd78e306c19104b9b0",
|
||||||
|
"sha256:1b916a627919a247d865aed068eb65eb91a344b13f5b57ab9f610b7716c92de1",
|
||||||
|
"sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956",
|
||||||
|
"sha256:1d12f618d80379fde6af007f65f0c25bd3e40251dbd1636480dfffce2cf1e6da",
|
||||||
|
"sha256:22c2e866f7209ebc3a8f08d75766566aae02bcc91d196935a1d9e59c7b990ac9",
|
||||||
|
"sha256:2323294c73ed50f612f67e2bf3ae45aea04dce5690778e08a09391897f35ff88",
|
||||||
|
"sha256:2b0540963d83431f5ce8870ea02a7430adca100cec8a050f0811f8e31035541b",
|
||||||
|
"sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9",
|
||||||
|
"sha256:2eb789ae0274672acbd3c575b0598d213345660120a257b47b5dafdc618aec83",
|
||||||
|
"sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab",
|
||||||
|
"sha256:342e59589cc454aaff7484d75b816a433350b3d7964d7847327edda4d532a2e3",
|
||||||
|
"sha256:3462c3735fe19f2638f2c3a40bd94ec2dc5ba13abbb032dd2fa1f540a075509d",
|
||||||
|
"sha256:3583d348546201aff730c8c47e49bc159833f971c2899d6097bce68b9112a4f1",
|
||||||
|
"sha256:4645f770f98d656f11c69e81aeb21c6fca076a44bed3dcbb9396a4311bc7f6d8",
|
||||||
|
"sha256:4d544806b485ddf29e52d75b1f559142514e60ef58a832f74fb38e48d757b299",
|
||||||
|
"sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8",
|
||||||
|
"sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444",
|
||||||
|
"sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3",
|
||||||
|
"sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a",
|
||||||
|
"sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb",
|
||||||
|
"sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928",
|
||||||
|
"sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4",
|
||||||
|
"sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a",
|
||||||
|
"sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22",
|
||||||
|
"sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275",
|
||||||
|
"sha256:98bcc8b5bf7afed22cc753a28bc4d9e26e078e777066bc53fac7904ddef9a678",
|
||||||
|
"sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e",
|
||||||
|
"sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8",
|
||||||
|
"sha256:b3cd4273d3cb3707b6fffd217204c52ed92859533e31dc03b7c5008aa933aaab",
|
||||||
|
"sha256:b4b0de34dc8499c2db34000ef8baad684cfa4cbd836ecee05f323ebfba348c7d",
|
||||||
|
"sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679",
|
||||||
|
"sha256:cd05b72ec02ebfb993569b4931b2e16fbb4d6ad6ce80224a3ee838387d83a191",
|
||||||
|
"sha256:dd71c47a911da120d72ef173aeac0bf5241423f9bfea57320110a978457e069e",
|
||||||
|
"sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12",
|
||||||
|
"sha256:e6723a27ad7b244c0c79d8e7007092d7c8f0f11305770e2f4cd778b3ad5f9f85",
|
||||||
|
"sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9",
|
||||||
|
"sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96",
|
||||||
|
"sha256:fe67dc676818c186d5a3d5425250e40f179c2a89145df477dd82945eaea89e97",
|
||||||
|
"sha256:fe7317f578c6a153912bd2292f02e40c1d8f253e93c599e82620c7f69755c74f"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"markers": "python_version >= '3.9'",
|
||||||
|
"version": "==2.3.1"
|
||||||
|
},
|
||||||
|
"pillow": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2",
|
||||||
|
"sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214",
|
||||||
|
"sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e",
|
||||||
|
"sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59",
|
||||||
|
"sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50",
|
||||||
|
"sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632",
|
||||||
|
"sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06",
|
||||||
|
"sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a",
|
||||||
|
"sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51",
|
||||||
|
"sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced",
|
||||||
|
"sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f",
|
||||||
|
"sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12",
|
||||||
|
"sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8",
|
||||||
|
"sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6",
|
||||||
|
"sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580",
|
||||||
|
"sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f",
|
||||||
|
"sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac",
|
||||||
|
"sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860",
|
||||||
|
"sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd",
|
||||||
|
"sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722",
|
||||||
|
"sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8",
|
||||||
|
"sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4",
|
||||||
|
"sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673",
|
||||||
|
"sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788",
|
||||||
|
"sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542",
|
||||||
|
"sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e",
|
||||||
|
"sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd",
|
||||||
|
"sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8",
|
||||||
|
"sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523",
|
||||||
|
"sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967",
|
||||||
|
"sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809",
|
||||||
|
"sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477",
|
||||||
|
"sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027",
|
||||||
|
"sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae",
|
||||||
|
"sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b",
|
||||||
|
"sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c",
|
||||||
|
"sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f",
|
||||||
|
"sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e",
|
||||||
|
"sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b",
|
||||||
|
"sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7",
|
||||||
|
"sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27",
|
||||||
|
"sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361",
|
||||||
|
"sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae",
|
||||||
|
"sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d",
|
||||||
|
"sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc",
|
||||||
|
"sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58",
|
||||||
|
"sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad",
|
||||||
|
"sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6",
|
||||||
|
"sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024",
|
||||||
|
"sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978",
|
||||||
|
"sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb",
|
||||||
|
"sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d",
|
||||||
|
"sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0",
|
||||||
|
"sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9",
|
||||||
|
"sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f",
|
||||||
|
"sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874",
|
||||||
|
"sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa",
|
||||||
|
"sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081",
|
||||||
|
"sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149",
|
||||||
|
"sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6",
|
||||||
|
"sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d",
|
||||||
|
"sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd",
|
||||||
|
"sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f",
|
||||||
|
"sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c",
|
||||||
|
"sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31",
|
||||||
|
"sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e",
|
||||||
|
"sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db",
|
||||||
|
"sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6",
|
||||||
|
"sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f",
|
||||||
|
"sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494",
|
||||||
|
"sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69",
|
||||||
|
"sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94",
|
||||||
|
"sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77",
|
||||||
|
"sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d",
|
||||||
|
"sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7",
|
||||||
|
"sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a",
|
||||||
|
"sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438",
|
||||||
|
"sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288",
|
||||||
|
"sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b",
|
||||||
|
"sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635",
|
||||||
|
"sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3",
|
||||||
|
"sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d",
|
||||||
|
"sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe",
|
||||||
|
"sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0",
|
||||||
|
"sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe",
|
||||||
|
"sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a",
|
||||||
|
"sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805",
|
||||||
|
"sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8",
|
||||||
|
"sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36",
|
||||||
|
"sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a",
|
||||||
|
"sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b",
|
||||||
|
"sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e",
|
||||||
|
"sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25",
|
||||||
|
"sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12",
|
||||||
|
"sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada",
|
||||||
|
"sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c",
|
||||||
|
"sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71",
|
||||||
|
"sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d",
|
||||||
|
"sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c",
|
||||||
|
"sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6",
|
||||||
|
"sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1",
|
||||||
|
"sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50",
|
||||||
|
"sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653",
|
||||||
|
"sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c",
|
||||||
|
"sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4",
|
||||||
|
"sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.9'",
|
||||||
|
"version": "==11.3.0"
|
||||||
|
},
|
||||||
|
"pyparsing": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf",
|
||||||
|
"sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '3.9'",
|
||||||
|
"version": "==3.2.3"
|
||||||
|
},
|
||||||
|
"python-dateutil": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3",
|
||||||
|
"sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
|
||||||
|
"version": "==2.9.0.post0"
|
||||||
|
},
|
||||||
|
"pytz": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3",
|
||||||
|
"sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"
|
||||||
|
],
|
||||||
|
"version": "==2025.2"
|
||||||
|
},
|
||||||
|
"six": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274",
|
||||||
|
"sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'",
|
||||||
|
"version": "==1.17.0"
|
||||||
|
},
|
||||||
|
"tzdata": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8",
|
||||||
|
"sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"
|
||||||
|
],
|
||||||
|
"markers": "python_version >= '2'",
|
||||||
|
"version": "==2025.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"develop": {}
|
||||||
|
}
|
||||||
206
src/main.py
Normal file
206
src/main.py
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from tkinter import ttk, messagebox
|
||||||
|
import csv
|
||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
|
||||||
|
|
||||||
|
class MedTrackerApp:
|
||||||
|
def __init__(self, root):
|
||||||
|
self.root = root
|
||||||
|
self.root.title("Thechart - medication tracker")
|
||||||
|
self.root.protocol("WM_DELETE_WINDOW", self.on_closing)
|
||||||
|
|
||||||
|
self.filename = "med_data.csv"
|
||||||
|
self.initialize_csv()
|
||||||
|
|
||||||
|
main_frame = ttk.Frame(self.root, padding="10")
|
||||||
|
main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
|
||||||
|
|
||||||
|
# --- Input Frame ---
|
||||||
|
input_frame = ttk.LabelFrame(main_frame, text="New Entry")
|
||||||
|
input_frame.grid(row=0, column=0, padx=10, pady=10, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(input_frame, text="Depression (1-10):").grid(row=0, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
self.depression_var = tk.IntVar()
|
||||||
|
ttk.Scale(input_frame, from_=1, to=10, orient=tk.HORIZONTAL, variable=self.depression_var).grid(row=0, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(input_frame, text="Anxiety (1-10):").grid(row=1, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
self.anxiety_var = tk.IntVar()
|
||||||
|
ttk.Scale(input_frame, from_=1, to=10, orient=tk.HORIZONTAL, variable=self.anxiety_var).grid(row=1, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(input_frame, text="Sleep Quality (1-10):").grid(row=2, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
self.sleep_var = tk.IntVar()
|
||||||
|
ttk.Scale(input_frame, from_=1, to=10, orient=tk.HORIZONTAL, variable=self.sleep_var).grid(row=2, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(input_frame, text="Appetite (1-10):").grid(row=3, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
self.appetite_var = tk.IntVar()
|
||||||
|
ttk.Scale(input_frame, from_=1, to=10, orient=tk.HORIZONTAL, variable=self.appetite_var).grid(row=3, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(input_frame, text="Note:").grid(row=4, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
self.note_var = tk.StringVar()
|
||||||
|
ttk.Entry(input_frame, textvariable=self.note_var).grid(row=4, column=1, sticky="ew", padx=5, pady=2)
|
||||||
|
|
||||||
|
button_frame = ttk.Frame(input_frame)
|
||||||
|
button_frame.grid(row=5, column=0, columnspan=2, pady=10)
|
||||||
|
ttk.Button(button_frame, text="Add Entry", command=self.add_entry).pack(side="left", padx=5)
|
||||||
|
ttk.Button(button_frame, text="Quit", command=self.on_closing).pack(side="left", padx=5)
|
||||||
|
|
||||||
|
# --- Table Frame ---
|
||||||
|
table_frame = ttk.LabelFrame(main_frame, text="Log (Double-click to edit)")
|
||||||
|
table_frame.grid(row=1, column=0, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
self.tree = ttk.Treeview(table_frame, columns=("Timestamp", "Depression", "Anxiety", "Sleep", "Appetite", "Note"), show="headings")
|
||||||
|
self.tree.heading("Timestamp", text="Timestamp")
|
||||||
|
self.tree.heading("Depression", text="Depression")
|
||||||
|
self.tree.heading("Anxiety", text="Anxiety")
|
||||||
|
self.tree.heading("Sleep", text="Sleep")
|
||||||
|
self.tree.heading("Appetite", text="Appetite")
|
||||||
|
self.tree.heading("Note", text="Note")
|
||||||
|
|
||||||
|
# --- NEW: Bind double-click event ---
|
||||||
|
self.tree.bind("<Double-1>", self.on_double_click)
|
||||||
|
self.tree.pack(side="left", fill="both", expand=True)
|
||||||
|
|
||||||
|
scrollbar = ttk.Scrollbar(table_frame, orient="vertical", command=self.tree.yview)
|
||||||
|
self.tree.configure(yscrollcommand=scrollbar.set)
|
||||||
|
scrollbar.pack(side="right", fill="y")
|
||||||
|
|
||||||
|
# --- Graph Frame ---
|
||||||
|
graph_frame = ttk.LabelFrame(main_frame, text="Evolution")
|
||||||
|
graph_frame.grid(row=0, column=1, rowspan=2, padx=10, pady=10, sticky="nsew")
|
||||||
|
|
||||||
|
self.fig, self.ax = plt.subplots()
|
||||||
|
self.canvas = FigureCanvasTkAgg(self.fig, master=graph_frame)
|
||||||
|
self.canvas.get_tk_widget().pack(fill="both", expand=True)
|
||||||
|
|
||||||
|
main_frame.columnconfigure(1, weight=3)
|
||||||
|
main_frame.rowconfigure(1, weight=1)
|
||||||
|
|
||||||
|
self.load_data()
|
||||||
|
|
||||||
|
def on_double_click(self, event):
|
||||||
|
"""Handle double-click event to edit an entry."""
|
||||||
|
item_id = self.tree.selection()[0]
|
||||||
|
item_values = self.tree.item(item_id, "values")
|
||||||
|
self.create_edit_window(item_id, item_values)
|
||||||
|
|
||||||
|
def create_edit_window(self, item_id, values):
|
||||||
|
"""Create a new Toplevel window for editing an entry."""
|
||||||
|
edit_win = tk.Toplevel(self.root)
|
||||||
|
edit_win.title("Edit Entry")
|
||||||
|
|
||||||
|
# Unpack values
|
||||||
|
ts, dep, anx, slp, app, note = values
|
||||||
|
|
||||||
|
# Create variables for the widgets
|
||||||
|
dep_var = tk.IntVar(value=int(dep))
|
||||||
|
anx_var = tk.IntVar(value=int(anx))
|
||||||
|
slp_var = tk.IntVar(value=int(slp))
|
||||||
|
app_var = tk.IntVar(value=int(app))
|
||||||
|
note_var = tk.StringVar(value=note)
|
||||||
|
|
||||||
|
# Create form widgets
|
||||||
|
ttk.Label(edit_win, text=f"Timestamp: {ts}").grid(row=0, column=0, columnspan=2, padx=5, pady=5)
|
||||||
|
|
||||||
|
ttk.Label(edit_win, text="Depression:").grid(row=1, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
ttk.Scale(edit_win, from_=1, to=10, variable=dep_var, orient=tk.HORIZONTAL).grid(row=1, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(edit_win, text="Anxiety:").grid(row=2, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
ttk.Scale(edit_win, from_=1, to=10, variable=anx_var, orient=tk.HORIZONTAL).grid(row=2, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(edit_win, text="Sleep:").grid(row=3, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
ttk.Scale(edit_win, from_=1, to=10, variable=slp_var, orient=tk.HORIZONTAL).grid(row=3, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(edit_win, text="Appetite:").grid(row=4, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
ttk.Scale(edit_win, from_=1, to=10, variable=app_var, orient=tk.HORIZONTAL).grid(row=4, column=1, sticky="ew")
|
||||||
|
|
||||||
|
ttk.Label(edit_win, text="Note:").grid(row=5, column=0, sticky="w", padx=5, pady=2)
|
||||||
|
ttk.Entry(edit_win, textvariable=note_var).grid(row=5, column=1, sticky="ew")
|
||||||
|
|
||||||
|
# Save and Cancel buttons
|
||||||
|
save_btn = ttk.Button(edit_win, text="Save", command=lambda: self.save_edit(
|
||||||
|
edit_win, ts, dep_var.get(), anx_var.get(), slp_var.get(), app_var.get(), note_var.get()
|
||||||
|
))
|
||||||
|
save_btn.grid(row=6, column=0, padx=5, pady=10)
|
||||||
|
|
||||||
|
cancel_btn = ttk.Button(edit_win, text="Cancel", command=edit_win.destroy)
|
||||||
|
cancel_btn.grid(row=6, column=1, padx=5, pady=10)
|
||||||
|
|
||||||
|
def save_edit(self, edit_win, timestamp, dep, anx, slp, app, note):
|
||||||
|
"""Save the edited data to the CSV file."""
|
||||||
|
df = pd.read_csv(self.filename)
|
||||||
|
# Find the row to update using the timestamp as a unique identifier
|
||||||
|
df.loc[df['timestamp'] == timestamp, ['depression', 'anxiety', 'sleep', 'appetite', 'note']] = [dep, anx, slp, app, note]
|
||||||
|
# Write the updated dataframe back to the CSV
|
||||||
|
df.to_csv(self.filename, index=False)
|
||||||
|
|
||||||
|
edit_win.destroy()
|
||||||
|
messagebox.showinfo("Success", "Entry updated successfully!")
|
||||||
|
self.load_data()
|
||||||
|
|
||||||
|
def on_closing(self):
|
||||||
|
if messagebox.askokcancel("Quit", "Do you want to quit the application?"):
|
||||||
|
plt.close(self.fig)
|
||||||
|
self.root.destroy()
|
||||||
|
|
||||||
|
def initialize_csv(self):
|
||||||
|
if not os.path.exists(self.filename):
|
||||||
|
with open(self.filename, mode='w', newline='') as file:
|
||||||
|
writer = csv.writer(file)
|
||||||
|
writer.writerow(["timestamp", "depression", "anxiety", "sleep", "appetite", "note"])
|
||||||
|
|
||||||
|
def add_entry(self):
|
||||||
|
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
with open(self.filename, mode='a', newline='') as file:
|
||||||
|
writer = csv.writer(file)
|
||||||
|
writer.writerow([timestamp, self.depression_var.get(), self.anxiety_var.get(), self.sleep_var.get(), self.appetite_var.get(), self.note_var.get()])
|
||||||
|
|
||||||
|
messagebox.showinfo("Success", "Entry added successfully!")
|
||||||
|
self.clear_entries()
|
||||||
|
self.load_data()
|
||||||
|
|
||||||
|
def clear_entries(self):
|
||||||
|
self.depression_var.set(0)
|
||||||
|
self.anxiety_var.set(0)
|
||||||
|
self.sleep_var.set(0)
|
||||||
|
self.appetite_var.set(0)
|
||||||
|
self.note_var.set("")
|
||||||
|
|
||||||
|
def load_data(self):
|
||||||
|
for i in self.tree.get_children():
|
||||||
|
self.tree.delete(i)
|
||||||
|
|
||||||
|
if os.path.exists(self.filename) and os.path.getsize(self.filename) > 0:
|
||||||
|
try:
|
||||||
|
df = pd.read_csv(self.filename, dtype={'note': str}).fillna('')
|
||||||
|
# Sort by timestamp to keep order consistent
|
||||||
|
df = df.sort_values(by='timestamp').reset_index(drop=True)
|
||||||
|
for index, row in df.iterrows():
|
||||||
|
self.tree.insert("", "end", values=list(row))
|
||||||
|
self.update_graph(df)
|
||||||
|
except pd.errors.EmptyDataError:
|
||||||
|
self.update_graph(pd.DataFrame())
|
||||||
|
|
||||||
|
def update_graph(self, df):
|
||||||
|
self.ax.clear()
|
||||||
|
if not df.empty:
|
||||||
|
df['timestamp'] = pd.to_datetime(df['timestamp'])
|
||||||
|
df.set_index('timestamp', inplace=True)
|
||||||
|
self.ax.plot(df.index, df['depression'], marker='o', linestyle='-', label='Depression')
|
||||||
|
self.ax.plot(df.index, df['anxiety'], marker='o', linestyle='-', label='Anxiety')
|
||||||
|
self.ax.plot(df.index, df['sleep'], marker='o', linestyle='-', label='Sleep')
|
||||||
|
self.ax.plot(df.index, df['appetite'], marker='o', linestyle='-', label='Appetite')
|
||||||
|
self.ax.legend()
|
||||||
|
self.ax.set_title("Medication Effects Over Time")
|
||||||
|
self.ax.set_xlabel("Date")
|
||||||
|
self.ax.set_ylabel("Rating (1-10)")
|
||||||
|
self.fig.autofmt_xdate()
|
||||||
|
self.canvas.draw()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
root = tk.Tk()
|
||||||
|
app = MedTrackerApp(root)
|
||||||
|
root.mainloop()
|
||||||
15
src/requirements.txt
Normal file
15
src/requirements.txt
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
-i https://pypi.org/simple
|
||||||
|
contourpy==1.3.2; python_version >= '3.10'
|
||||||
|
cycler==0.12.1; python_version >= '3.8'
|
||||||
|
fonttools==4.58.5; python_version >= '3.9'
|
||||||
|
kiwisolver==1.4.8; python_version >= '3.10'
|
||||||
|
matplotlib==3.10.3; python_version >= '3.10'
|
||||||
|
numpy==2.3.1; python_version >= '3.11'
|
||||||
|
packaging==25.0; python_version >= '3.8'
|
||||||
|
pandas==2.3.1; python_version >= '3.9'
|
||||||
|
pillow==11.3.0; python_version >= '3.9'
|
||||||
|
pyparsing==3.2.3; python_version >= '3.9'
|
||||||
|
python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
|
||||||
|
pytz==2025.2
|
||||||
|
six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
|
||||||
|
tzdata==2025.2; python_version >= '2'
|
||||||
Reference in New Issue
Block a user