Esempio n. 1
0
    def test_fst_edit_dir_dateo(self):
        """Changing dateo with fst_edit_dir should update datev accordingly"""
        
        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)

        self.assertEqual(deet,deet1)
        self.assertEqual(npas,npas1)
        self.assertEqual(datev,datev1)
        self.assertEqual(dateo,dateo1)
        
        #Edit dateo in ref_file
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        dateo2 = rmn.incdatr(dateo,1.)
        datev2 = rmn.incdatr(datev,1.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key  = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, dateo=dateo2)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)
        
        self.assertEqual(deet,deet1)
        self.assertEqual(npas,npas1)
        self.assertNotEqual(datev,datev1)
        self.assertEqual(datev2,datev1)
        self.assertNotEqual(dateo,dateo1)
        self.assertEqual(dateo2,dateo1)
Esempio n. 2
0
    def testLeapYearKnownValues(self):
        """ignore_leapyear option should give known result with known input"""
        yyyymmdd = 20120228
        hhmmsshh = 0
        nhours = 24.

        idate1 = rmn.newdate(rmn.NEWDATE_PRINT2STAMP, yyyymmdd, hhmmsshh)
        idate2 = rmn.incdatr(idate1, nhours)
        (yyyymmdd2, hhmmsshh2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT, idate2)
        self.assertEqual(yyyymmdd2, 20120229)

        rmn.ignore_leapyear()
        idate2 = rmn.incdatr(idate1, nhours)
        (yyyymmdd2, hhmmsshh2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT, idate2)
        self.assertEqual(yyyymmdd2, 20120301)

        rmn.accept_leapyear()
        idate2 = rmn.incdatr(idate1, nhours)
        (yyyymmdd2, hhmmsshh2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT, idate2)
        self.assertEqual(yyyymmdd2, 20120229)

        rmn.newdate_options_set(rmn.NEWDATE_OPT_365DAYS)
        rmn.newdate_options_set(rmn.NEWDATE_OPT_360DAYS)
        idate2 = rmn.incdatr(idate1, nhours)
        (yyyymmdd2, hhmmsshh2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT, idate2)
        self.assertEqual(yyyymmdd2, 20120301)

        rmn.newdate_options_set(rmn.NEWDATE_OPT_GREGORIAN)
        idate2 = rmn.incdatr(idate1, nhours)
        (yyyymmdd2, hhmmsshh2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT, idate2)
        self.assertEqual(yyyymmdd2, 20120229)
Esempio n. 3
0
    def test_fst_edit_dir_dateo(self):
        """Changing dateo with fst_edit_dir should update datev accordingly"""

        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas, npas1)
        self.assertEqual(datev, datev1)
        self.assertEqual(dateo, dateo1)

        #Edit dateo in ref_file
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        dateo2 = rmn.incdatr(dateo, 1.)
        datev2 = rmn.incdatr(datev, 1.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, dateo=dateo2)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas, npas1)
        self.assertNotEqual(datev, datev1)
        self.assertEqual(datev2, datev1)
        self.assertNotEqual(dateo, dateo1)
        self.assertEqual(dateo2, dateo1)
Esempio n. 4
0
    def test_fst_edit_dir_npas_keepdateo(self):
        """Changing npas with keepdate in fst_edit_dir should update datev accordingly"""
        
        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)

        self.assertEqual(deet,deet1)
        self.assertEqual(npas,npas1)
        self.assertEqual(datev,datev1)
        self.assertEqual(dateo,dateo1)
        
        #Edit npas in ref_file
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        npas2 = npas+1
        dateo2 = dateo
        datev2 = rmn.incdatr(datev,deet/3600.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key  = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, npas=npas2,keep_dateo=True)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev,  dateo,  deet,  npas]  = self.read_dateo_npas(ref_file,vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file,vname)
        
        self.assertEqual(deet,deet1)
        self.assertEqual(npas2,npas1)
        self.assertNotEqual(datev,datev1)
        self.assertEqual(datev2,datev1)
        self.assertEqual(dateo,dateo1)
        self.assertEqual(dateo2,dateo1)
Esempio n. 5
0
 def testIncdateFromPrintKnownValues(self):
     """Incdatr should give known result with known input"""
     for yyyymmdd,hhmmsshh,nhours,hhmmsshh2 in self.knownValues:
         idate1 = rmn.newdate(rmn.NEWDATE_PRINT2STAMP,yyyymmdd,hhmmsshh)
         idate2 = rmn.incdatr(idate1,nhours)
         (iout1,iout2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT,idate2)
         self.assertEqual((iout1,iout2),(yyyymmdd,hhmmsshh2),repr((iout1,iout2))+' != '+repr((yyyymmdd,hhmmsshh2)))
Esempio n. 6
0
    def test_fst_edit_dir_npas_keepdateo(self):
        """Changing npas with keepdate in fst_edit_dir should update datev accordingly"""

        [ref_file, new_file] = self.copy_file()

        #Compare before
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas, npas1)
        self.assertEqual(datev, datev1)
        self.assertEqual(dateo, dateo1)

        #Edit npas in ref_file
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        npas2 = npas + 1
        dateo2 = dateo
        datev2 = rmn.incdatr(datev, deet / 3600.)

        fnew = rmn.fstopenall(new_file, rmn.FST_RW)
        key = rmn.fstinf(fnew, nomvar=vname)['key']
        rmn.fst_edit_dir(key, npas=npas2, keep_dateo=True)
        rmn.fstcloseall(fnew)

        #Compare after
        [datev, dateo, deet, npas] = self.read_dateo_npas(ref_file, vname)
        [datev1, dateo1, deet1, npas1] = self.read_dateo_npas(new_file, vname)

        self.assertEqual(deet, deet1)
        self.assertEqual(npas2, npas1)
        self.assertNotEqual(datev, datev1)
        self.assertEqual(datev2, datev1)
        self.assertEqual(dateo, dateo1)
        self.assertEqual(dateo2, dateo1)
Esempio n. 7
0
def incdatr(date1, nhours):
    """Increase CMC datetime stamp by a N hours (Interface to incdatr)
    date2 = Fstdc.incdatr(date1, nhours)
    @param date1 original CMC datetime stamp(int)
    @param nhours number of hours to increase the date (double)
    @return Increase CMC datetime stamp (int)
    @exception TypeError
    @exception Fstdc.error
    """
    return _rmn.incdatr(date1, nhours)
Esempio n. 8
0
def incdatr(date1, nhours):
    """Increase CMC datetime stamp by a N hours (Interface to incdatr)
    date2 = Fstdc.incdatr(date1, nhours)
    @param date1 original CMC datetime stamp(int)
    @param nhours number of hours to increase the date (double)
    @return Increase CMC datetime stamp (int)
    @exception TypeError
    @exception Fstdc.error
    """
    return _rmn.incdatr(date1, nhours)
Esempio n. 9
0
    def test_7(self):
        """
        Manipulating Dates

        Dates in FSTD files are encoded integers. Conversion to more human friendly formats
        and manipulation can be done using the RPNDate and RPNDateRange classes or with the newdate function.
        
        See also:
        rpnpy.rpndate.RPNDate
        rpnpy.rpndate.RPNDateRange
        rpnpy.librmn.base.newdate
        rpnpy.librmn.base.incdatr
        rpnpy.librmn.base.difdatr
        rpnpy.librmn.const
        """
        from rpnpy.rpndate import RPNDate, RPNDateRange

        d1 = RPNDate(20030423, 11453500)
        d2 = RPNDate(d1)
        d2 = d2.incr(48)
        dr = RPNDateRange(d1, d2, 6)
        print(str(dr.lenght()))
        # 48.0

        for d3 in dr:
            print(str(d3))
        # RPNDate(20030423,11453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=     0.0)
        # RPNDate(20030423,17453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=     6.0)
        # RPNDate(20030423,23453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    12.0)
        # RPNDate(20030424,05453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    18.0)
        # RPNDate(20030424,11453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    24.0)
        # RPNDate(20030424,17453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    30.0)
        # RPNDate(20030424,23453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    36.0)
        # RPNDate(20030425,05453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    42.0)
        # RPNDate(20030425,11453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    48.0)

        ## Lower level functions can also be used wherever more convenient.
        import rpnpy.librmn.all as rmn

        yyyymmdd = 20150102  #Jan 2nd, 2015
        hhmmsshh = 13141500  #13h 14min 15sec
        cmcdate = rmn.newdate(rmn.NEWDATE_PRINT2STAMP, yyyymmdd, hhmmsshh)

        nhours = 6.
        cmcdate2 = rmn.incdatr(cmcdate, nhours)

        (yyyymmdd2, hhmmsshh2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT, cmcdate2)
        print("%06d.%06d + %4.1fh = %06d.%06d" %
              (yyyymmdd, hhmmsshh, nhours, yyyymmdd2, hhmmsshh2))
        # 20150102.13141500 +  6.0h = 20150102.19141500

        nhours2 = rmn.difdatr(cmcdate2, cmcdate)
        print("%06d.%06d - %06d.%06d = %4.1fh" %
              (yyyymmdd2, hhmmsshh2, yyyymmdd, hhmmsshh, nhours2))
Esempio n. 10
0
    def test_7(self):
        """
        Manipulating Dates

        Dates in FSTD files are encoded integers. Conversion to more human friendly formats
        and manipulation can be done using the RPNDate and RPNDateRange classes or with the newdate function.
        
        See also:
        rpnpy.rpndate.RPNDate
        rpnpy.rpndate.RPNDateRange
        rpnpy.librmn.base.newdate
        rpnpy.librmn.base.incdatr
        rpnpy.librmn.base.difdatr
        rpnpy.librmn.const
        """
        from rpnpy.rpndate import RPNDate, RPNDateRange
 
        d1 = RPNDate(20030423, 11453500)
        d2 = RPNDate(d1)
        d2 = d2.incr(48)
        dr = RPNDateRange(d1, d2, 6)
        print(str(dr.lenght()))
        # 48.0
 
        for d3 in dr:
            print(str(d3))
        # RPNDate(20030423,11453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=     0.0)
        # RPNDate(20030423,17453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=     6.0)
        # RPNDate(20030423,23453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    12.0)
        # RPNDate(20030424,05453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    18.0)
        # RPNDate(20030424,11453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    24.0)
        # RPNDate(20030424,17453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    30.0)
        # RPNDate(20030424,23453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    36.0)
        # RPNDate(20030425,05453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    42.0)
        # RPNDate(20030425,11453500) ; RPNDate(20030423,11453500,dt=  3600.0,nstep=    48.0)

        ## Lower level functions can also be used wherever more convenient.
        import rpnpy.librmn.all as rmn
 
        yyyymmdd = 20150102 #Jan 2nd, 2015
        hhmmsshh = 13141500 #13h 14min 15sec
        cmcdate  = rmn.newdate(rmn.NEWDATE_PRINT2STAMP, yyyymmdd, hhmmsshh)
 
        nhours   = 6.
        cmcdate2 = rmn.incdatr(cmcdate, nhours)
 
        (yyyymmdd2, hhmmsshh2) = rmn.newdate(rmn.NEWDATE_STAMP2PRINT, cmcdate2)
        print("%06d.%06d + %4.1fh = %06d.%06d" % (yyyymmdd, hhmmsshh, nhours, yyyymmdd2, hhmmsshh2))
        # 20150102.13141500 +  6.0h = 20150102.19141500
 
        nhours2 = rmn.difdatr(cmcdate2, cmcdate)
        print("%06d.%06d - %06d.%06d = %4.1fh" % (yyyymmdd2, hhmmsshh2, yyyymmdd, hhmmsshh, nhours2))
Esempio n. 11
0
 def __update(self, force=0):
     "Update datev if needed"
     if self.__updated == 0 or force == 1:
         nhours = float(self.dt * self.nstep) / 3600.
         self.__datev = _rmn.incdatr(self.dateo, nhours)
         self.__updated = 1