From c88c0c77bef3a7252d14ba2f5e05c0e5113360c1 Mon Sep 17 00:00:00 2001
From: Christian <s224389@dtu.dk>
Date: Mon, 20 Jan 2025 15:36:08 +0100
Subject: [PATCH] Finalized library

---
 ast2d/{main.py => __init__.py}                  |   2 +-
 ast2d/__pycache__/__init__.cpython-310.pyc      | Bin 0 -> 517 bytes
 .../advancedSettingsWidget.cpython-310.pyc      | Bin 0 -> 5496 bytes
 .../circleEditorGraphicsView.cpython-310.pyc    | Bin 0 -> 2195 bytes
 .../circleEditorWidget.cpython-310.pyc          | Bin 0 -> 3486 bytes
 .../circle_edge_kernel.cpython-310.pyc          | Bin 0 -> 999 bytes
 .../compute_cost_image.cpython-310.pyc          | Bin 0 -> 1348 bytes
 .../compute_disk_size.cpython-310.pyc           | Bin 0 -> 708 bytes
 .../draggableCircleItem.cpython-310.pyc         | Bin 0 -> 1851 bytes
 ast2d/__pycache__/find_path.cpython-310.pyc     | Bin 0 -> 557 bytes
 .../imageGraphicsView.cpython-310.pyc           | Bin 0 -> 13332 bytes
 .../labeledPointItem.cpython-310.pyc            | Bin 0 -> 3379 bytes
 ast2d/__pycache__/load_image.cpython-310.pyc    | Bin 0 -> 569 bytes
 ast2d/__pycache__/mainWindow.cpython-310.pyc    | Bin 0 -> 8025 bytes
 .../panZoomGraphicsView.cpython-310.pyc         | Bin 0 -> 2189 bytes
 .../preprocess_image.cpython-310.pyc            | Bin 0 -> 996 bytes
 ast2d/circleEditorGraphicsView.py               |   4 ++--
 ast2d/circleEditorWidget.py                     |   4 ++--
 ast2d/compute_cost_image.py                     |   8 ++++----
 ast2d/imageGraphicsView.py                      |   6 +++---
 ast2d/mainWindow.py                             |  10 +++++-----
 setup.py                                        |   4 ++--
 22 files changed, 19 insertions(+), 19 deletions(-)
 rename ast2d/{main.py => __init__.py} (85%)
 create mode 100644 ast2d/__pycache__/__init__.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/advancedSettingsWidget.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/circleEditorGraphicsView.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/circleEditorWidget.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/circle_edge_kernel.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/compute_cost_image.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/compute_disk_size.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/draggableCircleItem.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/find_path.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/imageGraphicsView.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/labeledPointItem.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/load_image.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/mainWindow.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/panZoomGraphicsView.cpython-310.pyc
 create mode 100644 ast2d/__pycache__/preprocess_image.cpython-310.pyc

diff --git a/ast2d/main.py b/ast2d/__init__.py
similarity index 85%
rename from ast2d/main.py
rename to ast2d/__init__.py
index e1f76db..f15a7c9 100644
--- a/ast2d/main.py
+++ b/ast2d/__init__.py
@@ -1,6 +1,6 @@
 import sys
 from PyQt5.QtWidgets import QApplication
-from mainWindow import MainWindow
+from .mainWindow import MainWindow
 
 def main():
     app = QApplication(sys.argv)
diff --git a/ast2d/__pycache__/__init__.cpython-310.pyc b/ast2d/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..b27e7d2af13426ea3e07b8356a8d4f3a3537b643
GIT binary patch
literal 517
zcmYjOy-pl45cceP_cp78Na^zcmx3Y^4T?}ADvBUZ6i8+z%UWB9x&4#J%W)D^N6j<b
zm3gIYQ}GHZLdF|`7-?oa<MB7&jN84voRP?@r^R3LzeDg|A_~5f;xQS`G*nCkA5~CC
zA_Ask&8xWPg3~$C=_3<~N%dqIxz8rqFv`NksI%;uFxc4)hUxrA*HyMu-nPv%P?nPU
zPi31++vs*xhQe0~6gcS#DSjd2nTMNb0}sr{8}<PAu;n{y<YAlKvu(O#JD|4gf>6(9
z6Bhu67}q#(<rcRtfC-M*?P}oW&UzwzXG%GXM69|_q^ps`FXl2T{Bv3!6+Ie<MS1Nk
zdaIg38(jLfD{fTNE4S<&_E>nQO4}?X_P%!p3x)oxE~K=L^->;m>w(uaVM3r7kaI{O
zgHPbX4-A=<;Z{l_97@E;^Yz>x9?bov)eGZs97E)x=>L+&Io=*Osy0%Nl;4>TBlNer
X)qQ1-!=iDYOva`#g)GV@Iq;W%cgcGV

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/advancedSettingsWidget.cpython-310.pyc b/ast2d/__pycache__/advancedSettingsWidget.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..54244ebfa2b2c008c1d1c29dc26e5e41c97c324a
GIT binary patch
literal 5496
zcmb7ITW=f372Z3qq9j^UWGittb`pz;tvU|e2F;~*)Wl8WIF{uk=tAgr#TiLU?}eUS
z>OxQttz86tXn{TzMcRUT4A6hkf3dH9a(_aABK^+nQlcy=Kq<`ZT+W<1bM8m+#6(rW
z&-(eFHov%_DF3F(_|L%P7FrUZV+vCPB~%?X)Eq6;9X&K0BQzZ|v>YoeIVF`~w4fYT
zoJv@As$tEk$u&KwhZD|(92-HynFO2}Ooh|Vw5r@un8iv@6;|T<6WwVtV^wLDpW#NO
zRmy5B_j}3KhrKk7BTT;hFy6iE?Zv$`E3JIxvrSHe)xc+5WY)@EZ=DAKyCZy7fYnx3
z{XV}R2Y!36r33iBzZ-g80DlsCn>?$otZv0SA8qp}ZK;{IlHS9o{CPL^<H!rzM8^29
zR7{e8V!#zgWs0LQ)zR5SrgMXv=amiZYh^=a1~Z>dI2N;bsaPqo^3%Fg9$TrfDpo42
z#_CTMr^+T+1K%2(<n;}WO|j{xhBHyjn(Q2A4K~9kJ5y|y`VE84u@|s9&0c2b<@yEQ
zWDES<hQ(fFFFiG#nXeT?ac03%JDa=Bw!Ns$*(y&{KiW)k2KN6|wecf1Bz78aZU)>I
zo*%8pJ6G+tFWQ)M=BKf^Y6pJA?IeujbPEXVL^2*wag+)#Nk<D3VK?Xj-%f1%#Av%K
z__oh+#o`E>vuo=?PYBLzFJeHFq^%`+^x+oIPbGE;N>Vi2OS-(Bf-*?P?senH7CeDy
z^Aq<ntLq5}v8|7Z%fi@1qqSs7Q<PMBq72o6cA%=tKpiM9WQSgty^)$vlzn}m46T7q
z5NQc>BP}!S2|-l`N~hAP4r}<<B?e<SL2FEB`hgDkGBYG(1FMY!QtM2P!8QPEO4uo8
zN!aN@j%Ave1(s%dt}`R|W`SpRILDwl2O21**$b>B@nPJVm$aN8!#@iwBm5PK<3fS|
z0;`_DzW|I2z;Cizfqwz`%>w_z@WrEXao0;@cP#*;ylbEjFAj|S)bM2{c_Vpgrc-P}
zQeopJd-w`oc1gmSl5;kV)2SzTnR^)!m&YJz_G<cC=XGk5y8O)L{0wVIyjO7Q%GjwK
z=E@k}ML;Z$LD1|pyo-`9dWn2LQ(-fc{fkl`VIKB!93`pfwP6Rj%F*Jze&b<oF%NQ!
z5h_%zKfCM&{yJ2Z+n;g~@xUf0^i1wG?;f|I#kX6}NI##wO(!RDO>Rny*O#up)p`b{
zRi4eD^M8%w{rS;8jON3_c%&oiH<!tjqSRjgeD$II$!E9keAH@XX431zHI`l1kNnhi
zv${(b<?i?qi+3;!V76|1-R=6jS)-W25NR%mtgMpoH20-~oSz_qoaTBOxw)@!3ty3y
z+VHWDIKv>0BG_uybmJ3H6_2sp?>N(hBzG`w?qITJ+~v=$2{K|y+PZt_c?4Ots1qsG
zU&O-igKJ*k%#wdPf^u{J<dpG*2VS(v<>*T<=y9jMO`qj0T4vdKqV&|m*#wxf?&3*O
zEY9R;G(tWB<g0Lo0bfmdH#<j|o`cEg(K!#DNq~O_S%ke1Y)H492GH|>M3DMv0Kx!p
zJMcH75W;k7a=45kq&Q!I7PN5Y7XH)8i5SH>Q6|PzKHBZVuYxpZYIG2SmA7Q$E7Cu=
ztjtJwu;J9k^g~P%qI@NgVYhgH93)^1#bIYc9v@A=RkMogwxLyt>wc?z_f`9+YrTYv
zWUaj={3P|gXpQmYQ5tvGI$qTC#G{@_ddV8N+Xks_(o1`A>}ycV8*I%xHDWDw_rx41
zn?g(0(A5n~wKQr~)zYi_lsctW^``8n)VkV0%hyJ;Vy;y+f~Wnm)=-=H9-lR|{>!I_
z&80(=GC5@rZ8D6}kH%y@GVm;7Py`-TIvHiC9VnuSK!fj4KTwbv!QDugqxEmtUv2To
zP7sfys|b6K>^!m|HWwj}Mqaxehhfa%W0vfDEkn%W78vU&nQ`j*sUk_LdaTn+ps0QR
zttPGjR$QfyXcKQx_a=4M&^c%cX;57&gKNh3efta!9A0+z+vkDj<lFQ2wzU5Cp?m$5
z^RAs9#eFYDLI8(`kbf-lukV2g*OE3IY_xfJI)PV)M}*TtZbw;+L>2KJTWY>di9#~w
zwp)76uUei%$n+0Brq?BYlEL#J5kCU$&ok&c)_#MQP;Oi|>uUef8O#~O+$P6A`jJYI
z_gY3vw$LFyLG(RU%+m<jiPF(XDN>_jqFD#}e!f;36zbC{OZXdrEKB&xbMP8=D#KEq
z=ZvY=?L&q=$a%=^|C@7FK{CxO5&>u8HJTX2-`pKfk|1x(T<rm+YR=56Ocx&tFG@CI
z5z=DhP*lk?ad93P#OvrF6jDs=Nz`zOPHi+qNXpgpNLSwiEb%Y7h^`6`P*x54`)}QZ
zRUgi#Oyj%$Yi9`QxWtdiiDX7*EalX|AeYX_SfRYjhulQC2QTa$vRl&OA|#Ho>2+DY
z*nVOcA#z+3HSq$FXN}|0w58@oDxZ7w=9eTLcr#JfF#4^t-gPqYnlj*>u+&3UBnjkC
zL^7;?gG%o2G6}|-*3pMXu6#^KT4eN(6zTb=QxH8-A<)yqc$>4Mhxe!M9*11~PHo+5
znZgDgSqbX#kng5BZ>loHxKutk^Vo3{Z+kNiiX_Gjc(j>rwF<X(6X%~-l~=I#J2Yvv
zGe%SGU;hEdotg(6W85(tUIOBQ%G3pApX?46%(Q{V^luDi9I<ey7uINkfmZ+BGj(T_
zI~29lDXiPXh4}sIR=>J@m@W48r5hXK$5^Lea0y@W6Y8XLO%{%AguAdbLA=VUP|7Zn
zpU^*HVwbW12egE8u(C0SaL|9_2RJvvU*tyF^k@O8iXU#eQ8%kmnO97X)oP@O<W!}-
zk()($1YZwSs>nJDI10Z0QQJ2Ln7iu0Ko5Qw;WJmuTZdfzLV9v(j7Kz_C^w5D^GGWn
zqWG^w<fQ_5G;lJT0nx4}gtv!$*L|Ev80i9Y$3<QUS}P;!yBLf2&^cC~Q9EV%TFRx5
z8*(<12=kLJ5~<|RIF(e<RgH#BWe{0jKZDbSFh@r}&UDZx-pAq05*+DMbd0ftmE<QG
z`wt9AS$m4GC@>7vp>jY)uO_adj8hL3^vFsyFnZri^?^As=9MR4{Ub%Z%JczBWv2dK
zdryhV5Crye2q?dv8bcHNIx`Tm2-2KEDUA?@f_2{-Se^2kwqM#WrxlE=gYuv>z_?R;
zV(wScIts$d0To?V|K_0>m*Z%g3#0&c)C;?NwiJX+f9&EPIY+X)w>kZvYrp;LUmm|N
zi!edi;j{12wHlexj=OuA9{LeFZx<X}PcjYaXpr(}7P8H~F3-#!{@L&jil!|ORTD8T
zGmsH@&h*DJa=CY)2QnnRBP!T+DjOmWW&PEv<~nc-%TgAO0b<=u3nR2$r$n<GH*aR@
zR;KPa)??|@o>L3)0Z#u7Ey2IzU~q<vVwA@=)G6er$ZEA2wW{{tJVP~3Q`VM>e`$T(
znxi5x@<NUxu<E)<9eV+d>#qB_=LN-1$#q%Wc3m++?;v}WnYO6Wh_XXLrYT741qGu_
z2gd~YS3%A~+@ZBn#H66a&uC_>$8jLpC7*|aDz6XPJP2^nkzvSORHmU6Zi)K|W%*^r
zQ0L9&FPm1mT%KuIjnZ8CQcVy{>s&T@e{UtdxwMkziEbk6Q(3v@)RSA0C1hT`QeK<Y
zMrZEy{G2elOuo^nkM@?4QOcAiGo|k3PqUyWNIY})5D8=S%a;)SS^2%3y&q5#kx-fX
Osxo7s#z1{Bqx}yr$-mqH

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/circleEditorGraphicsView.cpython-310.pyc b/ast2d/__pycache__/circleEditorGraphicsView.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..6f9e5767d207f9cf7705b7cc0f922fbe0e7538fc
GIT binary patch
literal 2195
zcmZ`)&2Ah;5bmD8ot>Sv7ds&#kgyO%Vk6`OQaB)lfFz27f{95)#IVw6Jl(b@o}Z<=
zC&sJs$&qs78Fr6(173x`a>^@k2~|Do)e<Kyb*uX8pQ^6<s=Dg;0|M=b=+FJXeM0`h
z$!c?8@-1}9U|@vNoD?*og%w$pFpJr_T{w{gGGR{c7GC5T+08qJANfT$>Y9CC9u&Q(
zXVyA-SoEVlCHDyPS@$_%UGALP(HaXLkx}mzXd)v^_jm4zWO9(D@|TPs>CVoRjO}yv
zisCZWn-7yRs;Xjj6TsGvg0sDyAFEpOyU%#3VDjXE^W04E;2n|d?<c!CznzIR=l2ya
z0QP^HsH`fJJVpJh&0S370}wcgC?k=@0%mcWJ0Fle>jl}P%x2E>e&jNjdke&4o#$cH
z0mNS*_}Vb)z90^X%v<&4)`q(*Q<YeK%C`0<i2(Ccd&L%%&$@gcCW@Sr8EvdNrKF(^
zi7iIKiPrR5FkH0TRVkIIQ&6zA1h+@Fc4a-`Li=%?m6?iTeKAgrM`CWwiI0rKVW%T`
zzNas|ZB>L|#Y?KYah&FflyUr${QGPA)fn6_<TyPLnN(R)jv1GSs+x?SCS{$7!&=B%
zj+IE#tlW=ft!lyLIFafLHg5Ht_sQ1eSge6Mq^v|{hE71IpS;V3Tg!*J9Ep%xaOAAv
zaqQ?#IfbF2GcqTNKD7=lajPLS8xUts=JdpBz^gR{)H<;n+sHSS3zBte$(xNm^XBCI
zinyvejjjAsxKDLwK?6GG)+3^N5VHVeh?$9&JsmFtbANBB4)_qgH%#*^J(R<$G*Ii6
z&xc2Rm~*uP4KrZy@E|E!&JAo{yAo?1?pAflz|lYRRE<LI?bb?FrSRb0I(WeM)b|F^
z9$xjG()Og1x^s}oL@A+zmWh}sI>=-Od`ilci!K}&=v2L4V7fho5K5C~q7UfE5d++T
zJdHy07|vqUpsh@a4P3i`!$llEhT%Qv5}`F`&GM;ZZBU<XybkQp8qn!y?+o-C+W!}5
zG;$f}zhKe^8iKk=oMqr1H};9sI3~O|lm!xo_eSH)YzXhU6>(Vsrd$Z`W4IG2FzdiR
zw{e+$=!h?wQ&Q%hcyQhayra6zX*!K}iJV#|KA=J4o3tfQd$VvM(^-E`T3V<zpvn3Q
zO}y!EZ>5P$MV05$gx+{!c!c$CSUm#{A(>W~lLAflTb8uw^2Tj(37jLax(f8ytJly*
z1MwjOS8(_UhpRYT!vP(u1Gp~dcX+N6O^>xF5|-6c+ePw+4kTA`3y5{xyjf3JqIfLx
zjByb^OY)j)FG*8AQHC)(FqXHKy1T-jKJXE$)S@Cq0g@;NN^>EGc(col1&&mF61i2*
zVxirVAI0KLnvG!lb?EX_7<{N7Kr_0e86CiUjRrI{_`sT8e<$fyOr_hS9@fz^DLB;8
zAdZWQ)j7&x9RFS?dAlO8atSOsrjCgYN=SSGe=iYeo9-_PY0C3Fj@tw=Sz_|Vq)HF=
zq4y=8^2ueo(YdlA5ZxZF>-C4nJL=Zfj%xo)X)@F()ti&^f2P3iO^0WPZdZc0b)k0#
z-K(?KQdFlm+4=9Y<$|Y<Cs1SBN1`<=#xL_+`(L-d`39LLv78S`2>u>G59tN_KT6m`
AF8}}l

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/circleEditorWidget.cpython-310.pyc b/ast2d/__pycache__/circleEditorWidget.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7110c576008b3c637114913c35c71e289f3bb45e
GIT binary patch
literal 3486
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
Bm=*v4

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/circle_edge_kernel.cpython-310.pyc b/ast2d/__pycache__/circle_edge_kernel.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f3c7fc0d04717ae6aca9d1cdc4d35d53995bf69e
GIT binary patch
literal 999
zcmZWoOKTKC5bo}I?7D0~;wvGjjR<DIM3aMu5JZjV2u2W=m8G5T*`4fc&!)S_WWp>2
z^x#E*gC6}$ef6||K|EMJvk40pbX9eAJ-(``$yZi72<U6?`*7kT^xIvQsRfr8aP%`^
z9C4hX9tKG=GVyvIM*JH0h0g=w34a~&P~hVr33-dRzXZLI<0BMx<`9bxBW&AmrY6lL
z%jN-CY&ah1^jz3bF`gD0q%eh&F>(G2asb>pfTJ&fRhZ)fsZIqT))4nL&<q=Nj4M>3
zgc!p8Z)8R)JoAiKq0jg=`tWe(U+H&efk8j~DyTdceFIhgrFIAX#IvvpD?G+(-^mSB
z5qJ+0vX4&gpR88|+6mZuj8KOH9Vo$!po}(+(6dX0DaA^9I?A=6pIBB1O;Z_zH{7#S
z3Z}BM&XA~lLZ4D*s2K?w3u%O+CZ{`Brc}k5pda%>a;8eU*~}{1?$q%w)ll!%n#0q;
z*rV?tmzylzJWaV7Q6@PZiF7zJ5zUjj)L1AfGFk)OzDm#}ZxY0H<wu$}#%=nlq+BGd
z$joD^1t8ApW>ax%Cwj8GK=ii$hRdMpO3OL71Rsj6(;ATAw1LuqIGn?5(cEnS>`TB+
zITcZ0iJaQtT&P^zAjxuOY@nDN3hV0=WulgX-9>7#RCPTYHp8^IwD`>WJk{nGQa8cx
z&r!VBFSJm)ACDB+QzrXd=&{MC{bMEzrpATRh3*^0;#3X?x`4eDy3e%P<^5(b1J}f0
zfqh!q)&I>7lwJeY?smzl=X+hRi|^q!zD~#m`Rj-3Hatc|c_0p>mJMVvnU>1^k~W0a
rp|*0PuwE*SZMhAAy{e<?PL|j$=hohz<h;nlb2mgC0&Al#en9>KR<{p&

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/compute_cost_image.cpython-310.pyc b/ast2d/__pycache__/compute_cost_image.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..baecc404908466ddcdf86b320446ef6c083b0be9
GIT binary patch
literal 1348
zcmZWp&5qkP5Z1qB+1_<FMVli}1q=i}<hUsMgB)@Tf~JQ;HDE9z?PW}f0!bNlDxaF`
z<{6S>E_oo`iXMu6g`PS?d1E7`z|oK#^5c9nLp7b|9<<+zcbk3ed4J>Jyp3V-BXqL^
z!93<muks7uM?H{16&4}rA&X>GMMdQFSjJUc#7<9SQYA&=^i-x*TBM+RER$I=VpnX;
zb2i~)Hidq{C+w1sUQgFKo3RIP<Klv4FTMH0JHYnlejk^#uJ@qirK)#I?)VdS=MQTS
zN>w$j<trx4c4fpHj&@Q}wh|TH;Aqxp-e^^FV?NJal|q-2uQ=QA)t2j;%jb6?9Qn^5
zUwwM^*PFLL^if0YO+Ri8*DFn#XiXm*v8gCrLyBf4MI~&XXl`3wml59e*e38#pg)Cf
zeg$E@&i~UtMAq*-_{TQr;x6by=HG^g#D-l0vuT$eG8=Uf3vT_x$i`jPjgVp%-$sYL
z%ikv-ye@y_vE-q57<Xf!D5V;B$O*Kk0}sUBa8fE`iF2Q<l_r#I#E#d;8FcG0LAS`@
z)?-3zMpR>ks;MLm)wJT4YqM|%JMoj=m}{pY79Md;egP!Zh*b{t2q+{UHlpPjd&7nS
zlBl)Yf<ZeOJ9Y;%W8qFzGs5^zP`sJ*<QZ*^5ws?zQp(<ldUM)+3d(SVi;vp{Sz|Rd
z7R*l<UF6Q4pI!LQd_%9!_@f5sd)`(r_JnFp_XFNM&{K%3z5p@zi)6^WA~L{SAFYLy
z^PrC^#dx2+QZ2f&zrz%nry9!5)0iGQMG>ILP+<D?VMTwRPc+t_#ymRVK;7J@co93U
zi^)I($6VhOBUdI)&0mQcAf28J=?%-r;$eM;4&vfRPk#*{|Gq4*ml!IuEN`>`rf9un
z+-$9Cmal2uQoU`pY0VONEP=+AX(8*mSput1*z&#xkH<pUEt-9Q_5bM+fSD^0*)$6;
z!Yqu!+@JZgFbeb|m<C?aMC0Q$zbr1z);YRZbBcJ5EbzJ%&3*yd0_o~l`;t?nvybbx
zf?EW2(}%|DJ`}a><25`Dwofr45KRZ_C^!?};O^`@h+ZrC_xR438HkBD@$bLP|2Fs!
DYv^^w

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/compute_disk_size.cpython-310.pyc b/ast2d/__pycache__/compute_disk_size.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..7b117c107aaa6b8248d9f11a59c2d464176a5243
GIT binary patch
literal 708
zcmZWm&1xGl5Z3N`9mlQ<fk2`3phF4xP#@ZxDg7b$9+IBI!lFpBt$Hmj8i~XqxAfd+
zXpeo2zJ{Qu9E#7q^-wy}2I95@Gn$d+=le!xJRTC1@6SFhzGZ~m#$Z?WFnEIsPtgb>
zvWA>xVjv2ci=He*Df4+>^u^xC@~kJaQ!?4#VkUX_<3*C6ufxcLw6$eIc?b`E3!F8w
zo-^)@4Sg$}x0>g%=uV<vq8_8d5gJEa_Bp@KM0QB7$srN>Bk~2K$B3tkZsO$P>i3YM
z9Gi9PouqClDX1$+%{=)+!HPOV&m~1jf-0S^xdBJjnk^*dsggNm^mLedy|oLNB`<c~
zVKSrdv3<uXc52n7Y+!ny`WMeGyW>pHH}qnu`0^f9LV2N@CSmI;#T|l^w4fajaqhpg
zy1Co9xh;Mp?jjUQyO8TP^te>bB)0|L+a8*)#E$Uzb;4&=WCRsoS_MuqT?q**XWHrm
z)1KLtx8R|2mT{#QHF*3h2^9nPTvXk%WF6O9M?lkd6Au2njbkAKI~v(B9+S+*Xi|n!
p`*pjq`xw~)no!Og!(7Tr2zShb_&#{KHo`aZRip@!%78q{{{S#Mzsvvt

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/draggableCircleItem.cpython-310.pyc b/ast2d/__pycache__/draggableCircleItem.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..e52caac1a41facfb0bd0a074a987fd9d4c5e1234
GIT binary patch
literal 1851
zcma)6&2Hm15GM6!S+Nth>w~vQQ=>Qc5G)GxQY?x#ZX4{OY1|YjAQ%u7k#>}oC6}bq
zwV@n}1lU`jAwKRa@!C^fVGnI*C_ByqIg|p2GsC}``97*>w*vz0&li79-@AnTjmG2V
zfblJKc?yCNMl&*_A)Q&FMbWl0d*+1B%njX{7kb8LXN{R3`bKxM<}3&UN{$J0nRiQ=
z$LWn7?y$xg8Tj{bDj8V1J31Ee{31={4_TJZC4Z&(Ot&ArXbx=cj81v3z0r{<<pqqx
zA}hpzYHOrG`ajQATI6w-;Hi&WYi-C76i!0QNN6z{+RWn4rOWJz%^dDA7rF<%!5hry
zK5srJli)3xP}XF@Z95Fu4)-P&Yq9pN13B!ny;~Bt-V%p|ZOEsipM5Xl=`=pi_%Ibo
zX7X6R4EoT%>p!IPD9OIMh*dv{^Zq&SGu+HsKNdxqvqQ7(z6&v*X!=Ieh4w_u(o$+S
z!OXQcj|I<F;yp^%2fYE^hAyu_C~`yYD8tXH>@Hx2vT|20C6!%~$WnIY+|X-JIc98B
z<j$?U6@__n=T(ih)=>Us6MAq&K<*rowZB!-%I=X0&h3#E^1_B%ILiYQKc+q`a;Zd_
zs6y09p;J%@?%o1%GH7d8mUAw&A4O@NswmP{Bm}Zg04<63Bv**N4`Yo!YCmT2R0=#I
zY$HWp$)AcVEWYm4<{8g;qR<n5ik>r`GkKQqoSzmlMYaqt;(W?weL*1yzIG(fCSnJ#
zM&5`vid__YAhbP)Fx+!w;5(|DQIuq{lu`7Ky#F=%dR$5_<T$wysZ?p4j~SP*RWTo5
z#(5cw*QJo994iqgX+Di)sY=1+IF{;5Ha6&gNS(v^LVOIj;v<zk5c`fteaoi-e7@~a
z>tDz6{^_~P{U?Zb_)ttL60FjuAzzRqL+Ek>0&pfPV9APHTYx5T0zCGbGt_Vf<jOIO
z*sQcG>&{sLhfwy&wF9<mY>;5PhCL22ZOe%*{AXMN_j$i&bibGwD>1L;fjEXEq5~10
z3>x7_5|KN?w*l4r1(4MqcoY}n87v7KKne72!3(`vam9}o15Z4M6{3&Jf+Ay4y)O)M
z{>Mi5SUQ<RZ^C+9hy&bV#Al%C08WqUXwfN=5-otEM_aUGzU9GFAZ)iK$oNe|9lOB*
z0jbC(fp<ff+ZrAJpBfFQ$sPui;)hWi_I?4UOT^!EmY+NoVx84s7oT4q&p154Ac|%M
zD>KwvQS^HmXX}|p6tN<SB7qFjw%|;=ldOo9z$^s*e+2$~3~|NhsNoaR?e$Yhc$UHL
zZJhhK1WPQMAn*{0eD{e%U)a0dPRsaD1}(jJx)`ai4oB*@lufy+pT4<F?`)=y%XItS
tFd^yIW^PyrUWe_e#T+<PM~l}!if0SC|FW*ZHwcsoszbT}cZ+td{{Xd=%d-Fg

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/find_path.cpython-310.pyc b/ast2d/__pycache__/find_path.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..cb04cf6448adf91b543234b99e84c26abb94d721
GIT binary patch
literal 557
zcmYk4y>1jS5Xb$o_mNc&3Mf*#-R6o2ng}5zprME&fhblht(>)Qcey=#HMWaGdrd-1
zYF>d?+LkJ>fKo8t6H&&R@r?iW&tu7UwMq%v{KH-SixToD7Eg^~@ebXcVNgWTj_hbo
zDN#)EA0%fg`Ao9eJ*p(5;|s9C>(Vzk*G(w_<i3iG|2D@Y`g?Tu3WFyDy`_q7Ii#K{
zc1v&QKnr$Y2kzNG1~zcTRq`{zwd61xru#1MBlP?0E880HgllZ*l(^PHimr8D*o`<B
z{Ulxpr?nE&DB&g4+ONN4e4IHf{K&OY`SVTax_wz$V|3-ULYa5kjOka|1^p4g0>taG
z`IuJL`Lf-~T95N1KVL+C2~~b_<YPK6dg+^(B=Nv+0;hQX@2Bdb2u_15ss^ylR+>U-
zxAnF!zDW}#Yy-I93J<bsO<lU+187%B=g(EKX^ko)c-`;ElgEl9+P%bZ%9eD=(CBfb
v56J?ap>Ub;eC4)N+v^%+-%RhBw5hWvVTJq0<(r*Vq0?{iOAwbtHq!qA0mPI3

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/imageGraphicsView.cpython-310.pyc b/ast2d/__pycache__/imageGraphicsView.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1aa5867d7d89d02a091b26f50864c32e42ffc379
GIT binary patch
literal 13332
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

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/labeledPointItem.cpython-310.pyc b/ast2d/__pycache__/labeledPointItem.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..978aafc5bcc2653043b1d103e1935c2baf21bff9
GIT binary patch
literal 3379
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

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/load_image.cpython-310.pyc b/ast2d/__pycache__/load_image.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..963948684b5ede87065750dcf44efdfc98c3ea73
GIT binary patch
literal 569
zcmY+By-ve05XYSl+A2~J6C?6S76v4i3L&cUAw*#)EL4#yD|S-T=0kT5QY%Jgo&iSQ
zgQv*K#49jy4v3bMeD*oM|L^Wnbh`l~OAemXGl#Jc8?2j8!7(k|At#x1=4{NQs~qV`
zKk?;;Y(4p7S2{N=Y=6=lc3u0WFw?pP%2bdqyLpwBi@jV50I`S(@@MvJ0RvjNNzSkr
z=aKxq`|6UQvwROY*{~22xyZTBM5=fKMaIokaV%A=6Rjjq^jvX^<vQmnaWEEilND0!
z1&u}@QtUM+tJpl<MFU}v-;&ZQ-xQ5>L;6h}HI1xg|Lf>SU`{1c9V_&&fQ5x#?ZprK
zbxUWUgdA^OT#ZiqCzJD0|L$hcAD)H|xYYd{gBERHmvJwuPyt5q6f_zw@<=M2nWBvD
zMP3P*Re%*n21Km$bb=L4T45y6?90fOGWo%mi#k|^o*lCVZ3fVxE%d-nzxHSj%|(M>
Xb8Y*zb4XLH=IY4)Ewl+8w(Wic{Th{l

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/mainWindow.cpython-310.pyc b/ast2d/__pycache__/mainWindow.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..71fe376075022673956a3c4d2a4f79e811b528a3
GIT binary patch
literal 8025
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

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/panZoomGraphicsView.cpython-310.pyc b/ast2d/__pycache__/panZoomGraphicsView.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..f12867c40be921a81b1059fd4ad7a040e88e610b
GIT binary patch
literal 2189
zcmZ`)&2JM&6rY*>@Y->VDWT9p>6W%qEg`q6+6$`MLISiBSV>7+X=Q1(>`anP*1PV^
zEFqRTfyAwUgMH**nrlzod+Mq0&6>oHU{>?|-h8~7_j|v2F4xyv1e(9~_x@Ickblrv
zZY~%<Ls#E`;DpnhjA%qhEMgRGmOCRiaw&O0xWnC-gu8;ia3YU;k4eve1G`9%nf09q
zG8rFasrn-m$7XHkaW)a#WuB!cJ!;sFPI2LK!-KJ@0SG}N%1OjHjU2xIitJH)STl0D
z$NiTi^6XfH2QP!jw|bMeKyO%mjkiG$UJ;i>O}JLaT-r{Gs4Pdzx0>v>LTGowmAi(j
zdXnaeQlUObG+5(tDYXj6Nl|3QewY+IoPa0Pk28G$%S1RTD<%5Y-5_N)j#{9OkvY)S
z76?sVkQtrQIi+MuW=uPW?n3uK_fh9`O5z5G`8a?zP2D<N!#=kufOy#8ey?pjxSNnB
zh~uotbR0)(O6V<_>^~~Gka%+B4@w+}uE5N$ObWGE%2A@Tvba;E2c?X<_3!Tm?0AGh
zfV)McriEIpbRxA`2M1><lo*a_-g^cMH~;|&ca_NZj6Y7KDD-P;nsIDVjN{kjzuolq
z5PVBDOb=wHbe0rDF4U1O$HT*<s1kWpNmZ$#mPrc!VpZu%3N=iW{+18nl=Hdkk544f
zmjuvN8$_Gp=fk(*Os;RgW5-*VR`P?n!M=%p?t<X-Ipb`~u94@?l+MT;vNZ>)AGz`}
z=4%Qc=ArPd<xCy4V5KuBkU1B!<4ryd@xEbJd|g($W{G7;czhs4-VgWTAZY*o^oGKZ
zL^0^OQ7b9-bFn3Iofvuo`Aw5t7(Yo<G1fg-Vw}bkPXXbmgB*m!$9qYtA(0oX4aY48
zWEVYKaS^w*?9umd?+0L8%v=`GF741ZYtzY%cVTw6X$3Xp7E-{n`Zg#vQkovJBPK6f
z{vvwr969U(Qa;QzklQ){{x@s>a|UQRlkdV`_rhH4>F`OVby?gFA0y{ZU))z!kqdZ_
z<x?SL#<?hZ{cv~CYZ<@ZATfic^$=X#wH_qW!Z_nn$tG$|VDBa{tdyp^nU_lNUx2vv
zi1cyA1)HC3;GD7;y=E3|`5{co4vJGK<tJcXhpw=ac9>6Fz`QP<eEu#3&-q<}5#jTo
zTNodLG9`yZ-T+BCtte=8#t_0odX+q9Z><>0!_1j73on~_bAlAqJ^<TT086n*Ol~5u
z@OZFp-3sAt6)I1(uoX+Cq7eOX&<iYB7AN^J+`%+Y7aICZUV@<-qK*ya5oEz4)N{@d
zG9E|Lo(JkP*!u-^3sjeN0H_TF>gIcaI`zJS(+b`2e`$qo-38sq%mtEpmSoFV)FkVK
z_n>eu!03nfG4QJx8*)c}gaSz;uYoXYccd(jm-%tg2LGGLMWX8X<qceZjv5&4E$9k;
zAvG*9zI<=I%MN=KDGk-UNJb)#q5Q_9l2<wE?Ku9cO7g`_BaV5Q#<8t{@(SJqIVllu
ziB~Y|i|U(-Jco5>wZPsN3xY)AVeATr0^-t+6SUf`cCZoHxk1l27q(A!^!NQ8{b$Da
qg;w@Yr7r&Mw^N&?6g7zGap|bj2V;UC>Og+PLZ|S(b)jBwu>S#F?<na2

literal 0
HcmV?d00001

diff --git a/ast2d/__pycache__/preprocess_image.cpython-310.pyc b/ast2d/__pycache__/preprocess_image.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d0dfa7c9fb3934e154036fdb3cdef6adb6b2c66c
GIT binary patch
literal 996
zcmZuwO^?$s5Ou!VZb_FF;*5Nx5~>!spbGJ!BCWU}V3CljNR>BsQ*RSH*bbtl-1Z3k
z4=((m+z^M={sk^DcCy=ouw;Aec;3u=Gm(QqAHg`Ee9hhl2>rB&-LVIUCouH`SSX@i
zjtXz;dDixGzX+xQ*aI5T4(+m#_E<#sXlLG|eR}OIns#V>jE4Ic;Eje}-OEU&H7CN_
z>_aJarPu`oM&}=Ien0xLK6_k8ydW7{_eD7plqf}3b)<P#kh-7dyqx8{;HK^<W-298
z>w7sOFhZCUnEDnh2Az5vwDGC;#s3r-e-msx>Vq9_LP#qhpFM>77{*J*N+naKH8u-|
zxhN}xT_X5og-KcFD=sp;;M&Mckpi=K70LOU7%l}Sg5sl=8P<iAW&y89eFyziWqRx^
z8^~df@$Ht{aEzbt#4-|}Fx+Os=;+GL2>@>MToQ8!%hJXrIk+Dih)xv6l)dLoI&-PE
z=`5KNEFa-#Y)+~iNNIe3i@R0yzu*%PytKrf=-2|MQW!<F!AvZONLj&z`3wDUba=N3
z@Y<EACEpSr<2Rshc_lZajU<i7&{I9A8*E*>1<IDUzR`-!W`vRwwADuW_Iso{u(`L+
zZ+hV5on7Y0XdO4@V06Zd>>E-sIQ)8*j+06=rIU1_01X;4p-eB0ER$0rDx#K^(v?nt
zX$tgbx`Jk7IsxAIXtK>7K%rMh<*GjT_tG|_wm(-GhhFD*9EQHyhvSQ(uWXYl`(W6e
zUf0V8WX^K~DLH0!x4mry2)HnH<ZACQ9E+W008n-BVIgUivq#X=NLyiI6ni-M1H_#j
Aa{vGU

literal 0
HcmV?d00001

diff --git a/ast2d/circleEditorGraphicsView.py b/ast2d/circleEditorGraphicsView.py
index efa7448..ffebeb7 100644
--- a/ast2d/circleEditorGraphicsView.py
+++ b/ast2d/circleEditorGraphicsView.py
@@ -1,8 +1,8 @@
 from PyQt5.QtWidgets import QGraphicsView, QWidget
-from panZoomGraphicsView import PanZoomGraphicsView
+from .panZoomGraphicsView import PanZoomGraphicsView
 from PyQt5.QtCore import Qt
 from PyQt5.QtGui import QMouseEvent, QWheelEvent
-from draggableCircleItem import DraggableCircleItem
+from .draggableCircleItem import DraggableCircleItem
 from typing import Optional
 
 # A specialized PanZoomGraphicsView for the circle editor (disk size calibration)
diff --git a/ast2d/circleEditorWidget.py b/ast2d/circleEditorWidget.py
index b8230e8..280787e 100644
--- a/ast2d/circleEditorWidget.py
+++ b/ast2d/circleEditorWidget.py
@@ -4,8 +4,8 @@ from PyQt5.QtWidgets import (
 )
 from PyQt5.QtGui import QFont, QPixmap
 from PyQt5.QtCore import Qt, QRectF, QSize
-from circleEditorGraphicsView import CircleEditorGraphicsView
-from draggableCircleItem import DraggableCircleItem
+from .circleEditorGraphicsView import CircleEditorGraphicsView
+from .draggableCircleItem import DraggableCircleItem
 from typing import Optional, Callable
 
 class CircleEditorWidget(QWidget):
diff --git a/ast2d/compute_cost_image.py b/ast2d/compute_cost_image.py
index 3c88768..4e8b61b 100644
--- a/ast2d/compute_cost_image.py
+++ b/ast2d/compute_cost_image.py
@@ -1,9 +1,9 @@
 from skimage.feature import canny
 from scipy.signal import convolve2d
-from compute_disk_size import compute_disk_size
-from load_image import load_image
-from preprocess_image import preprocess_image
-from circle_edge_kernel import circle_edge_kernel
+from .compute_disk_size import compute_disk_size
+from .load_image import load_image
+from .preprocess_image import preprocess_image
+from .circle_edge_kernel import circle_edge_kernel
 import numpy as np
 
 def compute_cost_image(path: str, user_radius: int, sigma: int = 3, clip_limit: float = 0.01) -> np.ndarray:
diff --git a/ast2d/imageGraphicsView.py b/ast2d/imageGraphicsView.py
index 1fe7394..77bb7bb 100644
--- a/ast2d/imageGraphicsView.py
+++ b/ast2d/imageGraphicsView.py
@@ -4,9 +4,9 @@ from PyQt5.QtGui import QPixmap, QColor
 from PyQt5.QtCore import Qt, QRectF, QPoint
 import math
 import numpy as np
-from panZoomGraphicsView import PanZoomGraphicsView
-from labeledPointItem import LabeledPointItem
-from find_path import find_path
+from .panZoomGraphicsView import PanZoomGraphicsView
+from .labeledPointItem import LabeledPointItem
+from .find_path import find_path
 
 
 class ImageGraphicsView(PanZoomGraphicsView):
diff --git a/ast2d/mainWindow.py b/ast2d/mainWindow.py
index 1612778..94dd323 100644
--- a/ast2d/mainWindow.py
+++ b/ast2d/mainWindow.py
@@ -5,11 +5,11 @@ from PyQt5.QtWidgets import (
     QVBoxLayout, QWidget, QFileDialog
 )
 from PyQt5.QtGui import QPixmap, QImage, QCloseEvent
-from compute_cost_image import compute_cost_image
-from preprocess_image import preprocess_image
-from advancedSettingsWidget import AdvancedSettingsWidget
-from imageGraphicsView import ImageGraphicsView
-from circleEditorWidget import CircleEditorWidget
+from .compute_cost_image import compute_cost_image
+from .preprocess_image import preprocess_image
+from .advancedSettingsWidget import AdvancedSettingsWidget
+from .imageGraphicsView import ImageGraphicsView
+from .circleEditorWidget import CircleEditorWidget
 
 class MainWindow(QMainWindow):
     def __init__(self):
diff --git a/setup.py b/setup.py
index 909a682..e348280 100644
--- a/setup.py
+++ b/setup.py
@@ -17,7 +17,7 @@ setup(
     include_package_data=True,
     entry_points = {
         'console_scripts': [
-            'ast2d=ast2d.main:main'
+            'ast2d=ast2d:main'
         ]
     },
     classifiers=[
@@ -34,7 +34,7 @@ setup(
     ],
     python_requires=">=3.10",
     install_requires=[
-        "numpy>=1.23.3",
+        "numpy<=1.26.4",
         "opencv_python>=4.9.0.80",
         "PyQt5>=5.15.11",
         "PyQt5_sip>=12.11.1",
-- 
GitLab