From 530f64de9b32274e3cefac82c4e09b7d0d0c8994 Mon Sep 17 00:00:00 2001 From: Nick McKay Date: Wed, 28 May 2025 16:14:52 -0700 Subject: [PATCH 1/4] Update human.py --- pyCatSim/api/human.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pyCatSim/api/human.py b/pyCatSim/api/human.py index 568e790..1b29a20 100644 --- a/pyCatSim/api/human.py +++ b/pyCatSim/api/human.py @@ -60,3 +60,9 @@ def __init__(self, name, cats_owned): self.name = name self.cats_owned = cats_owned + + def groom(self,Cat): + + Cat.mood += 1 + + From 629d8e2a86130fc1e8bb43ce6286ef4912ce723b Mon Sep 17 00:00:00 2001 From: Nick McKay Date: Thu, 29 May 2025 10:59:11 -0700 Subject: [PATCH 2/4] added docs --- .gitignore | 2 ++ pyCatSim/__pycache__/__init__.cpython-312.pyc | Bin 336 -> 321 bytes .../api/__pycache__/__init__.cpython-312.pyc | Bin 335 -> 320 bytes pyCatSim/api/__pycache__/cat.cpython-312.pyc | Bin 6426 -> 6411 bytes .../api/__pycache__/human.cpython-312.pyc | Bin 2224 -> 2916 bytes pyCatSim/api/human.py | 26 ++++++++++++++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 271 -> 256 bytes .../utils/__pycache__/noises.cpython-312.pyc | Bin 1604 -> 1589 bytes 8 files changed, 28 insertions(+) diff --git a/.gitignore b/.gitignore index e43b0f9..5db7e4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ .DS_Store +/pyCatSim/__pycache__ +/pyCatSim/api/__pycache__ diff --git a/pyCatSim/__pycache__/__init__.cpython-312.pyc b/pyCatSim/__pycache__/__init__.cpython-312.pyc index 97f87dac9b71ebe79879fe0ffe9ea12bfd7f6af6..0401c9e1e649fd709bebc790ffbdbb78eec2d370 100644 GIT binary patch delta 38 scmcb>bdZVrG%qg~0}!}|nNQ?C!Ed4;TAW%`te=;eoROcCIPqgV0LnTHH~;_u delta 53 zcmX@ebb*QcG%qg~0}wP_R-edyLe5z~v^ce>SU)8-DZeN&BReBACACQ3B|o_|H#M(h H;-h!~!f6uC diff --git a/pyCatSim/api/__pycache__/__init__.cpython-312.pyc b/pyCatSim/api/__pycache__/__init__.cpython-312.pyc index 281244132caf27c313f88a8cd91c81b5074e70f7..4bcd23d27fb2a6e9863178b9ccbcbd75ba79563a 100644 GIT binary patch delta 38 scmX@lbbyKbG%qg~0}!}|nNQ?C%Wt6{TAW%`te=;eoROcCIPqH~0Lq{YJ^%m! delta 53 zcmX@Wbe@U(G%qg~0}wRvX-wokE9b5sTAW%`te=valwXvXk)4s5l3JwilAm0fo0?ZL H@p&WwrCSmY diff --git a/pyCatSim/api/__pycache__/cat.cpython-312.pyc b/pyCatSim/api/__pycache__/cat.cpython-312.pyc index d3f7292feea96cafeec89b4a400448eba3c8cefd..d252e2da6181376e257ad248cb7e6d674271ffc1 100644 GIT binary patch delta 41 vcmbPb)NRClnwOW00SH{f%r|nc<>WWk4=qkDD%Q`-OwP#9N!)ym(}f=Z=4cE( delta 56 zcmeA+nq|a&nwOW00SK=1Xl&$O%PHriA6lGRRIHzpnv`FZn30{4nUY$h?~HV%6uLjF95elWW@D!<1jEGBzN);j!2v`GZ#gYYG>{H`n`=Ya>HWgAB zy1>APJal7b1o02BF|c*a%mP!>3bFFejohF<$?xfYzxVO;yZb!*n10>a&>3cs26ft_axImBKeV zbT!p$Vme0kojT|a$xFINcP7+y@aTSp5LbJig9FXhSrJ>6U}9T-*bi93V_*@8-H1!r zmO_Mnv<)KS;Iia4_|ednoW%;HD9t8di4v9EZ>YPj1^S}1rbJ;xvK zv9K5L3x$n5BdzJzib`OHr1$i-)Ysuw&MWE>?+D4d(1a&ykM#)G(X36-bgVBAr?Q-E z%XM7untlEQzbIZ+%cdhkt=QJ&WjsrD)v>yN09nQ`GPC0SayI9z(|wgQkM0#Y-XO(G z@2of0`vns__9CYjx8)*`#H2<#ch$tY*2=%nA&t y-s@WY%Qa zc*B%c&P6}8IJKx)KP5FOzbG*yJ0mkCwMgG3Ke;qFHLql|4BG)lW$yW zi2%(j;sz0{FoF}vDCPwcEes!-G*~%42QhN9szOwP6!~eg6iEQ-TkMGinR>~IB}L3Y i9z?(7WO;50E@>d25r~T=Cp&VB@R~BJeqsO;U?Tt_E-fek diff --git a/pyCatSim/api/human.py b/pyCatSim/api/human.py index 1b29a20..6d92ad5 100644 --- a/pyCatSim/api/human.py +++ b/pyCatSim/api/human.py @@ -62,6 +62,32 @@ def __init__(self, name, cats_owned): self.cats_owned = cats_owned def groom(self,Cat): + """ + Simulates an owner grooming one cat, increasing its mood by one + + Parameters + ---------- + Cat : pyCatSim.Cat + a pyCatSim.Cat object that you would like to groom. + + Returns + ------- + None. + + + Examples + -------- + .. jupyter-execute:: + + from pyCatSim import Cat, Owner + + cat1 = Cat(name="Whiskers") + + Deborah = Owner(name="Deborah", cats_owned=cat1) + + Deborah.groom(cat1) + + """ Cat.mood += 1 diff --git a/pyCatSim/utils/__pycache__/__init__.cpython-312.pyc b/pyCatSim/utils/__pycache__/__init__.cpython-312.pyc index f12311003523dd128bbcd4b2c7a88aae0ccd2685..c0544813e3e634b2ba0feef500e188e7b3e086f5 100644 GIT binary patch delta 38 scmeBYYGC3%&CAQh00gdK<`cR5_^tFqi&Kk=_46{5GxBp1CvJ}b0J7N&K>z>% delta 53 zcmZo*>Sy9U&CAQh00hme)hBZI$$9FB7N-^!>!+k9 Date: Thu, 29 May 2025 14:22:55 -0700 Subject: [PATCH 3/4] Update test_api_Owner.py --- pyCatSim/tests/test_api_Owner.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/pyCatSim/tests/test_api_Owner.py b/pyCatSim/tests/test_api_Owner.py index a128747..c755f32 100644 --- a/pyCatSim/tests/test_api_Owner.py +++ b/pyCatSim/tests/test_api_Owner.py @@ -40,4 +40,22 @@ def test_init_t1(self): assert owner1.name == 'Liam' assert type(owner1.cats_owned) is list - assert len(owner1.cats_owned) == 2 \ No newline at end of file + assert len(owner1.cats_owned) == 2 + +class TesthumanActions: + ''' Test for Owner action success ''' + + def test_groom_t0(self): + cat1 = Cat(name="Whiskers",mood=7) + owner1 = Owner(name="Sasha", cats_owned=cat1) + + owner1.groom(cat1) + + assert cat1.mood == 8 + + + + + + + \ No newline at end of file From 3a4d04baf34d45977289a00b1a13ce359f18ec0f Mon Sep 17 00:00:00 2001 From: Nick McKay Date: Thu, 29 May 2025 14:49:32 -0700 Subject: [PATCH 4/4] remove pycache --- pyCatSim.egg-info/PKG-INFO | 217 ------------------ pyCatSim.egg-info/SOURCES.txt | 12 - pyCatSim.egg-info/dependency_links.txt | 1 - pyCatSim.egg-info/requires.txt | 1 - pyCatSim.egg-info/top_level.txt | 1 - pyCatSim/__pycache__/__init__.cpython-312.pyc | Bin 321 -> 0 bytes .../api/__pycache__/__init__.cpython-312.pyc | Bin 320 -> 0 bytes pyCatSim/api/__pycache__/cat.cpython-312.pyc | Bin 6411 -> 0 bytes .../api/__pycache__/human.cpython-312.pyc | Bin 2916 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 170 -> 0 bytes .../test_api_Cat.cpython-312-pytest-8.3.5.pyc | Bin 10752 -> 0 bytes ...est_api_Owner.cpython-312-pytest-8.3.5.pyc | Bin 6475 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 256 -> 0 bytes .../utils/__pycache__/noises.cpython-312.pyc | Bin 1589 -> 0 bytes 14 files changed, 232 deletions(-) delete mode 100644 pyCatSim.egg-info/PKG-INFO delete mode 100644 pyCatSim.egg-info/SOURCES.txt delete mode 100644 pyCatSim.egg-info/dependency_links.txt delete mode 100644 pyCatSim.egg-info/requires.txt delete mode 100644 pyCatSim.egg-info/top_level.txt delete mode 100644 pyCatSim/__pycache__/__init__.cpython-312.pyc delete mode 100644 pyCatSim/api/__pycache__/__init__.cpython-312.pyc delete mode 100644 pyCatSim/api/__pycache__/cat.cpython-312.pyc delete mode 100644 pyCatSim/api/__pycache__/human.cpython-312.pyc delete mode 100644 pyCatSim/tests/__pycache__/__init__.cpython-312.pyc delete mode 100644 pyCatSim/tests/__pycache__/test_api_Cat.cpython-312-pytest-8.3.5.pyc delete mode 100644 pyCatSim/tests/__pycache__/test_api_Owner.cpython-312-pytest-8.3.5.pyc delete mode 100644 pyCatSim/utils/__pycache__/__init__.cpython-312.pyc delete mode 100644 pyCatSim/utils/__pycache__/noises.cpython-312.pyc diff --git a/pyCatSim.egg-info/PKG-INFO b/pyCatSim.egg-info/PKG-INFO deleted file mode 100644 index 34013d1..0000000 --- a/pyCatSim.egg-info/PKG-INFO +++ /dev/null @@ -1,217 +0,0 @@ -Metadata-Version: 2.4 -Name: pyCatSim -Version: 0.0.1 -Summary: A fun, modular, object-oriented Python package for simulating cat behavior -Author-email: Deborah Khider -License: Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -Project-URL: Homepage, https://github.com/khider/pyCatSim -Project-URL: Issues, https://github.com/khider/pyCatSim/issues -Requires-Python: >=3.12 -Description-Content-Type: text/markdown -License-File: LICENSE -Requires-Dist: playsound>=1.3.0 -Dynamic: license-file - -# pyCatSim -Repository for a lightweight package to simulate cat ownership diff --git a/pyCatSim.egg-info/SOURCES.txt b/pyCatSim.egg-info/SOURCES.txt deleted file mode 100644 index 6e50821..0000000 --- a/pyCatSim.egg-info/SOURCES.txt +++ /dev/null @@ -1,12 +0,0 @@ -LICENSE -README.md -pyproject.toml -pyCatSim/__init__.py -pyCatSim.egg-info/PKG-INFO -pyCatSim.egg-info/SOURCES.txt -pyCatSim.egg-info/dependency_links.txt -pyCatSim.egg-info/requires.txt -pyCatSim.egg-info/top_level.txt -pyCatSim/api/__init__.py -pyCatSim/utils/__init__.py -pyCatSim/utils/noises.py \ No newline at end of file diff --git a/pyCatSim.egg-info/dependency_links.txt b/pyCatSim.egg-info/dependency_links.txt deleted file mode 100644 index 8b13789..0000000 --- a/pyCatSim.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/pyCatSim.egg-info/requires.txt b/pyCatSim.egg-info/requires.txt deleted file mode 100644 index 0dafce6..0000000 --- a/pyCatSim.egg-info/requires.txt +++ /dev/null @@ -1 +0,0 @@ -playsound>=1.3.0 diff --git a/pyCatSim.egg-info/top_level.txt b/pyCatSim.egg-info/top_level.txt deleted file mode 100644 index 050475e..0000000 --- a/pyCatSim.egg-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -pyCatSim diff --git a/pyCatSim/__pycache__/__init__.cpython-312.pyc b/pyCatSim/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 0401c9e1e649fd709bebc790ffbdbb78eec2d370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmX@j%ge<81g>G`87qMFV-N=hn4yf%W(BLfpdDoYCMYDS2@DAr0wO}3XHj^9g=m?q;bMlB%0UY1%^oSC0@i=&{@ zIk6--Ggp)C79WhQS6Y&pQ+$gRLNO;6WZn|W%q_?-D#^)A(#uUPNlZyBNi1Ro8hDF4 zJ|1dTeEdp=&mgOQndpZW1I^dZ%S_J5&q*xSch4;GC{5CbnU7$^$7kkcmc+;F6;$5h zu*uC&Da}c>E8+(l0&;D!43PN1%*e?2m5qT>{tkl>h*rPJCpsbPGM{22cM&g80RU{# BR&f9T diff --git a/pyCatSim/api/__pycache__/__init__.cpython-312.pyc b/pyCatSim/api/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 4bcd23d27fb2a6e9863178b9ccbcbd75ba79563a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmYL@ze>bF5XSdUf@kC!L9m=Q&85^rY)(-Sy+X9OX4%Vb$U?Fkb`y`-`4m2b&*B@T zu(7gJ4jU^cqBzCOZ-(LfzUS#QAy}uk2jv6K*KzqP_6r+8cqED}iK2>Cv}Q|2N9Gl; zqh&-%AEojAMRKAGV@+$E1y?{@YPgf$xGuoFk|F2-(kd_()}_fyxOA$k@Q9B+)Ut<_ zhQf7L&5}2Yo+%ypT(&sk#oB6rmBz!C5X$933_O>u=lC_mWmik2LGH_7ytkO diff --git a/pyCatSim/api/__pycache__/cat.cpython-312.pyc b/pyCatSim/api/__pycache__/cat.cpython-312.pyc deleted file mode 100644 index d252e2da6181376e257ad248cb7e6d674271ffc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6411 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 Ok}5HA^a}xNzW={3S#?kV diff --git a/pyCatSim/api/__pycache__/human.cpython-312.pyc b/pyCatSim/api/__pycache__/human.cpython-312.pyc deleted file mode 100644 index 75212c8e738481cdce97b69c4cf5f8165414cac0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2916 zcmb_e-ES0C6u)R51h4xxD_eog z-$QLh8fK1IK{<9oeP~Q<4!~rcIAorJPnu2VGq$!y=5_RDKHJcX*)V%z*>{BXLxzw% zgJ;&M2}e490JhK!r6%LdSuW;A`y5u_yK2;7hdSm3(_O~oyRh_^QQjx>yqevfk zY>df3C=%^q2Gladh%qa3hGL^y6KNavK#XY5b0vHikW5ufG3ok?kUW%eeHmDOSvhC5 zi>DmPL=q!xQ%2DeOk5d93lm5}jr-CqfnJC=4sR+5gj=cy&i@_Wzr}^AX4UkVa z9AI-%t-#K7QPmvUQXa(C<}6vUP*Ylk6EHp0q3g}M7r2lJCDf@7-D+3&hHF(jwVg(F zO8?=rZCY!>^@E|vB?AL*MH{hjpJJ$c2n1AiRJVr>pyDf&s4T<9P9Fp+q&L5YVVwjC zP>@wEh@pv)1f+z%sx8vI@oV6I?EGoBAKm|DycV}HFg@{WW$9P!<9g?pA9Iqn9p z)Jr2tRktQq%^gwrZqyoK&-kL_J1aFY*?dZshGCkn?*^u6jC;Ind2-T7MMlAt+yld} zJyev6w z;1_|X(Zp&_;5CtoZhsO!;%z4iBphiJy9IPXqB0cfh*Dw3^1QGo#hOsZ;tlgHGsR4( zOUGLf+i~X;Fi1==Ty@b4-!PY?qxo28dhm4R+b~=pcYB|_x^(@(?cQg9>VNv$z~$HO z^zFWuzkc*~U-8b)!grXaTZQS{JE!jy_HVFvZxv2$Y(I5($KH*B)3ueoh|daXG6O==dgfBe#T&rn`fP%F8rwJAsw4f4a|VQ zZQ|*AN26%l*z)?34Fjc9JxKiL#(~0++ebE!4y{L>5*Jow3tGpkoq&xx+khI)#Bzo@ z*P$%}_YkFK;0H~|Q!Q#@2hi%q#6S|2eO7I5_C__Yh?hZ7;sv=t?vIk5Z6D`8$X%Vf z-1kvV0Iq?~F1##wzf3dCn`ZR$2=i^G`Ci@fVotYd+PrLQ8hM}%WpfW_X>azK&HjOGAreQ)nW8T6e=_U_P{T%}B8imjgY}l;FgG4KG%5B2 h1G6Ca!f-!BDSgnTQT?|Zq5Z$>bCeby5**d$zX77a>(c-L diff --git a/pyCatSim/tests/__pycache__/__init__.cpython-312.pyc b/pyCatSim/tests/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 2b691be95229a4645f6b433c79a6dc37204e1cf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 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 H;yL*bQzDC8 diff --git a/pyCatSim/utils/__pycache__/__init__.cpython-312.pyc b/pyCatSim/utils/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index c0544813e3e634b2ba0feef500e188e7b3e086f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmX@j%ge<81g>G`8TCN=F^B^LOi;#WAs}NqLkdF_LkeRGQx4-=CPs!zW=)nVV=m|X zypqJsykdpKoE(Lu#Ny0kg`}MP%_skNH z(j&ryk0@&Ee@O9{FKt1RJ$Thpiv;}iur-W2WCb_#*b`F Pj4WR{7#PKh*nwgIqTxlE diff --git a/pyCatSim/utils/__pycache__/noises.cpython-312.pyc b/pyCatSim/utils/__pycache__/noises.cpython-312.pyc deleted file mode 100644 index 2619ced48418c2d1c6a9810be822425395c44247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1589 zcmd@UO=}ZDbau0wY_?l#Er?!ZEJ%&i6!D`XBH~BYgSBY=AeUvDotll4oiH=2rYKbK zAb3#_dhy`FgQY*kQz=qe@uU}TmFUHjZ)TeW{RM*W@aDZYZ{GL3_rt?J0=RfR)%L=suoJHoe+?s148&Q`Q*R0$^ zb4SnQ;EYOpfoYBoBt0tf`tQbivcb8wP1gKqC@Md-YC~}Pa0VT>5-c6_=NqxaEgq$e z;yOB$B5|BypW6jS}1<_o$yaEy^EcPCFIio3>xEvT~b|j?tb4&Y2^s z@lB_b6>}5y?c7W_MZmgR-3Fi)^a$#dB4KrG)z?zC(FD|lI{yvL(%%wFlkl&TQ#U1)YAT8A4bF(1x)iI+>B3aI zbDk(D@PJ5F%s`LFlFDkkBXn~N+66@S0H9^Gg^?FLOP@UcII{bzH~MOPW#Z+;%H+$* z*PVBVHg+BV;GO7#BKmjdNdJcaZjLf{4$>A&p3dIPkkDUU9f zeio61KcVtxwC8&f4UfLq^L%zQ7+(*@-yB&F4r~V1^`QFh;YM(BGdQ~*oZSe{Etk8_ Mm^J<55FnG}Z%pZLr~m)}