stud

study spacejunk
Log | Files | Refs | LICENSE

deg.py (1506B) - Raw


      1 from decimal import Decimal as D
      2 
      3 class Deg:
      4     def __str__(self):
      5         return "%03d-%02d-%3.1f" % (self.deg, self.mm, self.ss)
      6 
      7     def __init__(self, deg, mm, ss):
      8         self.deg = D(deg)
      9         self.mm = D(mm)
     10         self.ss = D(ss)
     11 
     12     @classmethod
     13     def from_1(cls, deg):
     14         assert isinstance(deg, D)
     15 
     16         pdeg, pmm = divmod(deg, 1)
     17         pmm = pmm * D(60)
     18         pmm, pss = divmod(pmm, 1)
     19         pss = pss * D(60)
     20         return cls(pdeg, pmm, pss)
     21 
     22     @classmethod
     23     def guess(cls, instr):
     24         if '-' in instr:
     25             deg, mm, ss = instr.split('-')
     26             return Deg(deg, mm, ss)
     27         return cls.from_1(D(instr))
     28 
     29     @property
     30     def frac(self):
     31         return (
     32             self.deg +
     33             self.mm / D(60) +
     34             self.ss / D(3600)).normalize()
     35 
     36 
     37 import unittest
     38 class TestDeg(unittest.TestCase):
     39     def test_deg(self):
     40         w = Deg.guess('125.505')
     41         self.assertEqual(125, w.deg)
     42         self.assertEqual(30, w.mm)
     43         self.assertEqual(18, w.ss)
     44 
     45     def test_guess(self):
     46         w = Deg.guess('112-58-25.4')
     47         self.assertEqual(112, w.deg)
     48         self.assertEqual(58, w.mm)
     49         self.assertEqual(D('25.4'), w.ss)
     50         frac = "%3.7f" % w.frac
     51         self.assertEqual('112.9737222', frac)
     52 
     53     def test_str_lower(self):
     54         w = Deg(120, 1, 42.541)
     55         self.assertEqual("120-01-42.5", str(w))
     56 
     57     def test_str_upper(self):
     58         w = Deg(120, 1, 42.545)
     59         self.assertEqual("120-01-42.5", str(w))