[Tutor] uncertainty pre-release and new 'round' PEP suggestion

Christopher Smith csmith@blakeschool.org
Wed, 29 Aug 2001 17:50:13 -0500


OK, here's a binhex of a sit compression of the class which 
works with numbers and their uncertainty.  (Sorry, no web
site that I can send it to yet.)

I'm still not exactly sure what the best arrangement of 
the math functions is:

1) both method and function syntax allowed for as pat present

2) just function syntax where all the definitions of methods
would have to be moved up into the functions.  One pro for
this is less likelihood for user error when dooing something
like a**b.log()--does the user know if this does (a**b).log()
or a**(b.log())?  The function syntax removes one level of
user error.

I'm having difficulty figuring out how to use coerce and
float successfully.  Bassically I would like to handle
addition of regular numberics and the PHYS class (formerly
called uncertain, but I haven't finalized on a name yet).
If I define coerce then I get a complaint about not having
__float__defined.  And if I put in an additional float
definition then I get an infinite loop.  I just don't have
a lot of time right now to solve this problem...if anyone
hsa some suggestions I could use the help.

When this is done I think it would be nice to add to 
something like the SCIENTIFIC package.  Any other ideas?

Also, I have a suggestion for a PEP.  In addition to
ROUND with a +/- argument, allow for a decimal argument
which would round x to the dth digit after the first one.
Often in science I just want the first 3 digits wherever
they occur.  Here is how the function would behave:

from math import floor,log10
def Round(x,n):
    d=n%1
    if d==0:
        return round(x,n)
    else:
        # going to treat everything after the decimal like an integer
        d=str(d)
        d=int(d[d.find('.')+1:])
        return round(x,d-1-int(floor(log10(abs(x)))))

x=1.23456
print Round(x,2)        #1.23
print Round(x,0)        #1.0
print Round(x,.2)       #1.2
print Round(10*x,-1)    #10.0
print Round(10*x,.2)    #12.0
print Round(1000*x,.2)  #1200.0

Any comments on this for a PEP?

/c

(This file must be converted with BinHex 4.0)
:$A"SHA-ZF(NZFfPd,M%!8dP8090*9#%!N!33r`#3"1+68h4eCQC*G#!SBbNa16N
h,6%j16JJ3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z,#"SG(4`1Lm[Gj!$,Q&XB@4ND@j
cHA-ZBfpY,e0dG@CQ5A3[$3SD!!83!!!3r`#3!h)!!3#3!h)cY3fPT9*PFf9bGQ9
NTD8!TC!%!3!!0`!3Yl#%KlHbdq`!N!d(hiS!!#`%!!!0p3#3"!m!F'KjFbj`H3!
"`NT849K88LTMD!%!rj!%!*!+J!#3"85i!!!'V!!!!Lm!N!32!%,"e-H`M)5VVp4
ll%VS,ek!R3l!qEqEd'$b&LVC5r"B5+$0B6#JSl3QXBD#F-+mVFrQRhZU4S34#*j
lCkCLE+IXA+EVQ@ZQiKA1()"3&*0`M(GDiScqY(IT'1e*2+L+U`K"D-f3!1Uqc@m
AZH#0)83PHIljkhqBZ$8V!qdkVc)*6SUlj(K60`5-R[j4iST8$20HL6dL#l[k-H*
CbbGaf5RR&RGV#fiZq3R!aiIP,3)1$ZmFE0BJ`KDTabSX6H$P+M#Nc%65d('!Q15
ElIqNf1S`FT9YPhiC#2jZ66Zh"Xm&)+)pB"4UHRj`Apmm2G5ar@SB"qrK"$pCfJ+
@"'EQa"P92Rk2p9qBe+1-GN!5f9cQ*QkmCLV'EM@[CHIDdlS3D%3S4@dY4lD('NB
!mmmj6Z2TEjBmXXj*qIViq9HMlN2e8qA'4iS"jP)9Abm23Fm5!PBF$UQ$8qbX`"0
Mk15mXr+rFCN(,,P4(Ka03Gj9qQ+Y"p+d*MZL[-2S+i2IlRDhkecEY3#!*A*TkTH
N2YkZ9H(jD66V$51,CSZK'd)SC6q`Ak5$mEZTV-IZj5L3!&rULMM%ejKD)i20h-P
rZjA'KJrXS0252HBA&UICD$'`emEHAa(3!HXR$k)CJZCMr2EqKS1'Pbp,%!9K)Td
lmeP##N3Ha(qAZh1G(6&[h1Ga%(+qLZ03S(VAJEXL42d9LaH2R'&YA(jC'Jb4CMc
cY4!4,63T+T8'*cmmVk143LdSA(h'6%,"e38dPA`'b[1'"1AINh[5S0,S0El!cGM
d2C'TLU+1`)'K"5%C%6,(&qc[DLG$aQXAERhE0N5Nj`(BcLQUGAP4%,%KM1Tr3ri
!f-diphCNc+iA@Ha1!bP`F%)fMpZBBZ2YibGLb1&5pl1EP9)I+HpIi)fYUbI2A$P
TSZlU(C1INL)AJmD+4ijk1U0[4aK56kHX#9&USk8M,bXfc,@GH!c,HPZ$qm&hVQ(
R15(2YSeDC`HAI!+rkLKD[$3'*5T6I@+XljA9'mqFiK+-I[5IHkH%%,),jVZQCJI
Zdrel!rVc[AL5j,2pTa&BJLrf"0YaFR5$jF4A'jiKMTT)mZ&'i8c)L@Dm)mp#PAR
#FrdGY1&Hr)JHJ-&TE@Gd10Qe#1I%EPdC!Grif88'r#3emGCUi!B#9%X`R#BNdIR
EK2`HNkcD9f%cbmQ&d5q('!5"2K*f8!hL4cRb5mN4phTaSJ95a6ImZhRPRC)A-%V
CM0054CQA6l1P&+rE1l6*`Q18#Ifqj$2L%@#Rrc6&P+S#6"DjHCNaqKFNKFjeib&
"CQE9Ie&i`PJXH5F9JKZ3!)X[d8"')i6qaIM9`m'H(R`kPFdp$6(h9i$!+iD%%F3
h@PK4A)QQfX`QAXiQJN5J+6SMM,AhY59RbVBA2f8k1XKPIC2+Z!DCEFChT[NYQic
&#)9&U5`RNMdU"pG&"qBmTb8Kqqa'60F&9K2)Mkf[-F8@fk4j$4"Kf[DiqZU2rV(
!$DTL6185(bR$`,bS5%,d`dfA0#P%19lG3[KKQU[lHdRI3`G,4rXbCJ"P)0XDU11
KF"`K!8k5,`M+"Ne&5"'LAQ-)FjTU#N2[GZSA&VHj#m%YE%4(mhDQI*!!4c$m@pX
1D#VMi()GT6JDCKUr1GY-`1@0p5d@6IiRFDVd!keS![ECfGq(R+aH[CE+rKfd4iQ
BRa'iNhiV(3Elf$XD"@GRE,r"NhRb3+qDajB*Sf66rPqjEj*+L@hA-LTkRC(mL5b
f"eAZ3GU2Xk5Ep"8IjrT!rEp5bE$PRq6f,L,#2CrLS3eI-)'1PHG4NDk[4A"hK6D
*`i%l(qmRiC4k+CV2RjGL0cMUY5rr@b4@G[GeI54S4eQVN!"2Lf#L3qB'+cdC##r
925E@G'fkHFj[&9JBP&%-0+,CifAk-md3i@Gp'@E!9rP3cFC&+#)R68VmG)-2Xap
U$)f(LV$ZZY,C321--#UDNSP2bTQH*J0"+)Q"fLB!D[Z$$Gf!%460P6Y!V6r-Ndl
5G[SiUJ"(r[hFj`qki9%kqX[jPhM5l1FH@1!Y9-NDIjk0qi#m6k2E"dJDpK(ZN!$
EMbc5kppE6'-P6QNQrXaaLClD0R0[qZ()cL2lM4(5Qrc%#@fmCJF(SrK,k"9!lA1
*K!DHVk6q#"laE4I8SbMpV'5ljEDk(M3DKaJe1294Eh&KpBEX&BUYIMd[(,Q2-cc
QQ(hcJE5e3b2qldfFTmA+ZD'3!!(a"il[F!epUa"KaEY"cH0$))clDP592[fp'f2
9'S5aDrak"F"Rp#BNFc6ZF)L6Jr*PI*3'+"Ae+IdAp9!3h!bCBN3P(*M9Aq-e#U1
(Sb+FV85rU*Mkf'R%0Q9+hYYDV#j2a"HZ'334dPmp4cqr$`RA1DEP)5F5cbI5pjB
6XLX@(@(!T$&'XdpGl`SM)H`q5k2r&19,%RANp9kYB2f+)%PXAfZl!*8YTlj9(lK
8PP+@5YQpKH!Z13l[GSYDqF9*'bZ)LBHX6+8QfdlCNQ$b4mXi')*R4MKkTZNAfHH
$Q`%G)q)m)9CA!$4,'e$#h`9[C"kF3(50f(8*(,PAQU)*fkc!c68VP3MT-(fGdLf
P"i!MpM`'JQ1bTj!!Ni9aH$jF@@1J-k@SrBUm@ikrZ62Gp#r2Vh+1"Ih"DcVISUI
2KrfjICjLR1#Aq8Drqr)@e8a8&j*GRQ,Pp[&0)XUrE)Q"[B$Q)IrK%lYANR$8L8Y
d%84mZiTMPG$9fmY!ZQD*ZrPF!'bE%ZcArpaa2f#kP&A[!Ijf9+e5qKIJ%ZQ8qda
qQL'N9E8)E1hNZ5C1,qm@[#'MS("qF,FfkJj!@![HU$k"bVCFhm&#[rAejD44XH[
$,kiikqFZC8"'&M$%lE[CP5"H*+U4IA"idYjGC-YM[V,8V!cVe(kAZ[qke,`V*AS
Ui#9HG`h5+SpMHRYG@9-GDpRRFrY+&%G%-%Y,9!GC5c[@68Lq%#00Bj%ArceZ')*
VZq-0'8'$QjC14ip'HCBVIi0U3'Ab'l3Zf+Kd6@$14,3I2CVm-l2Nk!DDl9dLiUM
bVS%1d3HLiE[AP2LNDGheh,YKb0qpe+*KG+[4IP8A-LC`1Par!0T3i`MLQ&"*GPp
$&2+'HLK#V'lM+X)LXQAXSHX1U&a0+dZfjBSp&aT4`QbYGMqdp`%QZLX$Nc`(hBp
U!JPY*dY`e'Nf63lC"64lNcV&[%jfrQm+YNYQN8`#CS5eBf+aS!"9&SK0P!G`$r1
eq(8d&lN61SN#f*iKqLkK!4hhA6P14"*1FR#b+EQTZ(*Ui&U5VbE"cQMjPPrkbfI
PQh9UR@ekB@5h$,ml`TeeB-U02Z*L%&$5bPAZ'h0+bk9i(N9cSZe3EjUAB4-+6!I
0!XS'"lAI#5+@Cf313N&%H['fTLI"m"-9FrH',k84(pL3!0lYa194(@F'&ReLJG,
T9!!Yk*`qbhf%9B*dBB&ZViq&3EP%BkPGZepUl1b%&V#Gq3eS*'DD28`If3p,6"#
8hGF,@R58!Jaf35bS[l316kIq8!fmYaN,A!G+&H(Q"%-"lAplL'qEHTGXl+f0JiD
KHY`fP3FQhE3EIkCEJJ-piY(6MjDZ1Xq("$$rDdlMq)`@MTJ'L,U9hf$!Ka$h-4-
C0MXejD(6[R3,8G(rF0e"GhRhZ([S'd0G`"[08Xdc53TM,+LBi68$1qbbd2p`[2(
Df"GeBT[heJ!D$%VV&mi[CNjTKk#Mc&LVMmZMLHE%iQG#ml,3fi"Dij(ed%VL9++
4ml[THYY1)@R'm5IEE!GcA3EU)#XU+*9GHkLKSBZ5#YLB#@)eb5h&bhe9#U&RTP!
[-rLIeNiL#8"dB53m1D4(0UiCaPN(V&6(9aMUi(F8')iN"R8YI-9`9JpH6m-!K5i
3fl$Qf4Z)"0S%d!*`0kbFjR3-H2lG"$fIfEh2VGf8'V+@j[k)(9dkqhUB9&ZX+Ei
F["bIA(0-HN,Arqc926@Xj)5+V*jj2Ph')[Ubr3G)%9IMe8(R!Q&V3JE&Z"F`3dJ
!dMH[r4!Xk+0Y,DY)Ul1X[",LCAraRV859i6S3U,JbG!Ck@EpR`ihqeCTq$UAAK'
a@F1p-@GZAi"pFdM2$qjPBh*TH1NlDVRIJ%j#cp)@@$rE0,CPjGh*6CIk#2bl0MM
4r+j%@+DTQQVrE66K38CafkaTe$,DKjGNV)'G"dB1mc*@BK+mRH'6L$D@U#p090q
plD28K#J)#rqEb*8h"V)Dqr+p(aF"!cFUqiB@chA&e'3CiKNN#6m`hY32VK5MpTS
#'q`,4&1CbkLaLjkBU(8`pCf#QZ'[5+*S90'q4&8A8"U!F2A'U(`TTVeY@S@5$lM
1hfVYA(Zm6QF*iV+2Y9rQV#U(k4KLI!2#H-)fUB4ED@K'"+N*RD(Kbm,QlEVY+%G
S'`FN-L#VX08ba0`*'J1Ka9j9hNSYS9H+FCVV5k[pJXX0MXZQ-1!Icbmj,Z)iEpH
UdD[XUBQ-0mU`H!e6BSk,Em&m(EDHDJ`-rh6DphjNV!qLaMFBYpC9Ed8*PD@`IY!
hTYD@+N%ZE$U@lceZKU00,C!!UJD-!%c4RdT6IZMQReH"er`*`q)c*3+!$KDVh02
6$!)RPF0$S[JI)IJ`Z"&p'l-mlT!!+6$40P"bq0CSRG8Q6VGShQBE(IV1)&f9IPK
fUURCKGBK6"T`fr'3!'$eGH)9G6I0435(L5[diR)qf1YrGj0cIfm6b8XmRjRH1hU
f5U)!H(2(Pf)`(dEX)h*rRd`"*0G5$beG3"KJ8*%BU["DIY[`Veq+0@3ITPiE&rP
X602+8B!TeG)Sh6UF+#!p`a'#0)YlKiM1EBC3XFSIlRCLZJGiEbU#k6Nk3hHILZQ
l!b5B@UQ-lmEYB0,r9l1b5H%p#RHf-H*b!h0VTURiT(PKqQ8lK2C'arUVpiXAA$Y
Ri)FqSqX$[LPGQF51LF@GqDY$KSebC5"TNYd'mIQhq*`0&G'i'3rUF9-b"c1FS34
PYTBYUQDf%H&6F@",i[(Y0U2"M`)(@LP3Lhd0GLEiZC4hV&&P1FbJlAk(U@Ka!MG
mL#1&3DbpRMPV5-8V!5A[CAf3!!hiPM4*6UI2HjhcMciLTAe##-j-,l5U23SSB+N
dBZKXN53Lb4X1AU4L(jI+c*frhZ8Th+8iSTi#9k,6bc45'&,%816PBRl5%YH!,"#
IV!&ZG&8b5"P3VKCm$l(L'1AdjC!!GhFB&-XcIa3akDAe+J4fhFem53`4+C&GQ)$
TPZ,`$9XZafek$%ZGHV6cfR"90`H4I63M6K3ATb%)P&S14HRNb6E)ScdqU#%5-hH
KZF!#YUqe0!EQdIp-X"DiCD'UbMi[f9BrLdTCmp#l4-Xh8GTRr-[eTRe6hIq!`(H
@dM84`kL[$2'ZSX(VqQTqiXbkV3i9'qZ&QA51$V$Sb@)dpYiMq$55TVJ-GK2rbQ0
jM[m9HS`(3jRjrR6UmeCa'*&BSeT+Z%Pa00dZVl8)Zf`BbKS[b"(M4idbABlVmC'
1fGfIBm#)!j!!D36l+EB&r#-r2r&V9j+*Np5l@Yml%d8b5V9i5T6N"1VRpAL9"pb
`Nc#2EQ-K!!#D93!!: