From ed470d47bec6688128634800de5c33a2f49951e6 Mon Sep 17 00:00:00 2001 From: Tianpu Zhao <68950614+ZhaoTianPu@users.noreply.github.com> Date: Wed, 1 May 2024 14:30:11 -0500 Subject: [PATCH 1/7] Downgrade requirement for qutip --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 00895ed..5fb6331 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,6 +5,7 @@ pyside6 h5py>=2.7.1 scikit-image scqubits>=3.0.0 +qutip<5.0.0 matplotlib-label-lines ipykernel jupyter From e4ad3671a9ff551a6801f7db7d52e09fbdb83f56 Mon Sep 17 00:00:00 2001 From: Danyang Chen Date: Wed, 1 May 2024 17:41:28 -0500 Subject: [PATCH 2/7] update action --- .github/workflows/publish_to_pypi.yml | 107 +++++++++++--------------- 1 file changed, 43 insertions(+), 64 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index e10c38c..6f24d1b 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -9,6 +9,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for all tags and branches - name: Set up Python uses: actions/setup-python@v4 with: @@ -27,38 +29,16 @@ jobs: name: python-package-distributions path: dist/ - test-installation: - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest, macos-latest, windows-latest] - python-version: ["3.10"] - steps: - - uses: actions/checkout@v2 - name: Checkout the repository - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies and QFit - run: | - pip install --upgrade pip - pip install . - - name: Test installation - run: | - python -c "from qfit import Fit; print('Installation successful')" - publish-to-pypi: name: >- - Publish Python 🐍 distribution 📦 to PyPI + Publish to PyPI if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes needs: - build runs-on: ubuntu-latest environment: name: pypi - url: https://pypi.org/p/qfit + url: https://pypi.org/p/qfit permissions: id-token: write # IMPORTANT: mandatory for trusted publishing @@ -76,8 +56,7 @@ jobs: github-release: name: >- - Sign the Python 🐍 distribution 📦 with Sigstore - and upload them to GitHub Release + Sign with Sigstore and upload them to GitHub Release needs: - publish-to-pypi runs-on: ubuntu-latest @@ -117,48 +96,48 @@ jobs: '${{ github.ref_name }}' dist/** --repo '${{ github.repository }}' - publish-to-testpypi: # always publish to TestPyPI even on non-tag pushes - name: Publish Python 🐍 distribution 📦 to TestPyPI + publish-to-testpypi: + name: Publish to TestPyPI needs: - - build + - build runs-on: ubuntu-latest - + environment: name: testpypi url: https://test.pypi.org/p/qfit - + permissions: - id-token: write # IMPORTANT: mandatory for trusted publishing - + contents: write # Typical permission needed for operations affecting repository contents + steps: - - name: Download all the dists - uses: actions/download-artifact@v3 - with: - name: python-package-distributions - path: dist/ - - - name: Extract version from distribution 📦 file - # assuming the version is in the format `--.whl` - id: get_version - run: | - FILENAME=$(ls dist/*.whl | head -n 1) - VERSION=$(echo $FILENAME | sed -n 's/^[^0-9]*-\([^-]*\)-.*/\1/p') - echo "VERSION=$VERSION" >> $GITHUB_ENV - echo "::set-output name=package_version::$VERSION" - - - name: Check if version exists on TestPyPI - run: | - RESPONSE=$(curl -s https://test.pypi.org/pypi/qfit/json) - if echo "$RESPONSE" | grep -q "\"${{ env.VERSION }}\""; then - echo "VERSION_EXISTS=true" >> $GITHUB_ENV - else - echo "VERSION_EXISTS=false" >> $GITHUB_ENV - fi - - - name: Publish distribution 📦 to TestPyPI - if: env.VERSION_EXISTS == 'false' - uses: pypa/gh-action-pypi-publish@release/v1 - with: - repository-url: https://test.pypi.org/legacy/ - user: __token__ - password: ${{ secrets.TEST_PYPI_API_TOKEN }} \ No newline at end of file + - name: Download all the dists + uses: actions/download-artifact@v3 + with: + name: python-package-distributions + path: dist/ + + - name: Extract version from distribution 📦 file + # assuming the version is in the format `--.whl` + id: get_version + run: | + FILENAME=$(ls dist/*.whl | head -n 1) + VERSION=$(echo $FILENAME | sed -n 's/^[^0-9]*-\([^-]*\)-.*/\1/p') + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "::set-output name=package_version::$VERSION" + + - name: Check if version exists on TestPyPI + run: | + RESPONSE=$(curl -s https://test.pypi.org/pypi/qfit/json) + if echo "$RESPONSE" | grep -q "\"${{ env.VERSION }}\""; then + echo "VERSION_EXISTS=true" >> $GITHUB_ENV + else + echo "VERSION_EXISTS=false" >> $GITHUB_ENV + fi + + - name: Publish distribution 📦 to TestPyPI + if: env.VERSION_EXISTS == 'false' + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ + user: __token__ + password: ${{ secrets.TEST_PYPI_API_TOKEN }} From 87329f9d88d1881fa0192934a73ef20f5e35804c Mon Sep 17 00:00:00 2001 From: Danyang Chen Date: Wed, 1 May 2024 17:42:16 -0500 Subject: [PATCH 3/7] delete screenshot --- Screen Shot 2024-05-01 at 5.01.33 PM.png | Bin 57430 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Screen Shot 2024-05-01 at 5.01.33 PM.png diff --git a/Screen Shot 2024-05-01 at 5.01.33 PM.png b/Screen Shot 2024-05-01 at 5.01.33 PM.png deleted file mode 100644 index cf9e948784630ab6e61bb76ebc5e51e137199296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57430 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

&AG_I|Rvi_3diZ*N5&F~HuevKO%VX2=*3J9IeR zWLB7SePKB-{nac7b;{?4m`@9fC^klnwPqq+OMo)og2@F$Fs)Rj+uiW|!=HSMRuLYA zb*dJp!o~?FNz7uG5#AOHA=8QSt*bNtbXaMzj+r3T9O>^%r`k_g{r3cNa#K0J9c=LG z!q73F3Ta%gSA&X}l${Nh<~dBoBo2n|F?_f7T`DW?16kEWMEGshF14lt)8hAdNvu`5 z1Q*of9iuHPE0g|6XC5&S=sr`lgH_A zXBXMtR=jpzk|dCfLQzlcwOjx^b-8#mq3kru4PP zj`qo-7ktXopyB3{d@J);@W6K|=t=k4uy%TRE&u#CKa^{x+H6km(eEwY36U7btCo$W zOlOP}V9@b?YkGd(ez&Nc!Sj+mEsjPwBS}@LU%vjO-{Fsk8#%rQ3ch|!!Upx$rsySC zO!B_?$kDpRa5AALZsF=P-J9jJQ!0y{cW_cHe)DqobsyO ztjLzAvmB0TlPt3b=+}NdBNbps#5(1;J!@)j7!4-5=pt47oMsZxGF|W3hT5Chu9BsO3KCfMy!3;6%G(A!pg(d- z5dZ5i-~7;C0}Qy79fLvy-q|hr>{hbQA2$Ra4iNRfFPAaTD6j_;{*-NR+UeTgkfq-*37hC1q{n_z0uDSx|> ztfi`uVu*mA=d>W&u71+yI!5>mKBs@HZ;>+jj1|TKJ=L72Pni2$Oo!fS8PNJmvzABb zg=k|%8Gs^_P5!Vp7Nywvfzvr{=;Yuz@4ye%ubjNQ-V`6cI9l!OtOe?h#`}D@rk`k_ za%}zqPi}&fc$ZhTmg%>;m$vLyfsZ{G?K$d?2iP(LZZ5lXY7bg>GYI$>#txFUV~!a) z=zkCS~0t5@{uyDR=Bnlsbo?j_dNIKrrM}R zl5H+ew;MI2EcrqgaGM_xhw2`@Qo6yrq`f_g4^+m@t1;`%03+Ij9cs~X(Vm>{_vTF) znJqpAhqA9Y)LuryO!(tPjz8XH54MkF3uh*&iOm9~ z%)mTn{W|WyNi^@m*J9NEWOUKCymIIOjBqT-A<`PrG*|Bvxav@feYn~atK=&j8#o4D z&gl=lUZvZ}bZS%Z6%poQ{%|;ur6WjP`k*+3NK7DQlFA7(?stQPm3o{P=vD(|5#L_D zesTak2cFzsA;63J>_kFad6RmE$Zst<)vafF79J-I0y7jq+qDVx`@h42L7L3!Bppgc zR9u4YgdBcJ(qztZbpG`kcG(?6>D&&3fnq%td$ofcmNVZ>&sujZv;bot?%m(Jxp@476{uEFVw~U)>WkZIt3_LQ&OE17fuc&fi1Rr)NN0FK>8Jet6(~I&B{L~Ybys5 zeGJ`jXK~Qy4$Z4^++}+&zf$Qkn-&Q)+QCMmc)HyV7FzVvmv<<4EGED#F2%I^;%mFK zK2=kz<+PZhuw~zhqfA%NJilBn3q{#D!Y67_eoEm|r;lxP4M+)dMo2BRaa5(uBxSI;G`HLbbGO?H6mc{;xfqIG>Mx|iQ?(e9R>H0!o4@M zH%bcPYGFTxU6#Wr-um+IxEH)q`#B>AmAf>ow@!QRpNGClh1s%Ly&~~&N@dYZ9&tbZx*&&zy|gq!{TDp z7<-5W1frB0ly(cQBE+wst;a|cGW}L?w!Qn%^QCERWiomHyjwI!&c$DG_EMYS^ZHi+ z+OLmUHx(}STX(BUgBSO;Tc@~P?{3bikV9dTtEA?&rH8Xtxle1#?fPUvHd!&CEk?io z7inEfnouiBxnlYUBUgD4R$Axp_dKs?ycSF+URaVC4^Uy(XaVmw#qUb_Hl(1Ej?Q4L zTDQ~0U61|Pg20s)wEFt2nk`gl(DcF*2wKKIxjBbtq7$6$K&dk|UWNnbcFXmHyMM8dGO^fUR0t@T6o{ z^xALiv%;b@qUJ=t?5bqtigQaUJT_kz8#TXf0xeDQCF&l^-0`StZ-C3I z+gdd&6eSULU1=g+rT4li5X@Q5!IjQ0jX6q=3!Ud3nsoXH?W-&8%sU&a5a0vpKJk0& zO>O%Jf-+jEW*OO3Q@sUcns)u9h%@ev5_}%S! zd-!=*?m%geU4|U)#@=3T2Hu)+~=P5 zRg9OjTiq`9c5Qo=%}E=tY)#?OWr|_D#Q3eD6O`9NbHiXxx;mWoiN($eUPv=f8M8D@ z6F-|yd#2@RrXT~Wtj=fQ+md~v^FP&?GwY<8#RK3z z7cIv-cD(4Ja{9`#U8mykD4-;mB}o=8<1)+(_PO5VMtJXJXiX_m(*U-`trvbdw-JQ|n9aIrEft`>Gj zVd7`XKeaw5#HrQT0zm|1p|VXd+vtB@i1W6UZpw&i`*_xCAGQm6L z(=o#InvG#KYZSxN-KlZCMs5mkycb9CVX zjMeCXx+S~RWDwTxUGLGtsgj;qYN3K%N~dTHYN;O?ev8IiyZn1znZk6lbIPlA^ zUHypd@t^zOVM2g`=QFJhDp{$9m%UPwxX4EzSdgJXk~{lYRdCUj-2ojL5YN_w?7j~0 zlyJL68@p35R^yuY9UR+)y4itMM8{jbI;TgiEP^%7w`)Bl$3`do6jDyYs6{6(PYu1? zDR1=BO5rM$>}3s&rRS*o2Xz|Ig{kL5 z-nQ=gI4rV}Hb$9o{8lh5kM8+9O$w|G`RbTX32?M)s1umj%9PpZuf?;c@`k>mJGC!c z30R3_o(tWcL-SINKW%4n8N-23MZ+kd-4FjUuAJz(Dh>+q^=|l-YW}p!`cXsM3tOBC z-;$g_7)#LuMPBVz^;aE(-EvC)oyl@Oxhdq>`dTH-%97Ac+meY%UXmx2z}KL|cVM-< z4yRV1%B&YLXXP+O*jqsI2%6=d<#w>8IVI-8IRa*rYidQt_@}3OPwls;%B`dq8s{B_ z?R-k?$_c+d5ax7&dijJ~aFrv_5-j(LSwF>YJMJiclOIblRzd+6@Ixoe@Jo+QbAw8X z6q)<>UW11+pCtQQZ8a?7MSZdE?p<{NlFe7p|MlteN49rJ&QJ30P!}#O^+70HIxjwP zWqA7 zEXRfKW?yeYK*!~)(f#IG#p~Ad*X9LgZY`cn_HO=gGC8Sb9QW;?-FWop_B*qh@exab zqGq;OB{psSbMK4n2xx>RX~_*-`oLcx8LXjjI`C28-L)XgFgEAdAA+(R;y?m8aR%E=K6`H37>f^I%R1=Q|`3rIiSD%g)! zSX5dqpIj;WWiYv?cshCqxL1BxtWg}53V-YPL5E;+GKz%@Y)&f=#O#d zTXkYLeBbpZ=1%tx9gU9Dvgk~gQEUbed;}1lQkVTC*WK=4rwtG*!8TwrY)zv}ZW=Jd zPQS1=zz~=BYdvD5>@3EM4ThWL1>csHSCx4>&}=qoM~v3`5=k$o>^5+l8Y&~e0*}i` z)kESb13HKeUWZ=U8S1{d9pWBUPM_L=sslpt+c4BaKC*&cB-fLiXukCDA=g^*s;4d9 z?>@ZCK5b909ZQ(ePN++8&LG#R@LF(@1Dil;b{aNF=3f-70WUh>Ir|ML;I%K0>&aBIeI*6Dkk!u}B=w__A`Y9y2aawqJ>^R7ktW zwWavvE;P$JXdUJ{++~)!d~!UHEmTRdg4XR=c*XLj==LE3(VMf}mo78yPI08YV2s|h z1%8>{7B6EP!Se;TiL*YNN1rL-PmG-M5h#J|PEs1gx$?Ra2!+x~Lu3U8G+N|`LI;2p zUBiKKi=O&KEj^;5#XfT84f(SAP-#kjuOHYHUq@0tdRc~Fp6$@Kr9^`{lyH){ftK+*Ysw_PR48r0NVT^_>DZci>w+(HcCWYoT2!OJd696bZImA4j3!#2rec zR<@6HjmG2*=)4+cjNQlIluBPqbyv$=%-2DyvNEm3=&)fc>8<(aopcXVqYpKea^Z9P zj`@loeOxC8i|?(r>56&97!FWtn2k;fmEl2$p0Bb7p)ZbbCwjo54X1w#VCaVS0d3oC z;e)L!%W$C{3Shwfk50iQ;kd|>LVVj~4IK2}=xM_{*kE>79py}o-N$Xkt394(zVTVn zUPlSNV*U}Gd4hBk*xoeBAJA&1r{oLe8OOE&EF=#OkTpy6%g=WRI1CG#=P0ITn?L zL*R-cASXZ1_%2;W-+;Q2jg}c+$3tlPkJPh>s3GF(ps+Ugj`AW*!8G5Cn4jw*07&v^ zR2}+!e*GMTG8?^KwY%CsX9b_XegbR(&Qkz+YuHoIp?sF>ZRlH}w%tU&;I3YArnPnS z{Pr#&qgD?jeaX+vsvqoo&nAv`W@EWU&)^EouNM4Yv^`%jU!tOL7exk_zKQ{RE(kU_ z3^pAe!=1dG{5yGM+2(&O8MiB!^qUooP6O_4mT|V*LIOr1;u|l~jy7Gf`#E`9GuL#k zx=8k{zl!qIA0;&*cmWyLN1?74PvTsvwlnrZBua@{o-P-@^=N7KWEhO32_&xRieg3N zZ-@C5XSqebHk-8jW$pNr>HOWGhu1sEP5xON=Zm5)`k@- z6Y&V1LCha~Nd>~VD>n6@`K(>1Mq4-PYU$LC%{lY-VY*f4eP73_%MXv+aakwZZ_W%e zDR^%tt~P`fT@a=$5Lc*Y5gODrio68O7y_1s4-}2vu z80=fvA&jKUd%spWuKQp4=%}wU$$O^n20lW%sNbWW%NvBKTZTJIR0-=2j&+UiyOE)J zaFAv*_0qW%DNp9#E2k>5<_RUv=jc${0PZ}C!gr0|+u(ocxxDUM{Ao6N$YdoLz(gel zvUykgfQ3z-y6inUbJrARMO3m>BU&H$nrm*sbU^)N&?0s9go3B(T$WS|zJK6V8&zjl z9^$PU!x6rq!0B?5J{gdXDC12A+*dPG>mK}BD5Rt1CDC;`5f$IinI>xf)R2IaQkXoW z8-*|zT3$C%>QIG_)Jl!F;O!h~tqanTZCnxqqv}|1%H;YUX}r%XdZ0^#h(OBi zG9zsFV$D8O+$`iWMyOZ88N}P`$bbQA`8kZ~`aRfFNec_sWlboHA^u;I{JS(Wt-eEuXrRo3{y0iN<2LG(m!E{&&RAyRX)R*VoMgXFemP9c)7j;cg7T6-OX zO%rPTjZ$V9=B+C}Dri!o8t=Ay9+&1z?HTvI1+DwUE92d?;sM(46&5X7L%|t;yd{&5 zE!41pVW02)sdKFuAW_@?ULtxuq^PFpw^%hwa@QbhC)-U#Lo3gGYf(rS~P5S+jF-1lGVw(?Lj zzMP6Gt!i1{=2%qS?iG|W%QyjMEXt3!!>i?NRx%+dRrBzO2=j&N@Axj{<#x!XRO{Op z?feYJ(K%q*1x@yTE;1J;>hveHw=*?k*)1loS;a;?AmZW544O-S-2Aw!>e$4u{_}Vs zUS#a00I3pq<>th&TgnRi@>hA7q9pd0p`jhh+Q-1QcZAp<1(ZUCC@!MZYVZN+>;3gI zk|{J~gaO#n*cEt`fgMAy7thuxZ&75QTjP$7H~EvERzA2vyFZ)_lLHPd__Jt+MI z-zneJRKkWA5UK<*C{f;zT+|==3!Nu2$ zE8?Ucz7257Rkq}9TOhJkPIwc&QpMAMk`Mo!w|_YzRF3aeB~W7jLV~{Z_jyErbb>N6 zixlIofYkD%nAGJ5K{sLCXZ~GA_lRlfs;2p1p97ezE{!HfH1Yy;V0MeVAg9_Rt77~%a1RibASm}*dR&coK5Z!$&;Vy zg)`YtuLos83a`pYO7lR2s7Mh|sZ^eKZ%5EvHwPq{5I&#fLpud#B?|E&HxHnQdtr~W zysmqIG>Qa^JXdr^#`aj)qmPwJYm60>f_)O#Gl1A%0|Q!@%cl8tp(e)Wb9h=x-+<-Gao@q1G5JJx*KMgX?o*P42%vM~5#Lx&SQn zAAO!DU)OZI5MaAR96F!kA2{nN~Zc=YtL4-~l;7xcXvG z*f+xD!QbviD-K|4RQt{aT2^Lg9g|D>iPt}#l61ixe_14wL$qx@bUt-t?dQG~?(fry z`VJ+!=jj5?L;-pqx`NJq{p-c;$D@UN9o*PG4bH`590OYmWs+H4@kS=UBY?VvMkzuj z7?+h+LZf$E-M9dnRj|oaE1rrDLw557Us&_>PxMXH%dN8GJuFj;N9DILBi@l8(l2oU zkvoj>B3!)r)>D((8_@q*T$ z<&f+8tM;kOfYn(3w@-cZZUW+SgqKuEG6vDEUisDfaU1xe_LWGGA5OJ1#Jm+)_?oxP zN|5(+35D#6q$u}@E8~b%N3Nl!6x!9J?78;(NdaVqYm2qovC`Up81u~wm!Z(^DLoqZ za@4`=P&(2z`~TQ`tMIIvWm_0RAPR9IK-}$(5O+i3#NFK>ZbXSY@r1a$yApRJMw}3L zBW{0BzP%Tb9xj8rIS(kzN&e_#nT~%E*MzwznUdh+#Y#I&mi(YTRwNez8xmXGx z^FQ`;x7lHMFyAuw<#UItjk+aTnP`OHM8HV2h`GC8+oL;b*Gf*WWZz=?9kcHVyx8Zh zRrr#Ug2Jb-i`Zcx(JE*}5x721fh z?wZC>0V$=cbL%M&@1piOok_u9LG>F-2S%S}8LLK^pMp+4g)AkinULH;AToPGWL+AZ z5D_QG*X+6dSQcB^fu`<+OH!F@x07zps0WUrlCkb1X@z;yb}9TtQ2DKZZR{1Dk__*W z4^EhPocG7+y^)P{T%~E`&0$9g=E$<~)78g)kMBP(ytTl-*|V=NDM=T8vrf~GQhh~3 z-AZmienv6;ChVnYt+6@dW-X)f?6KuX?3*anuaq|vKLrFfxyGC*6MXaJvXH;9_Ss@R zzg~H~(#_bgvt|=6dE8b$>RQyU9db*IH(h{E8}f>0%AM@ywjg@bS<$@OJm&PgP*H6w z>H_V{u_D~usib);me!T#w7GFVd)&F^5!nRV!$5L3G>|M($98vR4fOq3L6Q4z+p>>* zGhxbgxzl^mRF%EXx+k5@w=ri?{q(TzMB`ER-*ioK?h}GgHgPIOh3C>*HxGZl=X!0<# z&ZRaAtCgCk8N(Nx?VD?OT5AmRTMnwTgKx9n3N9fg;EKm@Hl`m0^b#yfLS>*)&EwHqu3v(FL#jIDpKGKx> zPizAPCW{{^X@`Oss%X$@9 z<5;(SG>o}*&uPxJp4NNu7v>br{?LP7iF;XbmZnI3m*Uq5ps3FgQ$FqU)gXdbr~joqoBDnaBt@UwoGs}YqWNJ_^fJATJe6yAko2SR{#g~l}f;0#( zk8x>6!r>94|9e{gg$f70Ob`M-)HZ6X|39=42r`?d0icHc6uIyJg&+mc7Na^qoTq*% zFaDj#z9tNq@Qhqi-2Z}v1O@OXU`EZD{>5JS&JOc`WIFmKvSA9f#E$7843M&S!_rEA~P>KE4X@j`kMW6kh?QQ8a5&vg7EdwCww{Q~7 z`d1oa1h`YpUxqIx*9PLgO%++o zEhtSEs-#U76y1MeNa9~SJMr2F2IwT8^5Ne=x)dP@W(?kl_PsYWt8ideg(yjy;E4ay z2Hru-+RhTa`WFO?0iGnzMAv$Vt^^H;9OxdM?sIV)2>lw32%e1ifLQtfu@L$+CRnwY zGE@pK=nrup@MJHwkMaW_MMx8npv|h{7x@zUg94}@jsbQ%-Gg>oXhwX%qEOI_ynhD$ zfe984nFVI!#2tym2PL2Tm5eT&F@pIopWY02)5kRa929Go#8~F(QktPbB z^bQerdMv2o3yBFShL0h2pBE%1DJ15b|A_gY)%=gr{=c?2yU3de*vt$PIX+s=R+;L@ z4JER%(iK-ln*PWN3_U$w8yKoE92ktGkQmGm3m&|=JlQ+mNcDIo*9BQ0h|P)!d+YsA zLx2e?VAKQ~@qLsBVi~07YAlO?nSpnrcO)vuF>0DU{@LVwA}J;&HiS@#2N|U2AP$Pr z&51IA?3$P$WY>g6kYNjr5^;=g+6R2Qg7ID$M$#fQlC9D3Oh^?7+c8VsGYguXY_95 z)nFRoTzm}!w~@o|`>@3GakTZ!18t@Q8JF(QryZ_e5j#-%={#Qok4hc}8T}tuxLU>P zwd{N@f6DljAuuni@o<$#J+3S*ld`%c+x0ZS)6U7C0SM6CVkL3kU$;X|2aNS>Wux-7 z{h-#){oj&~19R>r8suS?B|Hfve#-8~N8ND!0Q_(m~6x)XvU zA?Y8xAmu-`AO||K9hEqn>`s1w{mjj`yaDq{ENcas{;=t|!$_v>(ey7{6ZuhN2Sgq> zW0J|-liUM{8PVefN!E4%I(e4!e(?6N1I-!3flDkX3UYa`iGf16T)a}VXLWt!ZT=;N zY*z?ScUa^%q?q>9?b!;e_Y>|q8?>GhwES4GL~ zOlqTq6r>N(M39ebL4w&wsnz{9WDpL=;0d*mLhop~{#&|ZJG2CtbUf3;%5Y)0jai^w zV_+$|jEBB6eoN@6t(y;&^X-A=wDCz!6bny5S-s9U*UHD4sql2~c8a=TSH>8j!| z=l|OL-|iU4z{Cv^rVT&oziIQ{BJaB4x)KTiWKqG4DB7l5uTUCYd-*3WO!F{Sd^fRZ zN#L5|9x=h;8tFAw!RK0v=l94^b*pYO>Izz0KMF797;(FVUGt=#FRMXc2#SH0J3$x) z7P_@PSs2F#E0P&oi=-KUgT$2ZN;--2E3@`9R0-gjEr4fs?=uT5VRdx*Zl{`Ey1;35 z#p9q6N6(6kp>Sr>H0?S3Vs1d@+j(`p!5{a4QsM9GiIDstFnFvg_imZuz!$=<*=LQR zXADqG2Eyud?g2DuXJ{_H`{RPD5c>O#jwxSc`_Du^+ z6a)j437iMwdv~Sn+fDTH*l7Lnd}b-@hi&+g2T-GOO9O^b1iBF0vqoS zscj4LM*bcimz>?7C#gQ~KL%<91xudIvh5PniXY=Ny2FVC_zxCQz8Fk26cFa#-Cn<_ zPgE{dPNySH#8=aLsVV#Mn@`+29T`v>^gJ0j-@C=NL|iu_!&t3e;sf8@J*RN{EM}{2 z9wWhA@$pvSMb`aU7R%_F^p{pQ&VTY;P8@z#7)r1LRExPw>5_g=7@PLzBQXu^8Hmk9 z{1FnjUl<8?dbYWuCE3h7Jk#Coi!ubTPA?*Q4+^@gt4+tdwG{X)woU(zzyuMPNd0EK zXIs@@z#8Os=rs1c}vhUc;&F z$Ak=}5KsZQB42bZObtveU>vKPHEB(PNP1Ugo3*6Av9m3GJ_*gw%cEAQg3fMg)nS;#e6GzEpwbas_!0*$4l-Rg4=a_Iroi{)8@h431T|0MF6hXoVPH4|X?n#(X#n>Z+PD(rgoC zWXp;nLhTZyIq1^t^FM3q>>7`(ey{jU1K%sB-)0vEYg$Fjay{Qy+&%8tDVR3zkEWRv zjS@|DIs1%2v|Qg%>oS9F7Ydrb`}mgudLX%{AQwvMBX-_#ivFF3;-UR zSJ?C=>_pcJ!K1VsCUdK}ilneaXAz&M<(XT{@Zpk_AH%>y#5A}QWU68XGe^`C|w zMN*I3(a|~rj)qa@kq+P)q=#NprGC~Ubo%85n&kkH&ydkKOCx_Q&cbIgnt(Cz8t^v? zG?lp8)MrdGLkE@AEe(}4?I$OclCJ?GH2x!*zcK>R=duNW5f4`{4bJ~^@erK&=z(5F z*k9sm4S&<7hWDOh-z80nTtc-@#nxzpYa5Gl#?ElI-+}6RH3* zO~Lx`!ilek%_sOowwoNYe9(8t_ux48jxkdt( za0`=KdAWMdr6)0YimM;nX0e2GESri#9%$pK%hmX|!4;x=zEZRVf&+sECcDki=$T6( zn4W9X1ThsIGF8*fi-A>5Qpt|TNgEvioV;-6v&9+1TH1V;_~B6@J+;DqY2$uFzQnx8 z{cZQhPxCroo(=*u+1J_oMc0EF^U{ib+A|I9-7R7tWn>%yV%cM`dxdZzg7ZtxQSMmk zH$4Q5TbO>d)Dzswc}V1}I9gkr_0}dqwo+Ocw<&bfmD%N*EcOa{`5Vmg*2b_-0bl_P zkfI9@xs5jMjTWp#GV2@pt4@s8cpi-hmPlRgnmt?mlc6T{6o&|}Hk_)}!0Pi_=jXR$ zS|da&_5hxvaAdZF0#nuDz22>y`ZGdQna#2W!0|QfK@}x+Yq9Eblt+y19ez()=PW8i zHE#h)WYDs9!N_Bv^9bmsOu~@BpHY!XmrnA2@?i}@CoW8S64@(ACPE++7po6oay9k$ z@YPvN!wY@yT*YQarlAJ z{RcLd=ihkG2dJ&g6Q7^7vf}X`NtDW3ZWvYy$S-H7&S<{e2>L0BvD;e<1r{4x&JP13-%#mD_7%KoNKXF9uef9vTV4~(6q6hI`20dlgD zLXaG5uB{eo?CM>hB_bQa+sW#wK?T?d6c+I(-Uv^~v(wu|SnEwZP}+)a7vR#)keE(- z6?$Yw6na#k!ZMO{wWNDzd3?qrzii*}l;h`372X$9dA7$=#3xB~aC<=9s{kZIF z8!G<29ucM~l;cNxIMGgBDYdl7-`j3hxZP#5@3K%=YK9>8Vs&P$J}b9}E({&8#!!Kj z4M?!HJ4!c)U`Yg6*>AcfFr6^UWqUv`q!Cy2UZ4AcUu@A43~Mp@lUuH<*{F2Ju4OyK zHp#o&u=9-Ib?+|Vv^d}_ujQ5b2yTJCsE?iFf#>SRn_QhB2@q~BzO%C&uzrl zw&ZgUzaM6KHoMAeJFUKFpE3rnfk8!(kV?*lZI z>$Cj?ma?1Ik;ZH4e(`Mlmv)IqK}Ukx&nTrfse&`hL)8EXCWEPYjEQsRLUTYqioKeC zGyrR@>Z!7r`H}d-ta13O`F+{%HEr!4k|t3v$TcG_-RntYw`i92_+c$U~LVCXjX%SXdE&LzvBhUV=HWK8Xf z;y8a1XXXje56j|*GylYD)E)U?OW{SfMBJ>kp34QByW~kp??Mxg^7LD$K)8o+edMww z?S&=#tK)&N`>kI8%^#;heaW8z45l$DPFeWWsLK~{3h3A#o&Yq2X^wQVnI9UF)xF&f z;D8vW0A8nAZUH^_e%*@Pcp7n20g2utc=1?h9vi@T-2@jpo3_^TkTYaU3y1a7Is0G6w)Wg7lLHSe0PSK$Z{8jII; zI$B%8ME((!7&^W(FSSd=O$(~kr`Vr}Kd!YHRXqJ;!qPiaX*@SoCoBfBOsDMLv@_a; zExW#w$EQ#5D2I?yVDo3a?Z)gPE63*Ze=~1r#1L=6T~(6AP4+D*6ifROTQg{2H>fxH^MKX*vGFq&EMq() zmng7)1cwu3lO>uw!7@{%fTfx=hD}NPZFNY+YDH0tCWMf0R=V9nIm4sHSR{rI*8C?j zSzpdDiok4bY_#?}@ESJ%<27)Fo$8t2`0gtrN6PIKxP%$B2oIb2yWTr7vIix8cxMmvyl(iDgloNFA0ZnJrf5aOG|4*s=;_Ff%@q5(0@8HJhQ%eYKMP*mwB@@gz9a{o{_*{stIVIX}GR5$Yd-~ zBX8jK;rhI(#=LuPMA2z0(TwROo0&pCiTu1IY)3RUE zupsw<`akXgN7!i#w?w%|YWu}}jgV5Z2vUMjuSUlFqxQo2)CWJb86m?;h>6*cC0z3QMftIEOXOXs43Hv)Uk(a-Gkg!;2H`egQDGv!ccx~4u>FNyHm<@W-A>!c+A|K_cnRX;} zYBk71nIls)*}dQpItUlIGoh49#GbFeQ&NP@ z?xABJj!ubxK7PeQm*Gu_0be@R+)464?kvV<*d=+ep8}T<_Lrh}5p@ zF5%C_5k$}-T_2>cP908nreSM-HKV^J&gEs|?yzxTS{4X*1=(LgeoioL9%L41Z9nV8 z4Goryl-BP5${qZs(@?#qTpHd!v6-To=~|*vKCf~AqkMf}>*M6kZSbWL2m@nhtQz+$ zuzNt7VxyIQ{Q{E%WJXw_kII9OF39P<bcBZ5k-+m7p)p5%d- z4F&Y-jTanNdc*Tu?&F3rlY4Ix?)ui6`XhwlV=MvSnZt0F({gcoJ#y@NMyphKKHMBC zs8Ulx3e2&s?zDAw?2vb)oH(SVyY(a6=xle!=83fN&Ugu2a>8Fu^Cf)4vn{Sw`SjZYWMJ4g1%HPd-KWu-lw*V8KZ9R_fuc} z22qHvS3epJ;yDsG6c{0xgN647E!4dSEdk&wBhA%ue||>+jI{T0r-15A zteYJeahhv82XgjeNj%EU>f^aG#x@2BK2R>+D*(8_JLb`Nm@`jw$J6@6d#fp`9MEpc zHpM`7I+61_syEbat$Ov{N@{6xdwj`-g$^Ak`a$jBiEUrVIo0PuF~*tu`*-zPbhV{5 z*`f(Pi7xe!9p_29g)&P0P`cVJc3^Iq@QX}E$-4c-jaX$!w|=$xOqZR-INfa^v#Wc& zz}R4ZywNL@D$~U_!lT8`vGp;u(k@qBR2Vyy?D@OX>hOKyf+H<W03a8DAwQkH1kBOAi z2Mn4~&W!kwRB()#t!C`hI zt1i@&u~oc5gs2oY?b}1bQ11lq6;7}d%AvEx6zRW}h0mVP=6%o~uUt?wl0DbWxh^nI z94`FBT%5UB5<5hjEUZYMV2leA^y3~kQ<5pyhU9gi|M2=}!oXsjnWYd`sMbOr4FxtT z|EUZAr~LhYr^-(t?sO{vF5kGnM;sW||L+?&_L7m}Uy0SX(jg(~Mv_D%`&jq@#BA?A z9HO}3W1&&HeH8w@G|v~x9}dLsc&A;hAH%MwgYq7By{e;4^YqN{6hh=7p+}lwCDD!4 ztvD9=7`pUcDtm-|+<51taHB6tKDV*3U}@X#w6vwPg^3%h!C`8B5a|1j^YDWb^i!5Mg6(wruL{O79%7(- zQIZfZC?BH}r%P9iVH)vRnN8wMkBhjjpIte?d;tU*>+)SFX}s7Njcd z#Gqa?NMzo+B@fM#S~8fWHDym;CR*bhGDvn}N-(P!`TmE(^x#H<;k~Al;TAT;!pTBq z*8!aN!pN$XFdmnO>>zrC^>X6wOb6l6HA(1E7@BJTT?10E2FI?7g!pTfKT=4E;YekJ zz!yaGrrOOf4wtP!s_{Iw5R^$uHDtmvCP|6uSWEPh zaNx%bVuJ03c8&v&GGCMJkwE_v0|XBWm=t#+2?5=P*1E%9?Ofb}({KYgv0mvs{}6Q* zLxJA|qMh|((}4OII^`VF-K$CJSM<=2?a7Ik74chmnUE{TaG}v|!oX+)bQpZ_gv~)I z=2@*Erj;jRhFK1?ez()tx3B78j4EZ{Pp1o%hRzBspkL(Sf?pU^9Djeeo}v9$tr&nJ zVf3jXmde6U3fs-lOciPsYNtYyk0OF4b~*RvWpX)@m4;@!0LVi}s&2X574mzvFRIy9 zmq9EpnX)7lk*P=%w4|9xggwfX0ooV~RJ*#kaLubc)VBrNQ-akJ9#ilvQprmXWtUYnZT{#o$v)HNiXf zEQa8VAm{a9g8;lsJYsD7^=zH=rGNa}G;k~%Yh`N8%*>pg`8CUX0C>RV zRiuhVZKXT97Yi8Dsb?g@n*_WN2P|lNMnfBtxR9cW8qXZB^6X?|M262r*N%XqlK1-o zXqps;U|XaWdPgjG?88#==qsahAp6w25-ffO-G_x=o@yf2cXnVoEc)3`s2FQ#R>L|L~# z;Cn0L>#N(a`}2SdGfHP2g(xeB{`DC#Lj2)YJfQJ2^(8yblt3G9&5&T<>PvHjb?pk= zi}9@dRcKQ{8x5z*V>U`p{6*UlzGgZzi{#TpZZH$=O5O``g<#0ALz|0~BVH^&t{$ zgGzYSYivUzkK$Q0!kYuDnsREwRM&&-Bt&c~u%(ak{SM8{%}*HRmmgUxSZY?xE0p^k z9u7WYK&ufyCG*Ti3C8o@3ZzQeG~7#M()FIRpVo9+iGP~gD!hYMxe`Swb*$%?-0tPI zQ>yS=?biil<*uxK_jY&x`1`g8Hk9Yhusi7RuzJ0e5bpdor|T42{#3X7$OuQoseI}S zf*|Ia04T8BHQu(Vy_tIl?}M~c>KE(s zpsfTbO<~PEa;@LXLcL4y&52wwAv^81q{~G$7ud_*m)m=$DWG47u@}#*|3*sz$L49Z zP~_Q%4bVVLQCj|%pYp1=b2@+MxIEO{$DBf1V@YEptL%22w)dclX6x3voU=pCpA9DI zdeB^(N*pmsmz8ngMlrhGK5!=ktW>G8>{)mef*&tag$JN^qEa-G?wg{N9;Qbk=o0e3 zph=)pV=J~c3SDke?GVvad6)MMo8P2^=)5QE^y$kU?lfQ%EvXDXjdj@c%#s%gAtJ#E z#pC$7aHe=-ycZ(-IV{*=t@7#97c!FgvNGZ~WrL&qS7oxFu;CHmdWS<<(8Ca)%xd-) zn0%$25vaodTFd{NXX9`+O6J(UQS|zJ#+c}yXU~1Nyr*WRYC));NH`di!)GJKwPf1r zdcU!B!|Op8K@2(Ra+f>#FkbMhYu)S)wYT0pB|h&>LEZ9_KYS$hR#pEy`NRB(!#^)h z-@^A3kM_4q5aJtZ5YKjn`yPLfK=8Yx%aQ>`PA{?MFoW0IOu@`6AW?CWe&3IGUU|oh z-A+-x(kRrCP9#E&Wm)V+j!bF_9$yXLohTy7XW@rB8=l!d9`DC5~8CaTtlv zeWr|j?%=FrvC{6AWbJiC@<&GpO{MRV2qFGl39egVG~~tTEtd^rL-Zw{Nsq8##xiwW;-_`^geJBe+2-`U9S&2sWwkyYdG@NgvqJ*d{`$(~_8cVJM+pF-OK8 z@GoN1#jz}_;%sd}3S>zm>?e^|Fp9p3*s5b>Jwdm3wXylgQrZ1Q_RrHWbF#q;fBf|* zc-yNXINJ-NF9JzK_X4H}mf1t%q@#Fn#k5Tq_he`xmLHVXyhzYOvabDknIiKxYpWo+ z$j5QDROFn>P>KFz((a_NDc7jTW=)pKIvtG;N}AJ4Iz4!M^A-K6O5tyX!3BD3t#ay0 z8|o!`nRF&Z%~j-jb-y+;J!#Q-5y^;86q05O54RqTOvMK#ThR?*D`=b9KXrR?_o+a{0Vlba>l z8tLlNz4E?Txu}O62IlE~3fFIjljVyvuFj7_$PK{;Wt`>*sAk1Ck7uMZyDu5ZSruM!=WR{8@WN#X!x zib@sVc9f&@77doetG?D6Z^5frUL)MOC(a1YOVuY zExaFtIh_-AfaXv0OBC3KS6WW%-VIG@MAr|aof#?`LF87tz<*Yy?@{JP^A|+fND#Ss zzxRC@3jC@q0u37%Mp*h<$Q)nxb}1q!k%(ttwOY8yBO7z0n$#awo`hcy3rY^fZHUUO z-o7ISt-pUBoCSVj!%%wXgi|?7fmAAs9cu$Fhf<<$LifATGDYV4N&ng~8k1flb^b7a z8neU~5yR+1|NEB%kMJ{!f6kWF(Hmuyb9dc}v=SR&$gW4K~)Nd1COq zHV^Y~?53gI5hg(j6=Bhznqq&F7SqJqv&XMyg1sbZe&csT} zw79*vlUQ?d&0(bZ+XJtXh{K9=m9ba8Pda3svJ8*fZ_)6CG4&9aqoRd%0ln$$soOA0 zJr`w+X{)b!D{?(Y*|3=zW3O*LZpGb0I%WLlKlCED__RyC+KO1iSUvHMauR1 ze+z2%nd!vu;RUVfT0*i`Xoz$rGE&IH(sjtMbkiNZDPl^OM2W#^fnwUR#9w#?V{R1~ z7SxhQ&N_lZG*VE+KUC!#SN|2qB`vI=RH7y}I3el@H(^7Ey__%MXh%X_m5;ItM}{}k z+8}!m%^%lr-#A~c4SXN<^iP{rOSpq%FL#$=^o^sl*=1pJvGsL(y8NioLbqMsWIu!G4Egj4e*t&+jeP^te&Gm~}800lA1N5&EQY2* zz5=yrukmajZBN%!t1i!D=Z|j_emeMo)fw8 z32d10cZk$m#(5(lYNxv=l;sn+gM1|V+snH*xJHJWJF*0eUivWIy^c6`_h(s{P0QSA zZwqsWaF74zNH}X9HXnh#m3fuCA*#L-hL(;eZO_$*IG?e@&k|FdK5X?TEs*3L}t+&a}ZPT07hj?a1L-m(lwuZ*y5Cd<$=0 z^RLvYSNJ+*h>5@SUFYL=dme>8ZW7c{x#kKxw;&NLx=j}gIDWTY5^vy(yrk`Cu6v=k znUYz1AIu~XG>RV-XH)!U86{_VNM|tgi|8DF-rm}eBUF~wagO!bcXQSh)%Lo7VC^xg zR+zW`hhdu3y2eUl!nn-Zo_7I)&;OA#v+5A}fK5aE_`6E;!hPPSrdWhGrg4LN54Qbd zq2su{$83A>H%_z^mB$2Q&5z0juboD_KZ=qPkSO!)3d6WmdTOqm+5@% zQNyO{WJ_NxkL(I`U}o*@5T%#=$$?E(KIc6o*JFq~pq~&#_Q>y6Hh&Uv0LKjrMce$* z#uKti!C7Fn%Zx%}Rl9c`uYG8~B4bp)?*oTBC5vK}ALUn4@On_dVF5>GdQ5GkP}(Gw z0o;YL9AwZ+J3keHqt{3Fel`Sf(#}gQAZfCAD#KPRK4uynBc?&Df{wb@kQ}4VCCPm$5y6=z;mn-~!$%RWtH~sRq+nN_1mnY@!mu`rDqz1FZ zWZ@nuIu=+ZoI7oBq+SjbghCAv*B)ugU;Yy!6_PaNwGaO2qUZl0UyxFrh92N;jN${5 z1Y`thaP+!Hfo-7-?}>dMSw~)r5#(a1oeW0Cy{RA4dSbqcSR@=&>^0u?JG;kBylVN* zNt490@B1hD@rYm+snWRgg#LbrT2EDIiIiIJY;|a0%W1eE9SU%A(H?tD(jcN3mvM@b zDRyv8Jb#=@4!#xEY_`n zwaO~{fJlGN#l`QPoOQBBUJqfed3~iEnxdCzr`tX^LxvG9mM7`VxF3kif$|6?|~_MU7=rMt&^V;f+N_a zaLutQLsjbONu=xBFjpUuC@@IGP4-Y(VHKTc>?_s0VG;5 jAE_-MbQ?G(D{dXHGu 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

9c&Uf<$U&^4tb_VjJ)(x{7OcX3yN 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 Date: Wed, 1 May 2024 17:53:09 -0500 Subject: [PATCH 4/7] ignore dist --- .gitignore | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index ed88275..ebaed46 100644 --- a/.gitignore +++ b/.gitignore @@ -1,27 +1,16 @@ -/scratch/ -/docs/build/ -/qfit/.idea/ -/.idea/inspectionProfiles/Project_Default.xml -/.idea/qfit.iml -/.idea/vcs.xml -/.idea/workspace.xml -/qfit/.ipynb_checkpoints/ +*.pyc +**/.idea +**/.ipynb_checkpoints/ /qfit.egg-info/ /qfit/version.py +resources/resources_rc.py +dist +build +qfit.egg-info # Danyang's unwanted files .DS_Store -*.pyc /danyang_tests -resources/resources_rc.py -qfit.egg-info -qfit/controllers/test.ipynb -test.ipynb -qfit/controllers/.jupyter_ystore.db -qfit/controllers/.ipynb_checkpoints/test-checkpoint.ipynb -build -dist/qfit-0.1.0-py3.9.egg -dist/qfit-0.1.0-py3.11.egg # Tianpu's unwanted files example_data/test.qfit @@ -37,7 +26,6 @@ gif_raw_source/.$calibration_new.drawio.bkp gif_raw_source/calibration_new.drawio gif_raw_source/.$calibration_new.drawio.dtmp qfit_test.zip -.ipynb_checkpoints/QFit_Quick_Start-checkpoint.ipynb media_raw_source/.$calibration_new.drawio.bkp media_raw_source/.$calibration_notebook_ver.drawio.bkp media_raw_source/.$calibration_with_step_notebook_ver.drawio.bkp @@ -54,7 +42,6 @@ media_raw_source/calibration.svg media_raw_source/Backup_of_tag-question.cdr media_raw_source/Backup_of_tag.cdr .gitignore -.gitignore media_raw_source/tag.cdr media_raw_source/tag-question.cdr plot_data.ipynb From afcc0bb2516950423d9335b877455659fe478722 Mon Sep 17 00:00:00 2001 From: Danyang Chen Date: Wed, 1 May 2024 17:57:51 -0500 Subject: [PATCH 5/7] install on linux seems require a library? --- .github/workflows/publish_to_pypi.yml | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 6f24d1b..89bd774 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -29,6 +29,37 @@ jobs: name: python-package-distributions path: dist/ + test-installation: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + python-version: ["3.10"] + steps: + - uses: actions/checkout@v2 + name: Checkout the repository + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Linux System Dependencies + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo apt-get update + sudo apt-get install -y libegl1-mesa + + - name: Install dependencies and QFit + run: | + pip install --upgrade pip + pip install . + + - name: Test installation + run: | + python -c "from qfit import Fit; print('Installation successful')" + publish-to-pypi: name: >- Publish to PyPI From 58d43c86d84ee986d0e210e6a5c583fcb6c60bdf Mon Sep 17 00:00:00 2001 From: Danyang Chen Date: Wed, 1 May 2024 18:06:02 -0500 Subject: [PATCH 6/7] try to fix linux installation error --- .github/workflows/publish_to_pypi.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 89bd774..4af235e 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -29,6 +29,7 @@ jobs: name: python-package-distributions path: dist/ + test-installation: runs-on: ${{ matrix.os }} strategy: @@ -49,17 +50,24 @@ jobs: if: startsWith(matrix.os, 'ubuntu') run: | sudo apt-get update - sudo apt-get install -y libegl1-mesa + sudo apt-get install -y libegl1-mesa # missing libEGL.so.1 + sudo apt-get install -y xvfb # GUI backend for matplotlib (Ubuntu doesn't have a display) - name: Install dependencies and QFit run: | pip install --upgrade pip pip install . - - name: Test installation + - name: Test installation on Linux + if: startsWith(matrix.os, 'ubuntu') run: | - python -c "from qfit import Fit; print('Installation successful')" - + xvfb-run --auto-servernum python -c "from qfit import Fit; print('Installation successful')" + + - name: Test installation on macOS and Windows + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'windows') + run: python -c "from qfit import Fit; print('Installation successful')" + + publish-to-pypi: name: >- Publish to PyPI @@ -85,6 +93,7 @@ jobs: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} + github-release: name: >- Sign with Sigstore and upload them to GitHub Release @@ -127,6 +136,7 @@ jobs: '${{ github.ref_name }}' dist/** --repo '${{ github.repository }}' + publish-to-testpypi: name: Publish to TestPyPI needs: From c3eeb086f5631aa0fc4dd9a125598beecb310797 Mon Sep 17 00:00:00 2001 From: Danyang <58295527+Harrinive@users.noreply.github.com> Date: Wed, 1 May 2024 20:30:48 -0500 Subject: [PATCH 7/7] in README.md, change the installation method to pip --- README.md | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 2c58883..ce4aab7 100644 --- a/README.md +++ b/README.md @@ -28,24 +28,14 @@ Installation and Usage Follow these steps to install `QFit`: -1a. Download source code from GitHub (through `Code` button on the top right), unzip the source code folder in a ``. - -OR - -1b. Open a terminal, `cd ` to the directory where you would like to store the source code of `QFit`, then -``` - git clone https://github.com/scqubits/qfit -``` -2. (Optional but highly Recommended) Create a virtual environment with python (python 3.10 is recommended for satisfying the version requirement for both scqubits and QFit), e.g. run on terminal +1. (Optional but highly Recommended) Create a virtual environment with python (version > 3.10). If you are using conda, run on terminal ``` conda create -n python=3.10 conda activate ``` -3. On terminal, install `QFit` by +2. On terminal, install `QFit` by ``` - cd /qfit - conda install --file requirements.txt --yes -c conda-forge - pip install . + pip install qfit ``` Once done, the application can be launched in a jupyter notebook session via ``` @@ -54,7 +44,7 @@ Once done, the application can be launched in a jupyter notebook session via ``` where `` is a `scqubits.HilbertSpace` object, the circuit model you want to fit against. -Check out the notebook [QFit_Quick_Start.ipynb](./QFit_Quick_Start.ipynb) for a quick intro tutorial. +Check out the notebook [QFit_Quick_Start.ipynb](./QFit_Quick_Start.ipynb) for a quick intro tutorial, and [QFit_Advanced_Tips.ipynb](./QFit_Advanced_Tips.ipynb) for further information. License -------