unit_tests.py 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628
  1. """!@package grass.temporal
  2. @brief GRASS Python scripting module (temporal GIS functions)
  3. Temporal GIS unit tests
  4. Usage:
  5. @code
  6. import grass.temporal as tgis
  7. tgis.test_increment_datetime_by_string()
  8. ...
  9. @endcode
  10. (C) 2008-2011 by the GRASS Development Team
  11. This program is free software under the GNU General Public
  12. License (>=v2). Read the file COPYING that comes with GRASS
  13. for details.
  14. @author Soeren Gebbert
  15. """
  16. import copy
  17. from datetime import datetime, date, time, timedelta
  18. import grass.script.core as core
  19. from temporal_granularity import *
  20. from datetime_math import *
  21. from space_time_datasets import *
  22. import grass.lib.vector as vector
  23. import grass.lib.gis as gis
  24. from ctypes import *
  25. # Uncomment this to detect the error
  26. #core.set_raise_on_error(True)
  27. ###############################################################################
  28. def test_increment_datetime_by_string():
  29. # First test
  30. print "# Test 1"
  31. dt = datetime(2001, 9, 1, 0, 0, 0)
  32. string = "60 seconds, 4 minutes, 12 hours, 10 days, 1 weeks, 5 months, 1 years"
  33. dt1 = datetime(2003,2,18,12,5,0)
  34. dt2 = increment_datetime_by_string(dt, string)
  35. print dt
  36. print dt2
  37. delta = dt1 -dt2
  38. if delta.days != 0 or delta.seconds != 0:
  39. core.fatal("increment computation is wrong %s" % (delta))
  40. # Second test
  41. print "# Test 2"
  42. dt = datetime(2001, 11, 1, 0, 0, 0)
  43. string = "1 months"
  44. dt1 = datetime(2001,12,1)
  45. dt2 = increment_datetime_by_string(dt, string)
  46. print dt
  47. print dt2
  48. delta = dt1 -dt2
  49. if delta.days != 0 or delta.seconds != 0:
  50. core.fatal("increment computation is wrong %s" % (delta))
  51. # Third test
  52. print "# Test 3"
  53. dt = datetime(2001, 11, 1, 0, 0, 0)
  54. string = "13 months"
  55. dt1 = datetime(2002,12,1)
  56. dt2 = increment_datetime_by_string(dt, string)
  57. print dt
  58. print dt2
  59. delta = dt1 -dt2
  60. if delta.days != 0 or delta.seconds != 0:
  61. core.fatal("increment computation is wrong %s" % (delta))
  62. # 4. test
  63. print "# Test 4"
  64. dt = datetime(2001, 1, 1, 0, 0, 0)
  65. string = "72 months"
  66. dt1 = datetime(2007,1,1)
  67. dt2 = increment_datetime_by_string(dt, string)
  68. print dt
  69. print dt2
  70. delta = dt1 -dt2
  71. if delta.days != 0 or delta.seconds != 0:
  72. core.fatal("increment computation is wrong %s" % (delta))
  73. ###############################################################################
  74. def test_adjust_datetime_to_granularity():
  75. # First test
  76. print "Test 1"
  77. dt = datetime(2001, 8, 8, 12,30,30)
  78. result = adjust_datetime_to_granularity(dt, "5 seconds")
  79. correct = datetime(2001, 8, 8, 12,30,30)
  80. delta = correct - result
  81. if delta.days != 0 or delta.seconds != 0:
  82. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  83. # Second test
  84. print "Test 2"
  85. result = adjust_datetime_to_granularity(dt, "20 minutes")
  86. correct = datetime(2001, 8, 8, 12,30,00)
  87. delta = correct - result
  88. if delta.days != 0 or delta.seconds != 0:
  89. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  90. # Third test
  91. print "Test 2"
  92. result = adjust_datetime_to_granularity(dt, "20 minutes")
  93. correct = datetime(2001, 8, 8, 12,30,00)
  94. delta = correct - result
  95. if delta.days != 0 or delta.seconds != 0:
  96. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  97. # 4. test
  98. print "Test 4"
  99. result = adjust_datetime_to_granularity(dt, "3 hours")
  100. correct = datetime(2001, 8, 8, 12,00,00)
  101. delta = correct - result
  102. if delta.days != 0 or delta.seconds != 0:
  103. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  104. # 5. test
  105. print "Test 5"
  106. result = adjust_datetime_to_granularity(dt, "5 days")
  107. correct = datetime(2001, 8, 8, 00,00,00)
  108. delta = correct - result
  109. if delta.days != 0 or delta.seconds != 0:
  110. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  111. # 6. test
  112. print "Test 6"
  113. result = adjust_datetime_to_granularity(dt, "2 weeks")
  114. correct = datetime(2001, 8, 6, 00,00,00)
  115. delta = correct - result
  116. if delta.days != 0 or delta.seconds != 0:
  117. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  118. # 7. test
  119. print "Test 7"
  120. result = adjust_datetime_to_granularity(dt, "6 months")
  121. correct = datetime(2001, 8, 1, 00,00,00)
  122. delta = correct - result
  123. if delta.days != 0 or delta.seconds != 0:
  124. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  125. # 8. test
  126. print "Test 8"
  127. result = adjust_datetime_to_granularity(dt, "2 years")
  128. correct = datetime(2001, 1, 1, 00,00,00)
  129. delta = correct - result
  130. if delta.days != 0 or delta.seconds != 0:
  131. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  132. # 9. test
  133. print "Test 9"
  134. result = adjust_datetime_to_granularity(dt, "2 years, 3 months, 5 days, 3 hours, 3 minutes, 2 seconds")
  135. correct = datetime(2001, 8, 8, 12,30,30)
  136. delta = correct - result
  137. if delta.days != 0 or delta.seconds != 0:
  138. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  139. # 10. test
  140. print "Test 10"
  141. result = adjust_datetime_to_granularity(dt, "3 months, 5 days, 3 minutes")
  142. correct = datetime(2001, 8, 8, 12,30,00)
  143. delta = correct - result
  144. if delta.days != 0 or delta.seconds != 0:
  145. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  146. # 11. test
  147. print "Test 11"
  148. result = adjust_datetime_to_granularity(dt, "3 weeks, 5 days")
  149. correct = datetime(2001, 8, 8, 00,00,00)
  150. delta = correct - result
  151. if delta.days != 0 or delta.seconds != 0:
  152. core.fatal("Granularity adjustment computation is wrong %s" % (delta))
  153. ###############################################################################
  154. def test_compute_datetime_delta():
  155. print "Test 1"
  156. start = datetime(2001, 1, 1, 00,00,00)
  157. end = datetime(2001, 1, 1, 00,00,00)
  158. comp = compute_datetime_delta(start, end)
  159. result = comp["second"]
  160. correct = 0
  161. delta = correct - result
  162. if delta != 0:
  163. core.fatal("Compute datetime delta is wrong %s" % (delta))
  164. print "Test 2"
  165. start = datetime(2001, 1, 1, 00,00,14)
  166. end = datetime(2001, 1, 1, 00,00,44)
  167. comp = compute_datetime_delta(start, end)
  168. result = comp["second"]
  169. correct = 30
  170. delta = correct - result
  171. if delta != 0:
  172. core.fatal("Compute datetime delta is wrong %s" % (delta))
  173. print "Test 3"
  174. start = datetime(2001, 1, 1, 00,00,44)
  175. end = datetime(2001, 1, 1, 00,01,14)
  176. comp = compute_datetime_delta(start, end)
  177. result = comp["second"]
  178. correct = 30
  179. delta = correct - result
  180. if delta != 0:
  181. core.fatal("Compute datetime delta is wrong %s" % (delta))
  182. print "Test 4"
  183. start = datetime(2001, 1, 1, 00,00,30)
  184. end = datetime(2001, 1, 1, 00,05,30)
  185. comp = compute_datetime_delta(start, end)
  186. result = comp["second"]
  187. correct = 300
  188. delta = correct - result
  189. if delta != 0:
  190. core.fatal("Compute datetime delta is wrong %s" % (delta))
  191. print "Test 5"
  192. start = datetime(2001, 1, 1, 00,00,00)
  193. end = datetime(2001, 1, 1, 00,01,00)
  194. comp = compute_datetime_delta(start, end)
  195. result = comp["minute"]
  196. correct = 1
  197. delta = correct - result
  198. if delta != 0:
  199. core.fatal("Compute datetime delta is wrong %s" % (delta))
  200. print "Test 6"
  201. start = datetime(2011,10,31, 00,45,00)
  202. end = datetime(2011,10,31, 01,45,00)
  203. comp = compute_datetime_delta(start, end)
  204. result = comp["minute"]
  205. correct = 60
  206. delta = correct - result
  207. if delta != 0:
  208. core.fatal("Compute datetime delta is wrong %s" % (delta))
  209. print "Test 7"
  210. start = datetime(2011,10,31, 00,45,00)
  211. end = datetime(2011,10,31, 01,15,00)
  212. comp = compute_datetime_delta(start, end)
  213. result = comp["minute"]
  214. correct = 30
  215. delta = correct - result
  216. if delta != 0:
  217. core.fatal("Compute datetime delta is wrong %s" % (delta))
  218. print "Test 8"
  219. start = datetime(2011,10,31, 00,45,00)
  220. end = datetime(2011,10,31, 12,15,00)
  221. comp = compute_datetime_delta(start, end)
  222. result = comp["minute"]
  223. correct = 690
  224. delta = correct - result
  225. if delta != 0:
  226. core.fatal("Compute datetime delta is wrong %s" % (delta))
  227. print "Test 9"
  228. start = datetime(2011,10,31, 00,00,00)
  229. end = datetime(2011,10,31, 01,00,00)
  230. comp = compute_datetime_delta(start, end)
  231. result = comp["hour"]
  232. correct = 1
  233. delta = correct - result
  234. if delta != 0:
  235. core.fatal("Compute datetime delta is wrong %s" % (delta))
  236. print "Test 10"
  237. start = datetime(2011,10,31, 00,00,00)
  238. end = datetime(2011,11,01, 01,00,00)
  239. comp = compute_datetime_delta(start, end)
  240. result = comp["hour"]
  241. correct = 25
  242. delta = correct - result
  243. if delta != 0:
  244. core.fatal("Compute datetime delta is wrong %s" % (delta))
  245. print "Test 11"
  246. start = datetime(2011,10,31, 12,00,00)
  247. end = datetime(2011,11,01, 06,00,00)
  248. comp = compute_datetime_delta(start, end)
  249. result = comp["hour"]
  250. correct = 18
  251. delta = correct - result
  252. if delta != 0:
  253. core.fatal("Compute datetime delta is wrong %s" % (delta))
  254. print "Test 12"
  255. start = datetime(2011,11,01, 00,00,00)
  256. end = datetime(2011,12,01, 01,00,00)
  257. comp = compute_datetime_delta(start, end)
  258. result = comp["hour"]
  259. correct = 30 * 24 + 1
  260. delta = correct - result
  261. if delta != 0:
  262. core.fatal("Compute datetime delta is wrong %s" % (delta))
  263. print "Test 13"
  264. start = datetime(2011,11,01, 00,00,00)
  265. end = datetime(2011,11,05, 00,00,00)
  266. comp = compute_datetime_delta(start, end)
  267. result = comp["day"]
  268. correct = 4
  269. delta = correct - result
  270. if delta != 0:
  271. core.fatal("Compute datetime delta is wrong %s" % (delta))
  272. print "Test 14"
  273. start = datetime(2011,10,06, 00,00,00)
  274. end = datetime(2011,11,05, 00,00,00)
  275. comp = compute_datetime_delta(start, end)
  276. result = comp["day"]
  277. correct = 30
  278. delta = correct - result
  279. if delta != 0:
  280. core.fatal("Compute datetime delta is wrong %s" % (delta))
  281. print "Test 15"
  282. start = datetime(2011,12,02, 00,00,00)
  283. end = datetime(2012,01,01, 00,00,00)
  284. comp = compute_datetime_delta(start, end)
  285. result = comp["day"]
  286. correct = 30
  287. delta = correct - result
  288. if delta != 0:
  289. core.fatal("Compute datetime delta is wrong %s" % (delta))
  290. print "Test 16"
  291. start = datetime(2011,01,01, 00,00,00)
  292. end = datetime(2011,02,01, 00,00,00)
  293. comp = compute_datetime_delta(start, end)
  294. result = comp["month"]
  295. correct = 1
  296. delta = correct - result
  297. if delta != 0:
  298. core.fatal("Compute datetime delta is wrong %s" % (delta))
  299. print "Test 17"
  300. start = datetime(2011,12,01, 00,00,00)
  301. end = datetime(2012,01,01, 00,00,00)
  302. comp = compute_datetime_delta(start, end)
  303. result = comp["month"]
  304. correct = 1
  305. delta = correct - result
  306. if delta != 0:
  307. core.fatal("Compute datetime delta is wrong %s" % (delta))
  308. print "Test 18"
  309. start = datetime(2011,12,01, 00,00,00)
  310. end = datetime(2012,06,01, 00,00,00)
  311. comp = compute_datetime_delta(start, end)
  312. result = comp["month"]
  313. correct = 6
  314. delta = correct - result
  315. if delta != 0:
  316. core.fatal("Compute datetime delta is wrong %s" % (delta))
  317. print "Test 19"
  318. start = datetime(2011,06,01, 00,00,00)
  319. end = datetime(2021,06,01, 00,00,00)
  320. comp = compute_datetime_delta(start, end)
  321. result = comp["year"]
  322. correct = 10
  323. delta = correct - result
  324. if delta != 0:
  325. core.fatal("Compute datetime delta is wrong %s" % (delta))
  326. print "Test 20"
  327. start = datetime(2011,06,01, 00,00,00)
  328. end = datetime(2012,06,01, 12,00,00)
  329. comp = compute_datetime_delta(start, end)
  330. result = comp["hour"]
  331. d = end - start
  332. correct = 12 + d.days * 24
  333. delta = correct - result
  334. if delta != 0:
  335. core.fatal("Compute datetime delta is wrong %s" % (delta))
  336. print "Test 21"
  337. start = datetime(2011,06,01, 00,00,00)
  338. end = datetime(2012,06,01, 12,30,00)
  339. comp = compute_datetime_delta(start, end)
  340. result = comp["minute"]
  341. d = end - start
  342. correct = d.days * 24 * 60 + 12 * 60 + 30
  343. delta = correct - result
  344. if delta != 0:
  345. core.fatal("Compute datetime delta is wrong %s" % (delta))
  346. print "Test 22"
  347. start = datetime(2011,06,01, 00,00,00)
  348. end = datetime(2012,06,01, 12,00,05)
  349. comp = compute_datetime_delta(start, end)
  350. result = comp["second"]
  351. d = end - start
  352. correct = 5 + 60 * 60 * 12 + d.days * 24 * 60 * 60
  353. delta = correct - result
  354. if delta != 0:
  355. core.fatal("Compute datetime delta is wrong %s" % (delta))
  356. print "Test 23"
  357. start = datetime(2011,06,01, 00,00,00)
  358. end = datetime(2012,06,01, 00,30,00)
  359. comp = compute_datetime_delta(start, end)
  360. result = comp["minute"]
  361. d = end - start
  362. correct = 30 + d.days * 24 * 60
  363. delta = correct - result
  364. if delta != 0:
  365. core.fatal("Compute datetime delta is wrong %s" % (delta))
  366. print "Test 24"
  367. start = datetime(2011,06,01, 00,00,00)
  368. end = datetime(2012,06,01, 00,00,05)
  369. comp = compute_datetime_delta(start, end)
  370. result = comp["second"]
  371. d = end - start
  372. correct = 5 + d.days * 24 * 60 * 60
  373. delta = correct - result
  374. if delta != 0:
  375. core.fatal("Compute datetime delta is wrong %s" % (delta))
  376. ###############################################################################
  377. def test_compute_relative_time_granularity():
  378. # First we test intervals
  379. print "Test 1"
  380. maps = []
  381. fact = 5
  382. start = 1
  383. end = start * fact
  384. for i in range(6):
  385. end = start * fact
  386. map = raster_dataset(None)
  387. map.set_relative_time(start, end, "years")
  388. maps.append(map)
  389. start = end
  390. fact = fact - 1
  391. gran = round(compute_relative_time_granularity(maps))
  392. if fact - gran != 0:
  393. core.fatal("Wrong granularity reference %i != gran %i" % (fact, gran))
  394. print "Test 2"
  395. maps = []
  396. fact = 3
  397. start = 1.0/86400
  398. end = start * fact
  399. for i in range(10):
  400. end = start * fact
  401. map = raster_dataset(None)
  402. map.set_relative_time(start, end, "years")
  403. maps.append(map)
  404. start = end
  405. fact = fact - 1
  406. gran = round(compute_relative_time_granularity(maps) * 86400)
  407. if fact - gran != 0:
  408. core.fatal("Wrong granularity reference %i != gran %i" % (fact, gran))
  409. print "Test 3 with gaps"
  410. maps = []
  411. fact = 3
  412. start = 1
  413. end = start + fact
  414. for i in range(10):
  415. shift = i*2*fact
  416. start = shift
  417. end = start + fact
  418. map = raster_dataset(None)
  419. map.set_relative_time(start, end)
  420. maps.append(map)
  421. gran = round(compute_relative_time_granularity(maps))
  422. if fact - gran != 0:
  423. core.fatal("Wrong granularity reference %i != gran %i" % (fact, gran))
  424. # Second we test intervals and points mixed
  425. print "Test 4 intervals and points"
  426. maps = []
  427. fact = 5
  428. start = 1
  429. end = start * fact
  430. count = 0
  431. for i in range(6):
  432. end = start * fact
  433. map = raster_dataset(None)
  434. if count % 2 == 0:
  435. map.set_relative_time(start, end)
  436. else:
  437. map.set_relative_time(start, None)
  438. maps.append(map)
  439. start = end
  440. count += 1
  441. fact = fact - 1
  442. gran = round(compute_relative_time_granularity(maps))
  443. if fact - gran != 0:
  444. core.fatal("Wrong granularity reference %i != gran %i" % (fact, gran))
  445. # Second we test points only
  446. print "Test 5 points only"
  447. maps = []
  448. fact = 3
  449. start = 1.0/86400
  450. for i in range(10):
  451. point = (i + 1)*fact*start
  452. map = raster_dataset(None)
  453. map.set_relative_time(point, None)
  454. maps.append(map)
  455. gran = round(compute_relative_time_granularity(maps) * 86400)
  456. if fact - gran != 0:
  457. core.fatal("Wrong granularity reference %i != gran %i" % (fact, gran))
  458. ###############################################################################
  459. def test_compute_absolute_time_granularity():
  460. # First we test intervals
  461. print "Test 1"
  462. maps = []
  463. a = datetime(2001, 1, 1)
  464. increment = "1 years"
  465. for i in range(10):
  466. start = increment_datetime_by_string(a, increment, i)
  467. end = increment_datetime_by_string(a, increment, i + 1)
  468. map = raster_dataset(None)
  469. map.set_absolute_time(start, end)
  470. maps.append(map)
  471. gran = compute_absolute_time_granularity(maps)
  472. if increment != gran:
  473. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  474. print "Test 2"
  475. maps = []
  476. a = datetime(2001, 1, 1)
  477. increment = "3 years"
  478. for i in range(10):
  479. start = increment_datetime_by_string(a, increment, i)
  480. end = increment_datetime_by_string(a, increment, i + 1)
  481. map = raster_dataset(None)
  482. map.set_absolute_time(start, end)
  483. maps.append(map)
  484. gran = compute_absolute_time_granularity(maps)
  485. if increment != gran:
  486. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  487. print "Test 3"
  488. maps = []
  489. a = datetime(2001, 5, 1)
  490. increment = "1 months"
  491. for i in range(20):
  492. start = increment_datetime_by_string(a, increment, i)
  493. end = increment_datetime_by_string(a, increment, i + 1)
  494. map = raster_dataset(None)
  495. map.set_absolute_time(start, end)
  496. maps.append(map)
  497. gran = compute_absolute_time_granularity(maps)
  498. if increment != gran:
  499. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  500. print "Test 4"
  501. maps = []
  502. a = datetime(2001, 1, 1)
  503. increment = "3 months"
  504. for i in range(20):
  505. start = increment_datetime_by_string(a, increment, i)
  506. end = increment_datetime_by_string(a, increment, i + 1)
  507. map = raster_dataset(None)
  508. map.set_absolute_time(start, end)
  509. maps.append(map)
  510. gran = compute_absolute_time_granularity(maps)
  511. if increment != gran:
  512. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  513. print "Test 3"
  514. maps = []
  515. a = datetime(2001, 1, 1)
  516. increment = "1 days"
  517. for i in range(6):
  518. start = increment_datetime_by_string(a, increment, i)
  519. end = increment_datetime_by_string(a, increment, i + 1)
  520. map = raster_dataset(None)
  521. map.set_absolute_time(start, end)
  522. maps.append(map)
  523. gran = compute_absolute_time_granularity(maps)
  524. if increment != gran:
  525. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  526. print "Test 4"
  527. maps = []
  528. a = datetime(2001, 1, 14)
  529. increment = "14 days"
  530. for i in range(6):
  531. start = increment_datetime_by_string(a, increment, i)
  532. end = increment_datetime_by_string(a, increment, i + 1)
  533. map = raster_dataset(None)
  534. map.set_absolute_time(start, end)
  535. maps.append(map)
  536. gran = compute_absolute_time_granularity(maps)
  537. if increment != gran:
  538. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  539. print "Test 5"
  540. maps = []
  541. a = datetime(2001, 3, 1)
  542. increment = "1 months, 4 days"
  543. for i in range(20):
  544. start = increment_datetime_by_string(a, increment, i)
  545. end = increment_datetime_by_string(a, increment, i + 1)
  546. map = raster_dataset(None)
  547. map.set_absolute_time(start, end)
  548. maps.append(map)
  549. increment = "1 days"
  550. gran = compute_absolute_time_granularity(maps)
  551. if increment != gran:
  552. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  553. print "Test 6"
  554. maps = []
  555. a = datetime(2001, 2, 11)
  556. increment = "1 days, 1 hours"
  557. for i in range(20):
  558. start = increment_datetime_by_string(a, increment, i)
  559. end = increment_datetime_by_string(a, increment, i + 1)
  560. map = raster_dataset(None)
  561. map.set_absolute_time(start, end)
  562. maps.append(map)
  563. increment = "25 hours"
  564. gran = compute_absolute_time_granularity(maps)
  565. if increment != gran:
  566. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  567. print "Test 7"
  568. maps = []
  569. a = datetime(2001, 6, 12)
  570. increment = "6 hours"
  571. for i in range(20):
  572. start = increment_datetime_by_string(a, increment, i)
  573. end = increment_datetime_by_string(a, increment, i + 1)
  574. map = raster_dataset(None)
  575. map.set_absolute_time(start, end)
  576. maps.append(map)
  577. gran = compute_absolute_time_granularity(maps)
  578. if increment != gran:
  579. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  580. print "Test 8"
  581. maps = []
  582. a = datetime(2001, 1, 1)
  583. increment = "20 minutes"
  584. for i in range(20):
  585. start = increment_datetime_by_string(a, increment, i)
  586. end = increment_datetime_by_string(a, increment, i + 1)
  587. map = raster_dataset(None)
  588. map.set_absolute_time(start, end)
  589. maps.append(map)
  590. gran = compute_absolute_time_granularity(maps)
  591. if increment != gran:
  592. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  593. print "Test 9"
  594. maps = []
  595. a = datetime(2001, 1, 1)
  596. increment = "5 hours, 25 minutes"
  597. for i in range(20):
  598. start = increment_datetime_by_string(a, increment, i)
  599. end = increment_datetime_by_string(a, increment, i + 1)
  600. map = raster_dataset(None)
  601. map.set_absolute_time(start, end)
  602. maps.append(map)
  603. increment = "325 minutes"
  604. gran = compute_absolute_time_granularity(maps)
  605. if increment != gran:
  606. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  607. print "Test 10"
  608. maps = []
  609. a = datetime(2001, 1, 1)
  610. increment = "5 minutes, 30 seconds"
  611. for i in range(20):
  612. start = increment_datetime_by_string(a, increment, i)
  613. end = increment_datetime_by_string(a, increment, i + 1)
  614. map = raster_dataset(None)
  615. map.set_absolute_time(start, end)
  616. maps.append(map)
  617. increment = "330 seconds"
  618. gran = compute_absolute_time_granularity(maps)
  619. if increment != gran:
  620. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  621. print "Test 11"
  622. maps = []
  623. a = datetime(2001,12,31)
  624. increment = "60 minutes, 30 seconds"
  625. for i in range(24):
  626. start = increment_datetime_by_string(a, increment, i)
  627. end = increment_datetime_by_string(a, increment, i + 1)
  628. map = raster_dataset(None)
  629. map.set_absolute_time(start, end)
  630. maps.append(map)
  631. increment = "3630 seconds"
  632. gran = compute_absolute_time_granularity(maps)
  633. if increment != gran:
  634. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  635. print "Test 12"
  636. maps = []
  637. a = datetime(2001,12,31, 12, 30, 30)
  638. increment = "3600 seconds"
  639. for i in range(24):
  640. start = increment_datetime_by_string(a, increment, i)
  641. end = increment_datetime_by_string(a, increment, i + 1)
  642. map = raster_dataset(None)
  643. map.set_absolute_time(start, end)
  644. maps.append(map)
  645. gran = compute_absolute_time_granularity(maps)
  646. if increment != gran:
  647. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  648. # Test absolute time points
  649. print "Test 13"
  650. maps = []
  651. a = datetime(2001,12,31, 12, 30, 30)
  652. increment = "3600 seconds"
  653. for i in range(24):
  654. start = increment_datetime_by_string(a, increment, i)
  655. end = None
  656. map = raster_dataset(None)
  657. map.set_absolute_time(start, end)
  658. maps.append(map)
  659. gran = compute_absolute_time_granularity(maps)
  660. if increment != gran:
  661. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  662. print "Test 14"
  663. maps = []
  664. a = datetime(2001,12,31, 00, 00, 00)
  665. increment = "20 days"
  666. for i in range(24):
  667. start = increment_datetime_by_string(a, increment, i)
  668. end = None
  669. map = raster_dataset(None)
  670. map.set_absolute_time(start, end)
  671. maps.append(map)
  672. gran = compute_absolute_time_granularity(maps)
  673. if increment != gran:
  674. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  675. print "Test 15"
  676. maps = []
  677. a = datetime(2001,12,01, 00, 00, 00)
  678. increment = "5 months"
  679. for i in range(24):
  680. start = increment_datetime_by_string(a, increment, i)
  681. end = None
  682. map = raster_dataset(None)
  683. map.set_absolute_time(start, end)
  684. maps.append(map)
  685. gran = compute_absolute_time_granularity(maps)
  686. if increment != gran:
  687. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  688. # Test absolute time interval and points
  689. print "Test 16"
  690. maps = []
  691. a = datetime(2001,12,31, 12, 30, 30)
  692. increment = "3600 seconds"
  693. for i in range(24):
  694. start = increment_datetime_by_string(a, increment, i)
  695. end = increment_datetime_by_string(a, increment, i + 1)
  696. map = raster_dataset(None)
  697. map.set_absolute_time(start, end)
  698. maps.append(map)
  699. a = datetime(2002,02,01, 12, 30, 30)
  700. for i in range(24):
  701. start = increment_datetime_by_string(a, increment, i)
  702. end = None
  703. map = raster_dataset(None)
  704. map.set_absolute_time(start, end)
  705. maps.append(map)
  706. gran = compute_absolute_time_granularity(maps)
  707. if increment != gran:
  708. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  709. print "Test 17"
  710. maps = []
  711. a = datetime(2001,1,1)
  712. increment = "2 days"
  713. for i in range(8):
  714. start = increment_datetime_by_string(a, increment, i)
  715. end = increment_datetime_by_string(a, increment, i + 1)
  716. map = raster_dataset(None)
  717. map.set_absolute_time(start, end)
  718. maps.append(map)
  719. a = datetime(2001,02,02)
  720. for i in range(8):
  721. start = increment_datetime_by_string(a, increment, i)
  722. end = None
  723. map = raster_dataset(None)
  724. map.set_absolute_time(start, end)
  725. maps.append(map)
  726. gran = compute_absolute_time_granularity(maps)
  727. if increment != gran:
  728. core.fatal("Wrong granularity reference %s != gran %s" % (increment, gran))
  729. ###############################################################################
  730. def test_spatial_extent_intersection():
  731. # Generate the extents
  732. A = spatial_extent(north=80, south=20, east=60, west=10, bottom=-50, top=50)
  733. A.print_info()
  734. B = spatial_extent(north=80, south=20, east=60, west=10, bottom=-50, top=50)
  735. B.print_info()
  736. C = A.intersect(B)
  737. C.print_info()
  738. if C.get_north() != B.get_north() or C.get_south() != B.get_south() or \
  739. C.get_west() != B.get_west() or C.get_east() != B.get_east() or \
  740. C.get_bottom() != B.get_bottom() or C.get_top() != B.get_top():
  741. core.fatal("Wrong intersection computation")
  742. B = spatial_extent(north=40, south=30, east=60, west=10, bottom=-50, top=50)
  743. B.print_info()
  744. C = A.intersect(B)
  745. C.print_info()
  746. if C.get_north() != B.get_north() or C.get_south() != B.get_south() or \
  747. C.get_west() != B.get_west() or C.get_east() != B.get_east() or \
  748. C.get_bottom() != B.get_bottom() or C.get_top() != B.get_top():
  749. core.fatal("Wrong intersection computation")
  750. B = spatial_extent(north=40, south=30, east=60, west=30, bottom=-50, top=50)
  751. B.print_info()
  752. C = A.intersect(B)
  753. C.print_info()
  754. if C.get_north() != B.get_north() or C.get_south() != B.get_south() or \
  755. C.get_west() != B.get_west() or C.get_east() != B.get_east() or \
  756. C.get_bottom() != B.get_bottom() or C.get_top() != B.get_top():
  757. core.fatal("Wrong intersection computation")
  758. B = spatial_extent(north=40, south=30, east=60, west=30, bottom=-30, top=50)
  759. B.print_info()
  760. C = A.intersect(B)
  761. C.print_info()
  762. if C.get_north() != B.get_north() or C.get_south() != B.get_south() or \
  763. C.get_west() != B.get_west() or C.get_east() != B.get_east() or \
  764. C.get_bottom() != B.get_bottom() or C.get_top() != B.get_top():
  765. core.fatal("Wrong intersection computation")
  766. B = spatial_extent(north=40, south=30, east=60, west=30, bottom=-30, top=30)
  767. B.print_info()
  768. C = A.intersect(B)
  769. C.print_info()
  770. if C.get_north() != B.get_north() or C.get_south() != B.get_south() or \
  771. C.get_west() != B.get_west() or C.get_east() != B.get_east() or \
  772. C.get_bottom() != B.get_bottom() or C.get_top() != B.get_top():
  773. core.fatal("Wrong intersection computation")
  774. ###############################################################################
  775. def test_spatial_relations():
  776. # Generate the extents
  777. A = spatial_extent(north=80, south=20, east=60, west=10, bottom=-50, top=50)
  778. A.print_info()
  779. B = spatial_extent(north=80, south=20, east=60, west=10, bottom=-50, top=50)
  780. B.print_info()
  781. relation = A.spatial_relation(B)
  782. print relation
  783. if relation!= "equivalent":
  784. core.fatal("Wrong spatial relation: %s"%(relation))
  785. B = spatial_extent(north=70, south=20, east=60, west=10, bottom=-50, top=50)
  786. B.print_info()
  787. relation = A.spatial_relation_2d(B)
  788. print relation
  789. if relation!= "cover":
  790. core.fatal("Wrong spatial relation: %s"%(relation))
  791. relation = A.spatial_relation(B)
  792. print relation
  793. if relation!= "cover":
  794. core.fatal("Wrong spatial relation: %s"%(relation))
  795. B = spatial_extent(north=70, south=30, east=60, west=10, bottom=-50, top=50)
  796. B.print_info()
  797. relation = A.spatial_relation_2d(B)
  798. print relation
  799. if relation!= "cover":
  800. core.fatal("Wrong spatial relation: %s"%(relation))
  801. relation = A.spatial_relation(B)
  802. print relation
  803. if relation!= "cover":
  804. core.fatal("Wrong spatial relation: %s"%(relation))
  805. relation = B.spatial_relation_2d(A)
  806. print relation
  807. if relation!= "covered":
  808. core.fatal("Wrong spatial relation: %s"%(relation))
  809. relation = B.spatial_relation(A)
  810. print relation
  811. if relation!= "covered":
  812. core.fatal("Wrong spatial relation: %s"%(relation))
  813. B = spatial_extent(north=70, south=30, east=50, west=10, bottom=-50, top=50)
  814. B.print_info()
  815. relation = A.spatial_relation_2d(B)
  816. print relation
  817. if relation!= "cover":
  818. core.fatal("Wrong spatial relation: %s"%(relation))
  819. relation = B.spatial_relation_2d(A)
  820. print relation
  821. if relation!= "covered":
  822. core.fatal("Wrong spatial relation: %s"%(relation))
  823. relation = A.spatial_relation(B)
  824. print relation
  825. if relation!= "cover":
  826. core.fatal("Wrong spatial relation: %s"%(relation))
  827. B = spatial_extent(north=70, south=30, east=50, west=20, bottom=-50, top=50)
  828. relation = B.spatial_relation(A)
  829. print relation
  830. if relation!= "covered":
  831. core.fatal("Wrong spatial relation: %s"%(relation))
  832. B = spatial_extent(north=70, south=30, east=50, west=20, bottom=-50, top=50)
  833. B.print_info()
  834. relation = A.spatial_relation_2d(B)
  835. print relation
  836. if relation!= "contain":
  837. core.fatal("Wrong spatial relation: %s"%(relation))
  838. relation = A.spatial_relation(B)
  839. print relation
  840. if relation!= "cover":
  841. core.fatal("Wrong spatial relation: %s"%(relation))
  842. B = spatial_extent(north=70, south=30, east=50, west=20, bottom=-40, top=50)
  843. B.print_info()
  844. relation = A.spatial_relation(B)
  845. print relation
  846. if relation!= "cover":
  847. core.fatal("Wrong spatial relation: %s"%(relation))
  848. B = spatial_extent(north=70, south=30, east=50, west=20, bottom=-40, top=40)
  849. B.print_info()
  850. relation = A.spatial_relation(B)
  851. print relation
  852. if relation!= "contain":
  853. core.fatal("Wrong spatial relation: %s"%(relation))
  854. relation = B.spatial_relation(A)
  855. print relation
  856. if relation!= "in":
  857. core.fatal("Wrong spatial relation: %s"%(relation))
  858. B = spatial_extent(north=90, south=30, east=50, west=20, bottom=-40, top=40)
  859. B.print_info()
  860. relation = A.spatial_relation_2d(B)
  861. print relation
  862. if relation!= "overlap":
  863. core.fatal("Wrong spatial relation: %s"%(relation))
  864. relation = A.spatial_relation(B)
  865. print relation
  866. if relation!= "overlap":
  867. core.fatal("Wrong spatial relation: %s"%(relation))
  868. B = spatial_extent(north=90, south=5, east=70, west=5, bottom=-40, top=40)
  869. A.print_info()
  870. B.print_info()
  871. relation = A.spatial_relation_2d(B)
  872. print relation
  873. if relation!= "in":
  874. core.fatal("Wrong spatial relation: %s"%(relation))
  875. relation = A.spatial_relation(B)
  876. print relation
  877. if relation!= "overlap":
  878. core.fatal("Wrong spatial relation: %s"%(relation))
  879. B = spatial_extent(north=90, south=5, east=70, west=5, bottom=-40, top=60)
  880. A.print_info()
  881. B.print_info()
  882. relation = A.spatial_relation(B)
  883. print relation
  884. if relation!= "overlap":
  885. core.fatal("Wrong spatial relation: %s"%(relation))
  886. B = spatial_extent(north=90, south=5, east=70, west=5, bottom=-60, top=60)
  887. A.print_info()
  888. B.print_info()
  889. relation = A.spatial_relation(B)
  890. print relation
  891. if relation!= "in":
  892. core.fatal("Wrong spatial relation: %s"%(relation))
  893. A = spatial_extent(north=80, south=60, east=60, west=10, bottom=-50, top=50)
  894. A.print_info()
  895. B = spatial_extent(north=60, south=20, east=60, west=10, bottom=-50, top=50)
  896. B.print_info()
  897. relation = A.spatial_relation_2d(B)
  898. print relation
  899. if relation!= "meet":
  900. core.fatal("Wrong spatial relation: %s"%(relation))
  901. relation = A.spatial_relation(B)
  902. print relation
  903. if relation!= "meet":
  904. core.fatal("Wrong spatial relation: %s"%(relation))
  905. A = spatial_extent(north=60, south=40, east=60, west=10, bottom=-50, top=50)
  906. A.print_info()
  907. B = spatial_extent(north=80, south=60, east=60, west=10, bottom=-50, top=50)
  908. B.print_info()
  909. relation = A.spatial_relation_2d(B)
  910. print relation
  911. if relation!= "meet":
  912. core.fatal("Wrong spatial relation: %s"%(relation))
  913. relation = A.spatial_relation(B)
  914. print relation
  915. if relation!= "meet":
  916. core.fatal("Wrong spatial relation: %s"%(relation))
  917. A = spatial_extent(north=80, south=40, east=60, west=40, bottom=-50, top=50)
  918. A.print_info()
  919. B = spatial_extent(north=80, south=40, east=40, west=20, bottom=-50, top=50)
  920. B.print_info()
  921. relation = A.spatial_relation_2d(B)
  922. print relation
  923. if relation!= "meet":
  924. core.fatal("Wrong spatial relation: %s"%(relation))
  925. relation = A.spatial_relation(B)
  926. print relation
  927. if relation!= "meet":
  928. core.fatal("Wrong spatial relation: %s"%(relation))
  929. A = spatial_extent(north=80, south=40, east=40, west=20, bottom=-50, top=50)
  930. A.print_info()
  931. B = spatial_extent(north=90, south=30, east=60, west=40, bottom=-50, top=50)
  932. B.print_info()
  933. relation = A.spatial_relation_2d(B)
  934. print relation
  935. if relation!= "meet":
  936. core.fatal("Wrong spatial relation: %s"%(relation))
  937. relation = A.spatial_relation(B)
  938. print relation
  939. if relation!= "meet":
  940. core.fatal("Wrong spatial relation: %s"%(relation))
  941. A = spatial_extent(north=80, south=40, east=40, west=20, bottom=-50, top=50)
  942. A.print_info()
  943. B = spatial_extent(north=70, south=50, east=60, west=40, bottom=-50, top=50)
  944. B.print_info()
  945. relation = A.spatial_relation_2d(B)
  946. print relation
  947. if relation!= "meet":
  948. core.fatal("Wrong spatial relation: %s"%(relation))
  949. relation = A.spatial_relation(B)
  950. print relation
  951. if relation!= "meet":
  952. core.fatal("Wrong spatial relation: %s"%(relation))
  953. A = spatial_extent(north=80, south=40, east=40, west=20, bottom=-50, top=50)
  954. A.print_info()
  955. B = spatial_extent(north=60, south=20, east=60, west=40, bottom=-50, top=50)
  956. B.print_info()
  957. relation = A.spatial_relation_2d(B)
  958. print relation
  959. if relation!= "meet":
  960. core.fatal("Wrong spatial relation: %s"%(relation))
  961. relation = A.spatial_relation(B)
  962. print relation
  963. if relation!= "meet":
  964. core.fatal("Wrong spatial relation: %s"%(relation))
  965. A = spatial_extent(north=80, south=40, east=40, west=20, bottom=-50, top=50)
  966. A.print_info()
  967. B = spatial_extent(north=40, south=20, east=60, west=40, bottom=-50, top=50)
  968. B.print_info()
  969. relation = A.spatial_relation_2d(B)
  970. print relation
  971. if relation!= "disjoint":
  972. core.fatal("Wrong spatial relation: %s"%(relation))
  973. relation = A.spatial_relation(B)
  974. print relation
  975. if relation!= "disjoint":
  976. core.fatal("Wrong spatial relation: %s"%(relation))
  977. A = spatial_extent(north=80, south=40, east=40, west=20, bottom=-50, top=50)
  978. A.print_info()
  979. B = spatial_extent(north=60, south=20, east=60, west=40, bottom=-60, top=60)
  980. B.print_info()
  981. relation = A.spatial_relation(B)
  982. print relation
  983. if relation!= "meet":
  984. core.fatal("Wrong spatial relation: %s"%(relation))
  985. A = spatial_extent(north=80, south=40, east=40, west=20, bottom=-50, top=50)
  986. A.print_info()
  987. B = spatial_extent(north=90, south=30, east=60, west=40, bottom=-40, top=40)
  988. B.print_info()
  989. relation = A.spatial_relation(B)
  990. print relation
  991. if relation!= "meet":
  992. core.fatal("Wrong spatial relation: %s"%(relation))
  993. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=0, top=50)
  994. A.print_info()
  995. B = spatial_extent(north=80, south=40, east=60, west=20, bottom=-50, top=0)
  996. B.print_info()
  997. relation = A.spatial_relation(B)
  998. print relation
  999. if relation!= "meet":
  1000. core.fatal("Wrong spatial relation: %s"%(relation))
  1001. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=0, top=50)
  1002. A.print_info()
  1003. B = spatial_extent(north=80, south=50, east=60, west=30, bottom=-50, top=0)
  1004. B.print_info()
  1005. relation = A.spatial_relation(B)
  1006. print relation
  1007. if relation!= "meet":
  1008. core.fatal("Wrong spatial relation: %s"%(relation))
  1009. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=0, top=50)
  1010. A.print_info()
  1011. B = spatial_extent(north=70, south=50, east=50, west=30, bottom=-50, top=0)
  1012. B.print_info()
  1013. relation = A.spatial_relation(B)
  1014. print relation
  1015. if relation!= "meet":
  1016. core.fatal("Wrong spatial relation: %s"%(relation))
  1017. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=0, top=50)
  1018. A.print_info()
  1019. B = spatial_extent(north=90, south=30, east=70, west=10, bottom=-50, top=0)
  1020. B.print_info()
  1021. relation = A.spatial_relation(B)
  1022. print relation
  1023. if relation!= "meet":
  1024. core.fatal("Wrong spatial relation: %s"%(relation))
  1025. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=0, top=50)
  1026. A.print_info()
  1027. B = spatial_extent(north=70, south=30, east=50, west=10, bottom=-50, top=0)
  1028. B.print_info()
  1029. relation = A.spatial_relation(B)
  1030. print relation
  1031. if relation!= "meet":
  1032. core.fatal("Wrong spatial relation: %s"%(relation))
  1033. ###
  1034. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=-50, top=0)
  1035. A.print_info()
  1036. B = spatial_extent(north=80, south=40, east=60, west=20, bottom=0, top=50)
  1037. B.print_info()
  1038. relation = A.spatial_relation(B)
  1039. print relation
  1040. if relation!= "meet":
  1041. core.fatal("Wrong spatial relation: %s"%(relation))
  1042. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=-50, top=0)
  1043. A.print_info()
  1044. B = spatial_extent(north=80, south=50, east=60, west=30, bottom=0, top=50)
  1045. B.print_info()
  1046. relation = A.spatial_relation(B)
  1047. print relation
  1048. if relation!= "meet":
  1049. core.fatal("Wrong spatial relation: %s"%(relation))
  1050. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=-50, top=0)
  1051. A.print_info()
  1052. B = spatial_extent(north=70, south=50, east=50, west=30, bottom=0, top=50)
  1053. B.print_info()
  1054. relation = A.spatial_relation(B)
  1055. print relation
  1056. if relation!= "meet":
  1057. core.fatal("Wrong spatial relation: %s"%(relation))
  1058. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=-50, top=0)
  1059. A.print_info()
  1060. B = spatial_extent(north=90, south=30, east=70, west=10, bottom=0, top=50)
  1061. B.print_info()
  1062. relation = A.spatial_relation(B)
  1063. print relation
  1064. if relation!= "meet":
  1065. core.fatal("Wrong spatial relation: %s"%(relation))
  1066. A = spatial_extent(north=80, south=40, east=60, west=20, bottom=-50, top=0)
  1067. A.print_info()
  1068. B = spatial_extent(north=70, south=30, east=50, west=10, bottom=0, top=50)
  1069. B.print_info()
  1070. relation = A.spatial_relation(B)
  1071. print relation
  1072. if relation!= "meet":
  1073. core.fatal("Wrong spatial relation: %s"%(relation))
  1074. ###############################################################################
  1075. def test_temporal_topology_builder():
  1076. map_listA = []
  1077. _map = raster_dataset(ident = "1@a")
  1078. _map.set_absolute_time(datetime(2001, 01, 01), datetime(2001, 02, 01))
  1079. map_listA.append(copy.copy(_map))
  1080. _map = raster_dataset(ident = "2@a")
  1081. _map.set_absolute_time(datetime(2001, 02, 01), datetime(2001, 03, 01))
  1082. map_listA.append(copy.copy(_map))
  1083. _map = raster_dataset(ident = "3@a")
  1084. _map.set_absolute_time(datetime(2001, 03, 01), datetime(2001, 04, 01))
  1085. map_listA.append(copy.copy(_map))
  1086. _map = raster_dataset(ident = "4@a")
  1087. _map.set_absolute_time(datetime(2001, 04, 01), datetime(2001, 05, 01))
  1088. map_listA.append(copy.copy(_map))
  1089. _map = raster_dataset(ident = "5@a")
  1090. _map.set_absolute_time(datetime(2001, 05, 01), datetime(2001, 06, 01))
  1091. map_listA.append(copy.copy(_map))
  1092. tb = temporal_topology_builder()
  1093. tb.build(map_listA)
  1094. count = 0
  1095. for _map in tb:
  1096. print "[%s]"%(_map.get_name())
  1097. _map.print_temporal_topology_info()
  1098. if _map.get_id() != map_listA[count].get_id():
  1099. core.fatal("Error building temporal topology <%s> != <%s>"%( _map.get_id(), map_listA[count].get_id()))
  1100. count += 1
  1101. map_listB = []
  1102. _map = raster_dataset(ident = "1@b")
  1103. _map.set_absolute_time(datetime(2001, 01, 14), datetime(2001, 03, 14))
  1104. map_listB.append(copy.copy(_map))
  1105. _map = raster_dataset(ident = "2@b")
  1106. _map.set_absolute_time(datetime(2001, 02, 01), datetime(2001, 04, 01))
  1107. map_listB.append(copy.copy(_map))
  1108. _map = raster_dataset(ident = "3@b")
  1109. _map.set_absolute_time(datetime(2001, 02, 14), datetime(2001, 04, 30))
  1110. map_listB.append(copy.copy(_map))
  1111. _map = raster_dataset(ident = "4@b")
  1112. _map.set_absolute_time(datetime(2001, 04, 02), datetime(2001, 04, 30))
  1113. map_listB.append(copy.copy(_map))
  1114. _map = raster_dataset(ident = "5@b")
  1115. _map.set_absolute_time(datetime(2001, 05, 01), datetime(2001, 05, 14))
  1116. map_listB.append(copy.copy(_map))
  1117. tb = temporal_topology_builder()
  1118. tb.build(map_listB)
  1119. # Probing some relations
  1120. if map_listB[0].get_overlapped()[0] != map_listB[1]:
  1121. core.fatal("Error building temporal topology")
  1122. if map_listB[0].get_overlapped()[1] != map_listB[2]:
  1123. core.fatal("Error building temporal topology")
  1124. if map_listB[2].get_contains()[0] != map_listB[3]:
  1125. core.fatal("Error building temporal topology")
  1126. if map_listB[3].get_during()[0] != map_listB[2]:
  1127. core.fatal("Error building temporal topology")
  1128. count = 0
  1129. for _map in tb:
  1130. print "[%s]"%(_map.get_map_id
  1131. ())
  1132. _map.print_temporal_topology_shell_info()
  1133. if _map.get_id() != map_listB[count].get_id():
  1134. core.fatal("Error building temporal topology <%s> != <%s>"%( _map.get_id(), map_listB[count].get_id()))
  1135. count += 1
  1136. tb = temporal_topology_builder()
  1137. tb.build2(map_listA, map_listB)
  1138. count = 0
  1139. for _map in tb:
  1140. print "[%s]"%(_map.get_map_id())
  1141. _map.print_temporal_topology_shell_info()
  1142. if _map.get_id() != map_listA[count].get_id():
  1143. core.fatal("Error building temporal topology <%s> != <%s>"%( _map.get_id(), map_listA[count].get_id()))
  1144. count += 1
  1145. count = 0
  1146. for _map in map_listB:
  1147. print "[%s]"%(_map.get_map_id())
  1148. _map.print_temporal_topology_shell_info()
  1149. # Probing some relations
  1150. if map_listA[3].get_follows()[0] != map_listB[1]:
  1151. core.fatal("Error building temporal topology")
  1152. if map_listA[3].get_precedes()[0] != map_listB[4]:
  1153. core.fatal("Error building temporal topology")
  1154. if map_listA[3].get_overlaps()[0] != map_listB[2]:
  1155. core.fatal("Error building temporal topology")
  1156. if map_listA[3].get_contains()[0] != map_listB[3]:
  1157. core.fatal("Error building temporal topology")
  1158. if map_listA[2].get_during()[0] != map_listB[1]:
  1159. core.fatal("Error building temporal topology")
  1160. if map_listA[2].get_during()[1] != map_listB[2]:
  1161. core.fatal("Error building temporal topology")
  1162. ###############################################################################
  1163. def test_map_list_sorting():
  1164. map_list = []
  1165. _map = raster_dataset(ident = "1@a")
  1166. _map.set_absolute_time(datetime(2001, 02, 01), datetime(2001, 03, 01))
  1167. map_list.append(copy.copy(_map))
  1168. _map = raster_dataset(ident = "2@a")
  1169. _map.set_absolute_time(datetime(2001, 01, 01), datetime(2001, 02, 01))
  1170. map_list.append(copy.copy(_map))
  1171. _map = raster_dataset(ident = "3@a")
  1172. _map.set_absolute_time(datetime(2001, 03, 01), datetime(2001, 04, 01))
  1173. map_list.append(copy.copy(_map))
  1174. print "Original"
  1175. for _map in map_list:
  1176. print _map.get_valid_time()[0], _map.get_valid_time()[1]
  1177. print "Sorted by start time"
  1178. new_list = sorted(map_list, key=abstract_dataset_comparison_key_start_time)
  1179. for _map in new_list:
  1180. print _map.get_valid_time()[0], _map.get_valid_time()[1]
  1181. if new_list[0] != map_list[1]:
  1182. core.fatal("Sorting by start time failed")
  1183. if new_list[1] != map_list[0]:
  1184. core.fatal("Sorting by start time failed")
  1185. if new_list[2] != map_list[2]:
  1186. core.fatal("Sorting by start time failed")
  1187. print "Sorted by end time"
  1188. new_list = sorted(map_list, key=abstract_dataset_comparison_key_end_time)
  1189. for _map in new_list:
  1190. print _map.get_valid_time()[0], _map.get_valid_time()[1]
  1191. if new_list[0] != map_list[1]:
  1192. core.fatal("Sorting by end time failed")
  1193. if new_list[1] != map_list[0]:
  1194. core.fatal("Sorting by end time failed")
  1195. if new_list[2] != map_list[2]:
  1196. core.fatal("Sorting by end time failed")
  1197. def test_rtree():
  1198. """Testing the rtree ctypes wrapper"""
  1199. tree = vector.RTreeNewIndex(-1, 0, 1)
  1200. for i in xrange(50):
  1201. rect = vector.RTree_Rect()
  1202. vector.RTreeInitRect(byref(rect))
  1203. rect.boundary[0] = i - 3.75
  1204. rect.boundary[1] = 0
  1205. rect.boundary[2] = 0
  1206. rect.boundary[3] = i + 3.75
  1207. rect.boundary[4] = 0
  1208. rect.boundary[5] = 0
  1209. # vector.RTreePrintRect(byref(rect), 0)
  1210. vector.RTreeInsertRect(byref(rect), i + 1, tree)
  1211. rect = vector.RTree_Rect()
  1212. vector.RTreeInitRect(byref(rect))
  1213. i = 25
  1214. rect.boundary[0] = i - 3.75
  1215. rect.boundary[1] = 0
  1216. rect.boundary[2] = 0
  1217. rect.boundary[3] = i + 3.75
  1218. rect.boundary[4] = 0
  1219. rect.boundary[5] = 0
  1220. _list = gis.ilist()
  1221. num = vector.RTreeSearch2(tree, byref(rect), byref(_list))
  1222. # print rectanlge ids
  1223. print "Number of overlapping rectangles", num
  1224. for i in xrange(_list.n_values):
  1225. print "id", _list.value[i]
  1226. ###############################################################################
  1227. if __name__ == "__main__":
  1228. test_increment_datetime_by_string()
  1229. test_adjust_datetime_to_granularity()
  1230. test_spatial_extent_intersection()
  1231. #test_compute_relative_time_granularity()
  1232. test_compute_absolute_time_granularity()
  1233. test_compute_datetime_delta()
  1234. test_spatial_extent_intersection()
  1235. test_spatial_relations()
  1236. test_temporal_topology_builder()
  1237. test_map_list_sorting()
  1238. #test_rtree()