<div dir="ltr"><div>The code below, which I've shared before in an earlier draft, is meant to test mailman's Unicode abilities i.e. when I check the archives, is everything intact, font-wise etc.</div><div>Thanks to two of my OST students for helping out.  I18N is to be OST's theme at OSCON</div>
<div>this year so I consider this work "on the clock" as we say.</div><div><br></div><div>Kirby Urner</div><div>O'Reilly School of Technology</div><div><br></div><div>======</div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">"""</font></div><div><font face="courier new, monospace">Includes:</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">PlaneNets (ПлейнНэт) from Synergetics for A, B, E, T, S</font></div>
<div><font face="courier new, monospace">Koski breakdowns of some shapes in E and S vols with phi scaling</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Euler volume, modified by Gerald de Jong</font></div>
<div><font face="courier new, monospace"><a href="http://www.grunch.net/synergetics/quadvols.html">http://www.grunch.net/synergetics/quadvols.html</a></font></div><div><font face="courier new, monospace">Kirby Urner (c) MIT License</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Министерство Глупых Походок</font></div><div><font face="courier new, monospace">Министерство образования</font></div><div>
<font face="courier new, monospace">"""</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">from math import sqrt, hypot  # sqrt: квадратный_корень</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">class ПлейнНэт:</font></div><div><font face="courier new, monospace">    """Любой шесть край тет в шаблоне описано в API нот"""</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def __init__(self, oa, ob, oc, ab, bc, ca):</font></div><div><font face="courier new, monospace">        self.oa = oa</font></div>
<div><font face="courier new, monospace">        self.ob = ob</font></div><div><font face="courier new, monospace">        self.oc = oc</font></div><div><font face="courier new, monospace">        self.ab = ab</font></div>
<div><font face="courier new, monospace">        self.bc = bc</font></div><div><font face="courier new, monospace">        <a href="http://self.ca">self.ca</a> = ca</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">class Тетраэдр:</font></div><div><font face="courier new, monospace">    """</font></div><div><font face="courier new, monospace">    Займет шесть края тетраэдра с лицами</font></div>
<div><font face="courier new, monospace">    (а, б, г) (б, в, д) (с, а, е) (д, д, е) - объем возвращается</font></div><div><font face="courier new, monospace">    если IVM и XYZ</font></div><div><font face="courier new, monospace">    """</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def __init__(self, a,b,c,d,e,f):</font></div><div><font face="courier new, monospace">        self.a, self.a2 = a, a**2</font></div>
<div><font face="courier new, monospace">        self.b, self.b2 = b, b**2</font></div><div><font face="courier new, monospace">        self.c, self.c2 = c, c**2</font></div><div><font face="courier new, monospace">        self.d, self.d2 = d, d**2</font></div>
<div><font face="courier new, monospace">        self.e, self.e2 = e, e**2</font></div><div><font face="courier new, monospace">        self.f, self.f2 = f, f**2</font></div><div><font face="courier new, monospace"><br></font></div>
<div><font face="courier new, monospace">    def ivm_объем(self):</font></div><div><font face="courier new, monospace">        return ((self._addopen()- self._addclosed() - self._addopposite())/2) ** 0.5</font></div><div>
<font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def xyz_объем(self):</font></div><div><font face="courier new, monospace">        return sqrt(8/9) * self.ivm_volume()</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def _addopen(self):</font></div><div><font face="courier new, monospace">        a2,b2,c2,d2,e2,f2 = self.a2, self.b2, self.c2, self.d2, self.e2, self.f2</font></div>
<div><font face="courier new, monospace">        sumval = f2*a2*b2</font></div><div><font face="courier new, monospace">        sumval +=  d2 * a2 * c2</font></div><div><font face="courier new, monospace">        sumval +=  a2 * b2 * e2</font></div>
<div><font face="courier new, monospace">        sumval +=  c2 * b2 * d2</font></div><div><font face="courier new, monospace">        sumval +=  e2 * c2 * a2</font></div><div><font face="courier new, monospace">        sumval +=  f2 * c2 * b2</font></div>
<div><font face="courier new, monospace">        sumval +=  e2 * d2 * a2</font></div><div><font face="courier new, monospace">        sumval +=  b2 * d2 * f2</font></div><div><font face="courier new, monospace">        sumval +=  b2 * e2 * f2</font></div>
<div><font face="courier new, monospace">        sumval +=  d2 * e2 * c2</font></div><div><font face="courier new, monospace">        sumval +=  a2 * f2 * e2</font></div><div><font face="courier new, monospace">        sumval +=  d2 * f2 * c2</font></div>
<div><font face="courier new, monospace">        return sumval</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def _addclosed(self):</font></div><div><font face="courier new, monospace">        a2,b2,c2,d2,e2,f2 = self.a2, self.b2, self.c2, self.d2, self.e2, self.f2</font></div>
<div><font face="courier new, monospace">        sumval =   a2 * b2 * d2</font></div><div><font face="courier new, monospace">        sumval +=  d2 * e2 * f2</font></div><div><font face="courier new, monospace">        sumval +=  b2 * c2 * e2</font></div>
<div><font face="courier new, monospace">        sumval +=  a2 * c2 * f2</font></div><div><font face="courier new, monospace">        return sumval</font></div><div><font face="courier new, monospace"><br></font></div><div>
<font face="courier new, monospace">    def _addopposite(self):</font></div><div><font face="courier new, monospace">        a2,b2,c2,d2,e2,f2 = self.a2, self.b2, self.c2, self.d2, self.e2, self.f2</font></div><div><font face="courier new, monospace">        sumval =  a2 * e2 * (a2 + e2)</font></div>
<div><font face="courier new, monospace">        sumval += b2 * f2 * (b2 + f2)</font></div><div><font face="courier new, monospace">        sumval += c2 * d2 * (c2 + d2)</font></div><div><font face="courier new, monospace">        return sumval</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">φ = sqrt(5)/2 + 0.5</font></div><div><font face="courier new, monospace">D = 1.0</font></div>
<div><font face="courier new, monospace">R = D/2</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">def объем(net):</font></div><div><font face="courier new, monospace">    return Тетраэдр(net.oa, net.ob, net.oc, net.ab, net.bc, <a href="http://net.ca">net.ca</a>).ivm_объем()</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"># Fig. 913.01 A Quanta Module</font></div><div><font face="courier new, monospace"># <a href="http://www.rwgrayprojects.com/synergetics/s09/figs/f1301.html">http://www.rwgrayprojects.com/synergetics/s09/figs/f1301.html</a></font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">a = D</font></div><div><font face="courier new, monospace">EF = a * sqrt(6) / 12</font></div><div><font face="courier new, monospace">EC = a * sqrt(6) / 4</font></div>
<div><font face="courier new, monospace">ED = a * sqrt(2) / 4</font></div><div><font face="courier new, monospace">FC = a * sqrt(3) / 3</font></div><div><font face="courier new, monospace">CD = a/2</font></div><div><font face="courier new, monospace">DF = a * sqrt(3) / 6</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Amod = ПлейнНэт(EF, EC, ED, FC, CD, DF)</font></div><div><font face="courier new, monospace">Avol = объем(Amod)</font></div>
<div><font face="courier new, monospace">print("Amod volume = :", Avol)</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"># Fig. 916.01 B Quanta Module</font></div>
<div><font face="courier new, monospace"># <a href="http://www.rwgrayprojects.com/synergetics/s09/figs/f1601.html">http://www.rwgrayprojects.com/synergetics/s09/figs/f1601.html</a></font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">a = D</font></div><div><font face="courier new, monospace">EA = a * sqrt(2) / 2</font></div><div><font face="courier new, monospace">EC = a/2</font></div><div><font face="courier new, monospace">EB = a * sqrt(6) / 12</font></div>
<div><font face="courier new, monospace">AC = a/2</font></div><div><font face="courier new, monospace">CB = a * sqrt(2) / 4</font></div><div><font face="courier new, monospace">BA = a * sqrt(6) / 4</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">Bmod = ПлейнНэт(EA, EC, EB, AC, CB, BA)</font></div><div><font face="courier new, monospace">Bvol = объем(Bmod)</font></div><div><font face="courier new, monospace">print("Bmod volume = :", Bvol)</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"># Fig. 986.411A T & E Module</font></div><div><font face="courier new, monospace"># <a href="http://www.rwgrayprojects.com/synergetics/s09/figs/f86411a.html">http://www.rwgrayprojects.com/synergetics/s09/figs/f86411a.html</a></font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">h = R</font></div><div><font face="courier new, monospace">OC = h</font></div><div><font face="courier new, monospace">OA = h * sqrt((5 - sqrt(5))/2)</font></div>
<div><font face="courier new, monospace">OB = h * sqrt((9 - 3 * sqrt(5))/2 )</font></div><div><font face="courier new, monospace">CA = (h/2) * (sqrt(5) - 1)</font></div><div><font face="courier new, monospace">AB = h * sqrt(5 - 2 * sqrt(5))</font></div>
<div><font face="courier new, monospace">BC = (h/2) * (3 - sqrt(5))</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Emod = ПлейнНэт(OC, OA, OB, CA, AB, BC)</font></div>
<div><font face="courier new, monospace">Evol = объем(Emod)</font></div><div><font face="courier new, monospace">print("Emod volume = :", Evol)</font></div><div><font face="courier new, monospace"><br></font></div>
<div><font face="courier new, monospace"># Fig. 986.411A T & E Module</font></div><div><font face="courier new, monospace"># <a href="http://www.rwgrayprojects.com/synergetics/s09/figs/f86411a.html">http://www.rwgrayprojects.com/synergetics/s09/figs/f86411a.html</a></font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">h = R * pow(2/3,1/3) * (φ / sqrt(2))</font></div><div><font face="courier new, monospace">OC = h</font></div><div><font face="courier new, monospace">OA = h * sqrt((5 - sqrt(5))/2)</font></div>
<div><font face="courier new, monospace">OB = h * sqrt((9 - 3 * sqrt(5))/2 )</font></div><div><font face="courier new, monospace">CA = (h/2) * (sqrt(5) - 1)</font></div><div><font face="courier new, monospace">AB = h * sqrt(5 - 2 * sqrt(5))</font></div>
<div><font face="courier new, monospace">BC = (h/2) * (3 - sqrt(5))</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Tmod = ПлейнНэт(OC, OA, OB, CA, AB, BC)</font></div>
<div><font face="courier new, monospace">Tvol = объем(Tmod)</font></div><div><font face="courier new, monospace">print("Tmod volume = :", Tvol)</font></div><div><font face="courier new, monospace"><br></font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"># Fig. 988.13A S Quanta Module Edge Lengths</font></div><div><font face="courier new, monospace"># <a href="http://www.rwgrayprojects.com/synergetics/s09/figs/f8813a.html">http://www.rwgrayprojects.com/synergetics/s09/figs/f8813a.html</a></font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">a = D</font></div><div><font face="courier new, monospace">FG = (a/2) * sqrt(3) * sqrt(7-3*sqrt(5))</font></div><div><font face="courier new, monospace">FE = a * sqrt(7 - 3*sqrt(5))</font></div>
<div><font face="courier new, monospace">FH = (a/2) * (sqrt(5)-1)</font></div><div><font face="courier new, monospace">GE = (a/2) * sqrt(7 - 3*sqrt(5))</font></div><div><font face="courier new, monospace">EH = (a/2) * (3 - sqrt(5))</font></div>
<div><font face="courier new, monospace">HG = (a/2) * sqrt (7 - 3*sqrt(5))</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">Smod = ПлейнНэт(FG, FE, FH, GE, EH, HG)</font></div>
<div><font face="courier new, monospace">Svol = объем(Smod)</font></div><div><font face="courier new, monospace">print("Smod volume = :", Svol)  # φ**=5 / 2</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">print("================")</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sFactor = Svol / Evol</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">s3 = Svol * pow(φ, -3)</font></div><div><font face="courier new, monospace">s6 = Svol * pow(φ, -6)</font></div><div><font face="courier new, monospace">e3 = Evol * pow(φ, -3)</font></div>
<div><font face="courier new, monospace">E3 = Evol * pow(φ, 3)</font></div><div><font face="courier new, monospace">print("sFactor (Svol/Evol) =   ", sFactor)</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">print("================")</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">BUvol = (20 * sFactor ** 2)</font></div>
<div><font face="courier new, monospace">LUvol = BUvol/8  # 60 * S + 20 * s3</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">print("BigUgly:                {:10.7f}".format(BUvol))</font></div>
<div><font face="courier new, monospace">print("SuperRT:                {:10.7f}".format(120 * E3))  # ромбические триаконтаэдра</font></div><div><font face="courier new, monospace"># print("UnknownTet:             {:10.7f}".format(20 * sFactor **  1))</font></div>
<div><font face="courier new, monospace">print("VE    (edge 2):         {:10.7f}".format(20 * sFactor **  0)) #  420 * Svol + 100 * s3</font></div><div><font face="courier new, monospace">print("Icosa (edge 2):         {:10.7f}".format(20 * sFactor ** -1)) #  420 * Evol + 100 * e3</font></div>
<div><font face="courier new, monospace"># print("BizzaroTet:             {:10.7f}".format(20 * sFactor ** -2)) #  360 * Svol +  85 * s3</font></div><div><font face="courier new, monospace">print("SmallGuy:               {:10.7f}".format(20 * sFactor ** -3)) #  360 * Evol +  85 * e3</font></div>
<div><font face="courier new, monospace">print("RD6:                    {:10.7f}".format((2*Avol + Bvol) * 4 * 12))</font></div><div><font face="courier new, monospace">print("RT5+:                   {:10.7f}".format(120 * Evol)) # ромбические триаконтаэдра</font></div>
<div><font face="courier new, monospace">print("RT5:                    {:10.7f}".format(120 * Tvol)) # ромбические триаконтаэдра</font></div><div><font face="courier new, monospace">print("октаэдр (edge 2):       {:10.7f}".format((Avol + Bvol) * 6 * 8)) # 6 ABs per face</font></div>
<div><font face="courier new, monospace">print("LittleUgly + 24 Smods:  {:10.7f}".format(LUvol + 24 * Svol))</font></div><div><font face="courier new, monospace">print("куб:                    {:10.7f}".format(267* s3 + 63 * s6)) # Тетраэдр + 6 1/8 октаэдр</font></div>
<div><font face="courier new, monospace">print("LittleUgly:             {:10.7f}".format(LUvol))</font></div><div><font face="courier new, monospace">print("VE faces in LittleUgly: {:10.7f}".format(LUvol * sFactor**-2))</font></div>
<div><font face="courier new, monospace">print("Тетраэдр:               {:10.7f}".format( 21 * Svol + 5 * s3))</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">import unittest</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">class Test_Tetrahedron(unittest.TestCase):</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def test_unit_volume(self):</font></div>
<div><font face="courier new, monospace">        tet = Тетраэдр(D, D, D, D, D, D).ivm_объем()</font></div><div><font face="courier new, monospace">        self.assertAlmostEqual(tet, 1.0)</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">    def test_unit_volume2(self):</font></div><div><font face="courier new, monospace">        tet = Тетраэдр(R, R, R, R, R, R).xyz_объем()</font></div><div><font face="courier new, monospace">        self.assertAlmostEqual(tet, 0.1178511)</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def test_phi_edge_tetra(self):</font></div><div><font face="courier new, monospace">        tet = Тетраэдр(D, D, D, D, D, φ )</font></div>
<div><font face="courier new, monospace">        self.assertAlmostEqual(tet.ivm_объем(), 0.70710678)</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def test_right_tetra(self):</font></div>
<div><font face="courier new, monospace">        e = hypot(sqrt(3)/2, sqrt(3)/2)  # right Тетраэдр</font></div><div><font face="courier new, monospace">        tet = Тетраэдр(D, D, D, D, D, e).xyz_объем()</font></div><div>
<font face="courier new, monospace">        self.assertAlmostEqual(tet, 1.0)</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    def test_smod_volume(self):</font></div>
<div><font face="courier new, monospace">        svol = 0.5 * φ**-5</font></div><div><font face="courier new, monospace">        self.assertAlmostEqual(Svol, svol)</font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace">if __name__ == "__main__":</font></div><div><font face="courier new, monospace">    unittest.main()</font></div></div>