From c3ef92e8c7cae7566ca9f5471d59d18c41d9cf7f Mon Sep 17 00:00:00 2001 From: Avighna Basak Date: Sun, 29 Mar 2026 19:36:37 +0530 Subject: [PATCH] Add arithmetic and binary modules with tests and shared exceptions module --- __pycache__/arithmetic.cpython-310.pyc | Bin 0 -> 2847 bytes __pycache__/binary.cpython-310.pyc | Bin 0 -> 2080 bytes __pycache__/bitwise.cpython-310.pyc | Bin 0 -> 2054 bytes __pycache__/calculator.cpython-310.pyc | Bin 0 -> 6467 bytes __pycache__/complex.cpython-310.pyc | Bin 0 -> 1924 bytes __pycache__/exceptions.cpython-310.pyc | Bin 0 -> 3347 bytes __pycache__/fraction.cpython-310.pyc | Bin 0 -> 1845 bytes __pycache__/hex.cpython-310.pyc | Bin 0 -> 2026 bytes __pycache__/matrix.cpython-310.pyc | Bin 0 -> 2788 bytes __pycache__/octal.cpython-310.pyc | Bin 0 -> 2004 bytes __pycache__/set.cpython-310.pyc | Bin 0 -> 2068 bytes __pycache__/test_arithmetic.cpython-310.pyc | Bin 0 -> 7034 bytes __pycache__/test_binary.cpython-310.pyc | Bin 0 -> 3767 bytes __pycache__/test_bitwise.cpython-310.pyc | Bin 0 -> 4454 bytes __pycache__/test_calculator.cpython-310.pyc | Bin 0 -> 3664 bytes __pycache__/test_complex.cpython-310.pyc | Bin 0 -> 3274 bytes __pycache__/test_fraction.cpython-310.pyc | Bin 0 -> 3753 bytes __pycache__/test_hex.cpython-310.pyc | Bin 0 -> 3318 bytes __pycache__/test_matrix.cpython-310.pyc | Bin 0 -> 4093 bytes __pycache__/test_octal.cpython-310.pyc | Bin 0 -> 3397 bytes __pycache__/test_set.cpython-310.pyc | Bin 0 -> 3957 bytes .../test_trigonometric.cpython-310.pyc | Bin 0 -> 3754 bytes __pycache__/trigonometric.cpython-310.pyc | Bin 0 -> 2070 bytes arithmetic.py | 120 +++++++++++++++ binary.py | 69 +++++++++ exceptions.py | 48 ++++++ test_arithmetic.py | 143 ++++++++++++++++++ test_binary.py | 73 +++++++++ 28 files changed, 453 insertions(+) create mode 100644 __pycache__/arithmetic.cpython-310.pyc create mode 100644 __pycache__/binary.cpython-310.pyc create mode 100644 __pycache__/bitwise.cpython-310.pyc create mode 100644 __pycache__/calculator.cpython-310.pyc create mode 100644 __pycache__/complex.cpython-310.pyc create mode 100644 __pycache__/exceptions.cpython-310.pyc create mode 100644 __pycache__/fraction.cpython-310.pyc create mode 100644 __pycache__/hex.cpython-310.pyc create mode 100644 __pycache__/matrix.cpython-310.pyc create mode 100644 __pycache__/octal.cpython-310.pyc create mode 100644 __pycache__/set.cpython-310.pyc create mode 100644 __pycache__/test_arithmetic.cpython-310.pyc create mode 100644 __pycache__/test_binary.cpython-310.pyc create mode 100644 __pycache__/test_bitwise.cpython-310.pyc create mode 100644 __pycache__/test_calculator.cpython-310.pyc create mode 100644 __pycache__/test_complex.cpython-310.pyc create mode 100644 __pycache__/test_fraction.cpython-310.pyc create mode 100644 __pycache__/test_hex.cpython-310.pyc create mode 100644 __pycache__/test_matrix.cpython-310.pyc create mode 100644 __pycache__/test_octal.cpython-310.pyc create mode 100644 __pycache__/test_set.cpython-310.pyc create mode 100644 __pycache__/test_trigonometric.cpython-310.pyc create mode 100644 __pycache__/trigonometric.cpython-310.pyc create mode 100644 arithmetic.py create mode 100644 binary.py create mode 100644 exceptions.py create mode 100644 test_arithmetic.py create mode 100644 test_binary.py diff --git a/__pycache__/arithmetic.cpython-310.pyc b/__pycache__/arithmetic.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6400fc2797021505e4e7a1bb91f69727cfc04857 GIT binary patch literal 2847 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 literal 0 HcmV?d00001 diff --git a/__pycache__/complex.cpython-310.pyc b/__pycache__/complex.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fb981cba9b2e48818400d6cffec3eda913b7c52 GIT binary patch literal 1924 zcmbVMNsk*v6s}j*ZTEO=$7F`ggd||XlC*+G3H5K6b|Ew#M;y|h-VFnoVJ|26rODFQA3Bd@6S0{^KBtWtjE`N%S;QDpetw)8%Jq59=OQ_BBAx z&e#-7(v$%Cl*Vkdr3w4o7&qk;`hguYhiP$olbHE6%+1+vOqQOB3H?G(m|t$q>Gqub zIW-G5s)a#cHwS^rqNC=mIozTmXp2ran5mu0OH=^f4*hpT?f z1tfv9@*GG8zvKjJ!)?7VrK(Kg3wk)GJ0=$@9rk76s3=GZC+-FJ3laBqA&?^+Q>b>$ zo7Vx_p1E{_gSKZbo}j*LY8Iew#MXaKRWH!1sGGg)O@JyQ?r{q(u2Y4Yd>?d!>ResL zmC$5-^_d(9ESrbxAWZBhH0HpF>sX*Hc`o*_cg$wgnsJ*;D`@5v6cp5L^Y9SsqfHyP z11VPqz6a5Nn%eNlgNf=bkgsCMzBNR>f#>R)0mkM{#f@y()hY|f9m}Jr<;M#g)~Ln&?s!v@fxj=i)+>nU$ks>jdpC;%lL6D zqh|NCIf_*3i$#jIjdGLle~nRn@n~h~C%BiHsx|pp=I9-;FEyoj)c+h}^5kL6QcNYflfG;ymWO50kt&Xp-TWwK}kVTE5%XokJA!^Hcvm&#!heP$+B VW-Rnj2N)#6^SnK;WPh*f{SCNRe-Qux literal 0 HcmV?d00001 diff --git a/__pycache__/exceptions.cpython-310.pyc b/__pycache__/exceptions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..723bb70f5b611f01449f264b0f6da64d5a1c77f2 GIT binary patch literal 3347 zcmb`J&2AG(5XZaiabhPib`r-9A;9plux3|5TvrIKv>W;Fkjz& zf}(gCApV3~e}czjCYa#=!Y$dm>VSi;h$`r+HSO>jMdIj``Xo7B%UIl$Yv_Q8=*Fm?%Cg@Gl4bWR+8}v5mHP9Wg1A2$_I_R$G zf$ovs5W7!V|DppVr!Hi~>*NYNBpYzS1{GnvXCqF0jY0K2GuXg@f7jxcV|&iTv!hT+ zr9$$j#i`J6$phc3>8*F+<(MBci$(k$`>%4$Ua}9ILt3A*DSy(h##LWGk864| zmMX4WmK(T{Wlbxwp`|xcHTeIO#|_JJJX>q9u&?+2`eXP^OQna0wzgjlABL|3FSLao z&f*%%H;x=fZW!o;@msYD!(dz*$yfLmKiZx3C4_^_b)PGYep}e z!VSigC`o=ZZ8E8CZst$gFhay2=lqyw8CU3iT2WBt-R4Jo zKLk-s)((zv0Uu{^cfdg2wy_7QQs&N)RH2YT=)1wJ=JpCLreg;|7@3FC#J+QLpt|T3 znN<%T^I+G}h?RPD`7GZ>+CA(#m-Zr9DVaozs+=}W?nv1VmTNM}y=;=RW^)uO-;U0W z+QRq~)UzBHQTG?3UIHuSflyJEqHd=iozNe9@=Ze8%}CQ$Gnn{?Qk@%=!XnW9Gu#$A zaSxn7rI*3Fg*|9MRHd9-sl!94U-dS@+{rML#${1bSrg@@ADtENCvDrQ}b6F(3zL4-5SZVDNA*xcsR*Lf?E7fdXO=wvb z9p*Zr+x^a6k?rO}wi{rjA|^IeKh36P`c=uJZWL`1 sxML|=P`CyZ6&@x{(UilDwFtd0ZAc(YnyKo96p*ma1JHkIS^k-RPLp zrqkv@NBAG(H-A7>>^FAEYM`yyKGUDV=87NknwO&D3$DbT)OSj$WW`=E<-L>({+!RR zmtMt{|F+w`;I(jeu(IX%EZ_84=^s4ejJ`Kdc*f=t_AuJ3f|}O1-TEh&t*@l=_k{kT z3{*%MDpAQ@fv7|~C;Y)NMStEN#j1Da{dRBjgl}qc|Cq%5#<_s?Qq!Xt_CxENQm0d> zX_l5&W=XCkmRp(TrEPo{XS3uh3a_Rs`kv*+`qNmK#>#v)u@a{qF?|h_Cl4NP55F~u zHp5YD;=SRQ#j`vsVr7QoI2+G0qH1`C@BZ|_HgJ$hexxBE2bd2bA|CMuZ}AQn_`A#A zDD73k{bX8Si0(p+eaJL;|UA!*~rK&8`4$!yteQ z4tS!L=%aYh_i7)B>UUY?RkF+8Vs%hSvg;7ggDPBrnj^k*BpjXYnxn|_*z%DT`9mwz z!-2@RptmlE-inoSxT)$t0+xU1scN}&p=8qU!u^pWp^_7Nup$=?|{N^u<+}JXdJl5)bC- z<3t=2M#37RxK6pI)O4@W-Eo|kJ(cdKD(Q_5+-tOYyHHG2-R{Y8IdO4lv3uo^E0hgv zBHGEJQ>QjD)Nkr8lx-wGkCQ1SiCG>^3B0_CN@RHx<%*-n#Y5BnbDTPMmlgeJQm9#$ Xd`9jV8j4tlM>4t@twmvk){6cG+Usj| literal 0 HcmV?d00001 diff --git a/__pycache__/hex.cpython-310.pyc b/__pycache__/hex.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..76f453e9c472525d0eb8a6c8fe9c39589f8d7e0d GIT binary patch literal 2026 zcmbVNO>g5w7@qOiiJMK+Y#X&*u`H1|R7NV|Yx$@UAKSu#Lxi+&iGnJ}<8DkHJ3F2% z?JBtt_zfHoQgiGt;79NeeC3ogw_cX#9jBqm(gQg1jOW9i_j#Y^d6TZMR~Rnw$M4ZE z4r71P;O1pv@EPvxYc!Hc9yL#jBp!01Os;txXGyk-6l>U&!sV}om;K#u* z_I0W{2<6SedA=6(!r=56BbyL!qH(#+-TAN1trzwSMZ7JgiBd){m^3}W!*!Z8k}?5h z+R|bK3MWVuQed@ab?owNMQ@q!0fJV!h!X8_Riar6zG&9)l-Cf{u}+U=7({(Pu3;{t zeH2@bD;h7wM0r`nbcBJXsQ47|fGSXT%G9p3Ok|*O0?zv;Q5rNZ&mwZW zr3ma5-=EO|o}<>$85p@hgt_p$S?&x6gHU-^&Sfr=VgDs8a}b0FFE#LqjNn#*>K;9gP&w_BEqcq9P zpNA>Grhb~TW9+I(vPKmqCFb25=b8viRdzq_r*asFpAabXe^F(wa4T-fExRsyw_5od DcIkiR literal 0 HcmV?d00001 diff --git a/__pycache__/matrix.cpython-310.pyc b/__pycache__/matrix.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..934acfee08614e1cb2b8fb701806f150236c6d29 GIT binary patch literal 2788 zcmdT`&u`pB6!wgNtk=7nZbQ;0r46o1+n6S$X`#>*5K@a&aR`UVy zJ8?bs(AVNd+(hrjt#}N5Jw6q;(R(p_XauMK#LmW2z{~MY`d!%V#Jy07&htcwOq6Hh zPA^GiCrf)B2}krq+apGcMvsHOj&=`C{sxg7yT+bT7{i)kyF54cSi!zA(s9dB?5U}& zHNJI$8T3 zc45L}Dp%FlIJ^(wwR7`@vBPQ3=7*ctl$W#EnKrgrVW~#WwrR)d6<*lb)ypw2w>C`C z!^&E2;Y4n3L)I%Fc5?JiU*?3Fw=|rH!c_VFP{_ou09*90?z5}I*=pqX22%N}i68oD zmd+==zS{D;9oVup-OJ(GB#fT;B71gZF3lLuB;5q4t3!J_=p~{P&H3w@TJ!~hKlEtf z4gX0f{o$A&WnJm74wT+*XlrxOENzKU_Dk!j%+k{CW??LsPksLIi>3QXl*P$sI>z4D zVRumJg7{W?9ob2x3ezYlEjm$Yc2ZT^YuEsKH%ZHSqR$knBydV5OA}vRnmAHv(czbC zP#@Do)_G}&3GBK*e{XT+E13wnvKq>8W95GKEY&AkiNbC)=!Pm2D;0Rx`&(sGWBa%= z*w{ecfN&XSV{DwY8Gkiqy3FMsgM@7i7XGSfwOJE$rkI71Ws5Udbd0UERSiwE^?NAm zMgb0j4GRT_ZfZu&fF(w5DF!B9M9*`uZG&`k7Ywe(+iZ_9W7Df_G-EVoyJpN{z6%cS zv9rj}v&aF=v_@9UtE}LXwY1N^-Dh+A>`~wd$|KPvfofosPT21!Xl>^iqoXl*D?W^RDyX(V2ySqCdu8Z+#@7?nB+Kw1=OgWVH2#)&jC|GzGGOKFi_K2 z%|ZbtltB!+#5OE3M&p=KR;92MJV!pRaeNhD(ku;_Xkl4kR)=PyWYNj5`MlyNJCx*HC%KtBTCYJ`J9SEQ5W!U@g%reitEgk_VQlO1>7tQ)yH?Kg`m~WZ z(98pE6zIFT3%{p>eoNW8yG>=oUK)D3Y=m*_&z9`@el76B6#703UOJkq`l|(jUfLo| z*AsCLx(?0DX34^mt(LsEfOfOw0)2!gphq`LM1o%N(PvSPjF?_~gIIJx{WAL8|Y7;@lB~47acetjcxdXzTAmiL28Ecx1 zGesk|ism6X+eIsHj;Ptv)FcU#P8c5;MRW6xrfySHbKwY0ao4`4>5N9H2Qqc~-L1vy zdcnoD))BbDW`~o3fAM3wYb0G~5|;_FxI&O_Ckm&@`LxVB)dr=E6YbMwgQn zD5GdGln#^=ln!2)NPMdHC?)iNp|CM_Fh-fdxPj8*?3$>0HDGK{SKOP*E!Z55a9dea zM3DS!38kBEqbkFxn!Zl$z|~NdtS2tOv24+OUZFx*=wz<&Il;<0Xq?J^CX)f?>B3Ga zZSg9RC#p}s3t!L>^s%LvJdcvT!aq8xZ+l&9s)PCPSEr-Q*Yp;InxOSZqM*;9?-uu? dUKS6!$tM)_>g`6Gxu*N3+j1Ru(w%Hh{S9n4W;6f* literal 0 HcmV?d00001 diff --git a/__pycache__/octal.cpython-310.pyc b/__pycache__/octal.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3127d90c274451ee5740e41df6be581719c79113 GIT binary patch literal 2004 zcmbVNU2hvj6rGt}J8Q>r?KEvdfnuSe$f87rmR5?Q2&om17E%Qdk*jF4vm{H_yY9?5 zG?6W}7=8spY98|o_z(PqedWo#@)ik|b7$?ub|@08wKIF?^PY3>xlWgs$_&q6zx^8h z;WG9+8Pkt|@daM}6&lGTk6DNBaL%NV&W~(INLLonJF+Mj(7V!;CG-VZmW$|%vLctz zFUYFAhTfAkSw~-z%THPJ`Ut18CeP|oa^%O6OatS`p;D;|I8BWo@}hwEF6+t)y{w^) zijw^u@7|}M-GA`;!$&8zu`dl7?MG&_v3}0in<6XF!mc7$VDU5)!ND0*3$V}cKHhA9 ztwW{Td%pG$+fUN(lQ{LIZU=rG^kUzns%@{^=pJW_!9f@t?phn1GhIXDahH4cSL5Q1 z`$m;8I70#vLdz`)xA8F{!2tRYAu+-@eS~Nzh8#deYvf^7(^a&~o|icQkvUOf&bT5% zt^0XHYqOelYS*N@G7O@QA1`547txS!Rj#V|obihIxbSKVh9STBDLk^F;D=1zl*0Ok zFbxqD$$k>=uvG-Zi2l?Fe0E!kV4m|&MwVz-RbW~GnFHT4$KTULzs#JZ*SX^U*lPk{ zkzB`aO~@*6e~s6;x&b4gvnP*(j|%`_!pLdubILFw25i7D2u5z@MCUY<`$YFD8xZxN z9jdV4p0YEirAS(ef_pX6{aKE$l1Oq(Dc$BvTz?Wq4>>{k9EcIqa%w@S^wc-!g4ChEq=cWK@G z)O>(uMjSJey@T0#$x8kjj8i40>NVu2BwV+Z%^pMPN@~^gHqgAn@@I=kOq66KCxWzw z&EGK2o(pNUKO%-(O`#Ui+YmrCV&k47Ma)huV_@I?@IO_V0u{(0C!Z0o44MOMm+GTWw)Wx?*9y4Buq g>$A7jNo6k%w+V|TJyn?JcqOmsEqI<+_Pk2*Z~m2Z{r~^~ literal 0 HcmV?d00001 diff --git a/__pycache__/set.cpython-310.pyc b/__pycache__/set.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a070144c2ff68ee270657a8baddd228a6b0c2192 GIT binary patch literal 2068 zcmbVM&2Jk;6rVS{w%4xXm=>A@B`63)Fdv~GAVi5mA+6L?gcN9LloG8y6S~x1yEE%1 zcGprN<;Y)vkm6(h0`6S-5BAC_=iYJ&zqcDVALLMFta)$7@9q1&dG9yV9vdqOjPZZ| z3ifkC{L7o;Lt=9i(|!w~grcTs(JGNpQaR7Xs#LDZK|3n13ec|dR1rF-O6mf1UX|4t zbU{_rIJBp#>NV)1y0{{0m-Y}<)F>Gb!Y6(+P*z9Un6_yU8xDsHUBq0%w0}dyVn+&UrE5$1o*>@s$TdW9{0~ym!P8Ei9 zOFXzfaAGHo3~j$eB=2~n{u`1LJlpEpX!fE1M9UHe6b@qJ-k6x!LRi#UL%F7CQ#F?!A&oDixw0Y0E7efe~70-QVGV6I@=3Pc)`wq-0f(8gU_uF0en*dRm~ z!iGl4BLhCuR$8@8Oyax5TWI>Ny7Cv_=1_d7is(;ov`x#8xKi^A%{D4&7qQ435yp9> zdxr51SKvfu9DyyCCnNlV!#*es2pQ5g-39R;ONGSEn=sbMOtX@SoWGKgKAl~0;U^vH zt&UlIm*a8UB zr&A~$LCtUuRR|X>kzh`lxpFWq&3pK>!ABnr&Vb9XglYMR+@Nh5$gB(lC!$!!&Nuk) zuoSy8;(&uxG47Q|U?-$CPtxC^5@kUcILHNC*vZXL*HHlP^T_00Sg1C07! zA@eEr|EvEf6LSsL?7khx!uw#m9d72?Xctnn%;7di_>9Hp5X*SxOM0uJJIn%`zUoKp xO-YzC!f=BOS1C;}{q`8C_yISEuTZP4x=p>v51YLRQ5K%#O?f3RpZ&`D{{S^cu#^A* literal 0 HcmV?d00001 diff --git a/__pycache__/test_arithmetic.cpython-310.pyc b/__pycache__/test_arithmetic.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad7d3cbf8a2254686f85ed6fa67e13454821469b GIT binary patch literal 7034 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 literal 0 HcmV?d00001 diff --git a/__pycache__/test_complex.cpython-310.pyc b/__pycache__/test_complex.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a921ae5ed8df28218d2c035fae8b0082fe04cc3b GIT binary patch literal 3274 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 IVQ}rke<5gjyZ`_I literal 0 HcmV?d00001 diff --git a/__pycache__/test_hex.cpython-310.pyc b/__pycache__/test_hex.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fb81d0445ec741e63dac1ed4cbc2db068666a68 GIT binary patch literal 3318 zcma)9PgC1Q6yKF(EQ}4|KY{QkK+<~J25g`$X_|)6I5!SWJDqBn(Fi|L)JV3w5+!(g z>5zLb{Q%+61D~KDqTgVzJ@uShFX?+LObuVyy zIea;wXZT9y>AeFWi!=z24DBed(ypyj)P+lb_N=)JoB zu*~I%*Z9ftJwSD?5KU1hBv&sDCr|JWe?#IjivzPX;Gn%`mJT`?$k9$1K%RpxloS47W#Ja&9RreAPrgsy*h!Ne#||5@98xc?1`g!>0h=)Bzj zvU$?*n+}Bgb;qwC`%csp`vix=^`M2pNG4apIz*62`vh;#U1EQbBKN=T;fXyL+MeX= zqJ+A|2oVAulQA60nUr1Zwkw*$Bu8FqFWmr0iDse_WEXjq*Q8e2%0@Aph9dMD-}|n@ zt8gsegd-O2i^S3n52aq+x&h048Wz8K;)=Qxx`ZTl%e|Z6bmaRZ(yN;rmR8%i(1h~2 zPCKN9Do&j4?|-@jr#o%BrLsXx()uYP3t8L78Pcs#g?+ZOcXx)Qh-L%0%n)%0l}W8u z%f>OS;&M$nMsmIbW3ekDy^=jBa=28T2IPU{Gyv^P13meE%Elh1?vB*fYnE2sPJ%?| zNNSLZo$SFwc?qS|XFbK+6J6lwuttGQL}CS(;@;vea>*-rCatfF`#4G6HTKP=Qv1Y< zj_kT4#3^YJ?;~k<`=(d2Kay3_bq|T;Ps^9NN)Ai~G}>`PQj!#Q1?6^+ClZ;yASBqm~*Lh-kht3_Vm%kSE%$l%Mk$X}Pv zG)R1cDiBy(uT)nAS(l0-cIs8FVGH|5$KR$EpCP$c)Kf(JVvsBwz*LVD+@KYme%{$$ zrDUr8N^q|{Ax+zEIDu>1vS8am6OMfv7j2tbvG|P`CxtUa=7^|Lut=jNBFjYHBk}=} zkBC%=Y!IQ4h>wXpB=U&JVu;ozM1GMv8XhN*PP$bsQ75T7%+z^887vFfz`Cu-Yc}GfljhgBd>6YArCoeMLI!P+ dhFO}AVy``>#y6zi!epzwXpHIRc99$J{sqrd`*HvP literal 0 HcmV?d00001 diff --git a/__pycache__/test_matrix.cpython-310.pyc b/__pycache__/test_matrix.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb03403a4b78f6561af612afe4cb3c78f61f27b5 GIT binary patch literal 4093 zcmb7HOK;mo5avSysPbG9}$xfOEK@lJ+TA+mwO^c$Gg$1K!QZ{_JyHp-R zdUB2h`UiSQj{XJx5&Z|e=G1d;xui2ok)|Y4N-1b&N$xDa+5KjA*00qn5?p`$^SAvD zTJP{CeHGy59{jlhf=X0&Bm=eL$gW~2u4<@m!6>*zqbTEZ)hW4UqwH#iCQDySv_Olm zC0ewkUuOPx{ujoV_8NsyH7N}>-g^`q)Zdw9eq-CmsF3}lU0bQoEv}L`=o&pi*Fn$Glk^nmd3u_j0lh%a(sQ5}=?2{dy+qH`I_PD3fnEf? zLN7g(8kfULVDTVwvMU4J_(C6WZSKSW{V5Ou%p+9}mEYx8(i{1eOx3pvt_X}$*!xgx zx0`yaqqleT-A)H@Z|b+;_H+Gqr_-Nrw{Jm1Z#TE~W~&;xX(A}`4OQ^)?^80nbnKbrw-@UmY7FTov9-~_6jPKQsu`KzQz1A z3EnGH@WvKHxYJ}}=sQwkMo>b>a6Bm6Aap zh~^-pKvIlIeF49m#oV)LM#NtyHibNB2QRNCfUoAv@R&(1@+8X6!=Ol8L0Xv7TadC# zz+y<5nbC31 zZljMA2|vMj$kjCA-(#?16>%shHAI?FNk(i!9P8~C781b!B7(`yh^y)KO6s>=un}9n zhFiW^(?NZZ**zCBLt;XH5s|641g>2jE1OP#8B-2&tEJxrxq}Z`1HoqT|9s|$Ns1!3 z(eyfqzMey@#J#lHRO}4nK-6c56_HNDImG|t4-P69=0Criz|7-+meq8WTR1L4&7Z@` z*t))R@Bd>1t08RZ*o=1BrXWQ+%S=Z~2>af1J2{IAJS-3=vCTi`m_85^&e1fJ+&D z62ie50T7B^FBhShlu?AX*Y)A_#RJ$h2vCuKm*Cu9-P16!LY>L|o+dkI^YQCvZB4Tab$ZeZ&(6ipN@6gw!6 zixJVn69dB{87akaBu&y3tuXmlEeIQQ#Wih@kVY-kdY&ENd>ExD=|uz;Wsuk!Fr$VQ z>qXZ(2;eNsnP4&2&7t-K*xfhb#D!28=FzZ#BWJ-4wY$-*eTh-SG3{y6I%M1>Rr|Io H7e4+6*@NX- literal 0 HcmV?d00001 diff --git a/__pycache__/test_octal.cpython-310.pyc b/__pycache__/test_octal.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d51089f9716342ee63a5881f849c5ef2158bb98f GIT binary patch literal 3397 zcmb7{&2rl|5P$)avM5=SE&nC9ve zf>a!PdUNi*^a0|do}drWH^8;0o^$J==`LtGibReaYPbtX3*f^p7J$0ta*^Tl>aRb& z|MHCeO_jmNz{(SR!y^>HfcwlMt@%9AEG^J2JuoaI$XU5y!kP&3Rz5H-lar0^7lNWy z8nUQT!0k>lG@*9N!k z1&%MLFAMaY`cW2Q8wWsE;$ql4iiFdSl6uhdBk$NhmDSLF>2^Z9-3^X?H*hP6jA445=y8|C_@Ex0j6LYbrGsCgL)EXVGeZ(=3xPK8E(K$)D>8SCDc=}47X5E z!wTF+U4=Waih2g_!W!yXSbxfD8?q3&VWj5J=17@5RHl#~;QMwC#c%8li#YIe#J|ue zY}j0HNquv>DfPy~W?z$&P8hl(`sUZ3;|rR6pGzZj{h#|x%wYB3#=-vK4`>n|9yy`& z;_&P4NyqOx5FWN2zuohls4ET$C=T2G<5M~RzB&-%Ny4HL=J?s2s~Ox+wY~PdcrvfP z){?v~D%ii6CPDDAn8lJ@N*%{Ob46FRnMb3ujWJltJd;f`N&Xl8RPr*o(UTqR@$ za&H`nvd<*ABFp%*_K+CK53=XTo>;&hdoe1_s|J&R$$dMu8(NBwP(SVvL2^a*)0)hDw9V9B9D z4P&I0RHVdiER5t^l5bmDV>{uPxDH2hSSfER*Q9eKb|W0g)-ICdro6WFovnJZM(~VJ z_s4?r$H*aBBYTxwt3xgsF&#@|>GgWu(wohusAplssWsBK%JVO-ScX$8-F_^P+V;pj zjU-HF7FX<^kqg6vE2LrfjF^tl&{!(bcd-yB`UU^J%vpq&iF3}`k9Zmz_&L|(bGgC7 z`4jw}K0nc=iOy=RW$BI0-M%hM@iG0Kikn1zS?coR!2!D zi|(todmMS)PMjCg{2n_vaPZ1XMB+;_GH8f2YH2=-{q~q{&mmm}O}4>H#*A+6m$>on Ee_eGPEC2ui literal 0 HcmV?d00001 diff --git a/__pycache__/test_set.cpython-310.pyc b/__pycache__/test_set.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0113978a4e0258b5d8bc72cb126a67fc20ab9742 GIT binary patch literal 3957 zcmb7{&2!UM5Wt^4Y|Dw`e1AZIgg^qO0UDs4mUbAJl=hZGq0^}+Q;qPxbOe%}zNeI8 znp3#-(0_p(Gt-{?NAy3?wWprB($)9$`~tJc`qh``UUfBotI zQ5NEFy6FAbc<~Sq{XGg0U<9I0+6;`)tec@#w?eyahlP3}EY^!*sa`VZe=Bgpa=mPb zuLRgocq5=7#q*H^t3E0#P<&ykn^L?TI}~VbJmI5O`UmeJwra(=tYzfxHT_mIo}g2| z8A+vOBcflb^b7bqJ5tGJL&ghqtzU(qjFjK#{ip0}SMNQ;|Km|U-KANgnh}rt&7Zu$ z2fUI>wN!)d-1{-{;vpXTcN9|84G?t`3^3n_x&;>4sPVa=h`InJa8MVa3?ryZFbWma z4vaw+bs5HC0`&+?!W8OJn1&hD6_|xN)MGFY3#hAb4$h+YFZVtsS;;o1b zdZYsrtV5H+hQsZxTYyg-qMj*QsWGT1p1 zY6>rpZ*Sh;{sv9-_A^g=FSfsEy=(?85A=4!3mSWY7q!$j(Yc6sYxh-L?OY_$9wj)M zc+P0gojk>@ev{mXQk2MuuV@m4zq@{Kzg;X;_^W@BOe_(Ny8XyIR`8?%_Y+VDPX2# z*4DB4dY}E6Pd9UlPKLYDtC^JSLJk?5xVct>bDtL8ds&Sg#B9Rrw*%YX^ zTFjF<`|9EVQLo)_BuXnqUQ_2uTqKdjaVe7{%@rQZKx=0Lr33QG77(F^X~bl?Je<6= z-ukMjo2Cd4WT0zj1EnMKi8@P=6Pu#ewq9>wlIBx7l(VtuSmgucUaZXW(`1b3q47M7j`jCwG;DmH7B^^w-%mKNmeXCPlz z`mKhuT%&oIrSPQ};NHy-o>kbAir<}ohs^J!82uIhlvzFpg{;;|^bcsZ{|q3h5BX>) z0Gs6lbb`W*j3e_uDQM&SWH<$x4X5DBnNoBzqeRnZ#U$DE*x5;M%enDcO4GmTowgf} z!z9dfi{|8LXK`?|=Jw9d+3_F+;UYy%AD8+8!vPWpM{=urA5W52_0agOYKVxt@B?gD zzr}{t#_xfZw5}UM&%HDZe4{YLcl2IC?X0!cwy=NYjr+)oD@h0YwdZT872SmU*i7G^ zPf(K=1+Exa{hukXA@w61_>Puq#i$r7@7pVVCF11WqJK#46DrDJ;wWq4gXeb9!C!rdVbS&Yt`7nx5M zb3^XZ%Vv@zvGWv1ZhBZ92}aTSifx)Z3p#c_PrUem-nlgO_l{ULD)yA+JgOM>`+osr C6p{D< literal 0 HcmV?d00001 diff --git a/__pycache__/test_trigonometric.cpython-310.pyc b/__pycache__/test_trigonometric.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7be3e2acae01f7a6f8afd78614392a1b3ed34efe GIT binary patch literal 3754 zcma)9OK;p%6uy2;GMUVzO`1nbUupVup~2H6rBh0qsuaXSBSCqHQ6$TqH%q1_-WOz$`BaeUi3h1CMrp_! zrqn}Sp7O+IdP`_{_pZ9Ep=Vf26fG^9sn^I`t<*g7H$3Tv6~E?5>B}+;v>!TdmT?6? zfq0^%k$`%Q^rxa^#EMHMrDzEEDH^6U_z;ay27H)CDGQ#a9F2jG&;dFKo}qD?03W48 zGzp%iDVhe)(F`31AEP7m8u$S^O2@zt(s4QgK29fT7JPzE(H!_8I!$N5C+RGm1D~Sv zbOC&tth>Ux7>$Qs5Qeg{=GXjn4})@9gB8t#$0=O5aqUclJQkZG)HY$>77X0d;W=?v zY#YT$vm1szZ*LpXs2c>H4DWnhcdL=fi$_LKscmbK8FB!}@pjxu4OF&V=s8f`7NV5|9qc-lBVK<$E^s5jCJ(3_vPUqx@h zW*{Zpy=8@(9SbDUb44IgKMBk1;vUq-VCVwkx)Je-=W0vn`fOge4ELrWqzJO!5rh z4u(*$70y{m4ur5T@!A`RDm2Mi)ESh}tqlkYW*wW=4i1VEOSHbEFD~r{<=?iTSnWYM z&$<$V!rB&>PO~IK>+6wNt^*c(gfmjL)N2^TEpgwxkk}AvDKA2jf z9bkHurUJ8@2F2yQI%rRW$aGOr{qtZK9#gEE7=94nU?Y*)t*v=W4C@j|<3c}J9P0L067ecop)57SADb^89BpxW&hEuZZi+ zvp+wn|NLJ+TyL|s1Y9Z#`41Cu#d1Y!CQ3U_&0Y5#C(1a^x=-~gkF$=$AL#LnJizNs zFj3z>CwZi{x3fGt$K(PNi^&^I-ei(zvdH8uCRds8o+hs|xxwTnlVv7*pEqixK4c9{ z@O~3;%Sns0o;K8Jf|@w@Xmf=5tSR|DHf-HR({QYjC|$2rLhdY4uH$z>^@J$neN*-} y_!lnT9HaDS5WVf<_k&lGw|F^|7wd&GN?(uNc7xk>z`y|&JLH6s{vfNFFaHOEyCmuW literal 0 HcmV?d00001 diff --git a/__pycache__/trigonometric.cpython-310.pyc b/__pycache__/trigonometric.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50571f0b4f71c3a4f1dbb128efc89235e63a4519 GIT binary patch literal 2070 zcmbVN&2Ah;5bmCy*_mCholWAz5C|-ZLp(@C9C86A2;p!;7E(kG)=Dtm9y_ZY&sa6R z5UlYf%Ud9%<>)8ifOvtt0Ae_B;AC<1Ef@HzXMemVD@*jMtEQ^k-PK=xRnC@|8v^6+ z7eDu2_(J@}#@XS(_yjZm8bS*#6S2+ON#wq>?MR`OcE1Z@@2if)@) zWeufv*2H6BYP@TvkJZ)*qx90b_d)2F-fogbrt~O7jHSCDnWv@7dui!Yq%eVgJ`op-uX(j6p`$*5zf zx0j{aevFUqy@T(FgYYm<`6H0mWmB%pKwAGoV2Dv77b5ftDHas4s6&*ho8`2`W|PG- zixn0eWF@Zh*EI;cxH_@suH(ZedB~r`nB`&Q7&%f^7LFX_GO}9s1>G>7b_($W2=t>G z%I6YUkRyM#Tf4}aDwGKdtRrU+tFJ;KXCIn+W#Kf>=B&=Ukh8H4Yg>E2{QBGPe-?i{ zJakQzZXB+J?OxuV@`@Nq;;_R;g$qMspK2i~RkV{6^WOqiDjYI{DRk))FSQ`HeZctD zH&H^D*>w)PHTW36oVNzDg`~A+spHi-Eay1AgVhO^g~cszLOXqzR*lrk;^&U>bBr3f znBJK4-k9^2&A{({<5$cEW;KhMU-3Njw@&`SIN{nl^dfM1<0a6_2Bw|uwh8o&&!81p zw93YlC>g|`aZ#ROl&|AGisQU=`Is4A$I9YWszorpg}d9Br_4WwsRF6R{N}ZVAkk}B z#S`dtXu1J`Cm zSe@kU!d`T9QU7^$(M}?sqa(d4;@gPgK4v~^7Zy(T|0i~?;Z4lbFCgY)XFg3ksI6eI zX}zjt+d= 0: + res = x ** (1 / 3) + else: + res = -((-x) ** (1 / 3)) + res = round(res, 10) + if res == int(res): + return str(int(res)) + ".0" + return str(res) + + +def log(a): + x = float(a) + if x <= 0: + raise ValueError("log of non-positive number") + res = math.log10(x) + res = round(res, 10) + if res == int(res): + return str(int(res)) + ".0" + return str(res) + + +def ln(a): + x = float(a) + if x <= 0: + raise ValueError("ln of non-positive number") + res = math.log(x) + res = round(res, 10) + if res == int(res): + return str(int(res)) + ".0" + return str(res) + + +def exp(a): + x = float(a) + res = math.exp(x) + res = round(res, 10) + return str(res) + + +def ceil(a): + x = float(a) + return str(math.ceil(x)) + + +def floor(a): + x = float(a) + return str(math.floor(x)) + + +def factorial(n): + x = int(n) + if x < 0: + raise ValueError("factorial of negative number") + return str(math.factorial(x)) + + +def permutation(n, r): + n1 = int(n) + r1 = int(r) + if n1 < 0 or r1 < 0: + raise ValueError("need non-negative integers") + if n1 < r1: + raise ValueError("n must be >= r") + res = math.factorial(n1) // math.factorial(n1 - r1) + return str(res) + + +def combination(n, r): + n1 = int(n) + r1 = int(r) + if n1 < 0 or r1 < 0: + raise ValueError("need non-negative integers") + if n1 < r1: + raise ValueError("n must be >= r") + res = math.comb(n1, r1) + return str(res) diff --git a/binary.py b/binary.py new file mode 100644 index 0000000..eebd9cf --- /dev/null +++ b/binary.py @@ -0,0 +1,69 @@ +from exceptions import invalidbinaryerror + + +def check_binary(b): + b = b.strip() + if not b: + raise invalidbinaryerror("empty binary string") + for ch in b: + if ch not in ('0', '1'): + raise invalidbinaryerror(f"invalid digit: '{ch}'") + + +def binary_to_decimal(b): + b = b.strip() + check_binary(b) + return str(int(b, 2)) + + +def decimal_to_binary(d): + num = int(d.strip()) + if num < 0: + return '-' + bin(abs(num))[2:] + return bin(num)[2:] + + +def binary_add(a, b): + a, b = a.strip(), b.strip() + check_binary(a) + check_binary(b) + res = int(a, 2) + int(b, 2) + return bin(res)[2:] + + +def binary_subtract(a, b): + a, b = a.strip(), b.strip() + check_binary(a) + check_binary(b) + res = int(a, 2) - int(b, 2) + if res < 0: + return '-' + bin(abs(res))[2:] + return bin(res)[2:] + + +def binary_multiply(a, b): + a, b = a.strip(), b.strip() + check_binary(a) + check_binary(b) + res = int(a, 2) * int(b, 2) + return bin(res)[2:] + + +def ones_complement(b): + b = b.strip() + check_binary(b) + return ''.join('1' if bit == '0' else '0' for bit in b) + + +def twos_complement(b): + b = b.strip() + check_binary(b) + ones = ones_complement(b) + res = int(ones, 2) + 1 + width = len(b) + binary_res = bin(res)[2:] + if len(binary_res) > width: + binary_res = binary_res[-width:] + else: + binary_res = binary_res.zfill(width) + return binary_res diff --git a/exceptions.py b/exceptions.py new file mode 100644 index 0000000..3a45308 --- /dev/null +++ b/exceptions.py @@ -0,0 +1,48 @@ +class calculatorerror(Exception): + def __init__(self, msg="calculator error"): + self.msg = msg + super().__init__(self.msg) + +class invalidinputerror(calculatorerror): + def __init__(self, msg="invalid input"): + super().__init__(msg) + +class zerodenominatorerror(calculatorerror): + def __init__(self, msg="denominator cannot be zero"): + super().__init__(msg) + +class invalidfractionerror(calculatorerror): + def __init__(self, msg="invalid fraction format"): + super().__init__(msg) + +class invalidcomplexerror(calculatorerror): + def __init__(self, msg="invalid complex number"): + super().__init__(msg) + +class invalidbinaryerror(calculatorerror): + def __init__(self, msg="invalid binary number"): + super().__init__(msg) + +class invalidoctalerror(calculatorerror): + def __init__(self, msg="invalid octal number"): + super().__init__(msg) + +class invalidhexerror(calculatorerror): + def __init__(self, msg="invalid hex number"): + super().__init__(msg) + +class invalidseterror(calculatorerror): + def __init__(self, msg="invalid set format"): + super().__init__(msg) + +class invalidmatrixerror(calculatorerror): + def __init__(self, msg="invalid matrix format"): + super().__init__(msg) + +class dimensionmismatcherror(calculatorerror): + def __init__(self, msg="matrix dimensions dont match"): + super().__init__(msg) + +class undefinedoperationerror(calculatorerror): + def __init__(self, msg="operation is undefined"): + super().__init__(msg) diff --git a/test_arithmetic.py b/test_arithmetic.py new file mode 100644 index 0000000..d225600 --- /dev/null +++ b/test_arithmetic.py @@ -0,0 +1,143 @@ +import unittest +import arithmetic + + +class testarithmetic(unittest.TestCase): + + def test_power_positive(self): + self.assertEqual(arithmetic.power('2', '3'), '8') + + def test_power_zero_exponent(self): + self.assertEqual(arithmetic.power('5', '0'), '1') + + def test_power_one_exponent(self): + self.assertEqual(arithmetic.power('7', '1'), '7') + + def test_power_fractional(self): + self.assertEqual(arithmetic.power('4', '0.5'), '2') + + def test_power_negative_exponent(self): + self.assertEqual(arithmetic.power('2', '-1'), '0.5') + + def test_modulo(self): + self.assertEqual(arithmetic.modulo('10', '3'), '1') + + def test_modulo_no_remainder(self): + self.assertEqual(arithmetic.modulo('10', '5'), '0') + + def test_modulo_by_zero(self): + with self.assertRaises(ValueError): + arithmetic.modulo('5', '0') + + def test_floor_div(self): + self.assertEqual(arithmetic.floor_div('7', '2'), '3') + + def test_floor_div_exact(self): + self.assertEqual(arithmetic.floor_div('6', '3'), '2') + + def test_floor_div_by_zero(self): + with self.assertRaises(ValueError): + arithmetic.floor_div('5', '0') + + def test_sqrt(self): + self.assertEqual(arithmetic.sqrt('16'), '4.0') + + def test_sqrt_zero(self): + self.assertEqual(arithmetic.sqrt('0'), '0.0') + + def test_sqrt_non_perfect(self): + res = float(arithmetic.sqrt('2')) + self.assertAlmostEqual(res, 1.4142135623730951, places=5) + + def test_sqrt_negative(self): + with self.assertRaises(ValueError): + arithmetic.sqrt('-4') + + def test_cbrt(self): + self.assertEqual(arithmetic.cbrt('27'), '3.0') + + def test_cbrt_zero(self): + self.assertEqual(arithmetic.cbrt('0'), '0.0') + + def test_log(self): + self.assertEqual(arithmetic.log('100'), '2.0') + + def test_log_one(self): + self.assertEqual(arithmetic.log('1'), '0.0') + + def test_log_zero(self): + with self.assertRaises(ValueError): + arithmetic.log('0') + + def test_log_negative(self): + with self.assertRaises(ValueError): + arithmetic.log('-5') + + def test_ln_one(self): + self.assertEqual(arithmetic.ln('1'), '0.0') + + def test_ln_zero(self): + with self.assertRaises(ValueError): + arithmetic.ln('0') + + def test_exp_zero(self): + self.assertEqual(arithmetic.exp('0'), '1.0') + + def test_exp_one(self): + res = float(arithmetic.exp('1')) + self.assertAlmostEqual(res, 2.718281828, places=5) + + def test_ceil(self): + self.assertEqual(arithmetic.ceil('4.2'), '5') + + def test_ceil_integer(self): + self.assertEqual(arithmetic.ceil('4.0'), '4') + + def test_floor(self): + self.assertEqual(arithmetic.floor('4.8'), '4') + + def test_floor_integer(self): + self.assertEqual(arithmetic.floor('4.0'), '4') + + def test_factorial(self): + self.assertEqual(arithmetic.factorial('5'), '120') + + def test_factorial_zero(self): + self.assertEqual(arithmetic.factorial('0'), '1') + + def test_factorial_one(self): + self.assertEqual(arithmetic.factorial('1'), '1') + + def test_factorial_negative(self): + with self.assertRaises(ValueError): + arithmetic.factorial('-1') + + def test_permutation(self): + self.assertEqual(arithmetic.permutation('5', '2'), '20') + + def test_permutation_same(self): + self.assertEqual(arithmetic.permutation('5', '5'), '120') + + def test_permutation_zero_r(self): + self.assertEqual(arithmetic.permutation('5', '0'), '1') + + def test_permutation_invalid(self): + with self.assertRaises(ValueError): + arithmetic.permutation('2', '5') + + def test_combination(self): + self.assertEqual(arithmetic.combination('5', '2'), '10') + + def test_combination_same(self): + self.assertEqual(arithmetic.combination('5', '5'), '1') + + def test_combination_zero_r(self): + self.assertEqual(arithmetic.combination('5', '0'), '1') + + def test_combination_invalid(self): + with self.assertRaises(ValueError): + arithmetic.combination('2', '5') + + +if __name__ == "__main__": + unittest.main() diff --git a/test_binary.py b/test_binary.py new file mode 100644 index 0000000..0855007 --- /dev/null +++ b/test_binary.py @@ -0,0 +1,73 @@ +import unittest +from binary import ( + binary_to_decimal, decimal_to_binary, binary_add, + binary_subtract, binary_multiply, ones_complement, twos_complement +) +from exceptions import invalidbinaryerror + + +class testbinary(unittest.TestCase): + + def test_binary_to_decimal(self): + self.assertEqual(binary_to_decimal('1010'), '10') + + def test_binary_to_decimal_zero(self): + self.assertEqual(binary_to_decimal('0'), '0') + + def test_binary_to_decimal_one(self): + self.assertEqual(binary_to_decimal('1'), '1') + + def test_binary_to_decimal_large(self): + self.assertEqual(binary_to_decimal('11111111'), '255') + + def test_decimal_to_binary(self): + self.assertEqual(decimal_to_binary('10'), '1010') + + def test_decimal_to_binary_zero(self): + self.assertEqual(decimal_to_binary('0'), '0') + + def test_decimal_to_binary_one(self): + self.assertEqual(decimal_to_binary('1'), '1') + + def test_binary_add(self): + self.assertEqual(binary_add('011', '010'), '101') + + def test_binary_add_with_carry(self): + self.assertEqual(binary_add('111', '001'), '1000') + + def test_binary_subtract(self): + self.assertEqual(binary_subtract('110', '010'), '100') + + def test_binary_multiply(self): + self.assertEqual(binary_multiply('101', '11'), '1111') + + def test_ones_complement(self): + self.assertEqual(ones_complement('1010'), '0101') + + def test_ones_complement_all_zeros(self): + self.assertEqual(ones_complement('0000'), '1111') + + def test_ones_complement_all_ones(self): + self.assertEqual(ones_complement('1111'), '0000') + + def test_twos_complement(self): + self.assertEqual(twos_complement('1010'), '0110') + + def test_twos_complement_one(self): + self.assertEqual(twos_complement('0001'), '1111') + + def test_invalid_binary(self): + with self.assertRaises(invalidbinaryerror): + binary_to_decimal('1021') + + def test_invalid_binary_letters(self): + with self.assertRaises(invalidbinaryerror): + binary_to_decimal('10a1') + + def test_invalid_binary_empty(self): + with self.assertRaises(invalidbinaryerror): + binary_to_decimal('') + + +if __name__ == "__main__": + unittest.main()