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)
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)
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)
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)
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)))
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)
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)
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))
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