Repository 'validate_temperature_data'
hg clone https://toolshed.g2.bx.psu.edu/repos/greg/validate_temperature_data

Changeset 0:26415eac98c3 (2018-11-27)
Commit message:
Uploaded
added:
.shed.yml
test-data/30_year_normals.csv
test-data/30_year_normals_invalid.csv
test-data/30_year_normals_invalid_output.txt
test-data/daily_actuals.csv
test-data/daily_actuals_invalid.csv
validate_temperature_data.py
validate_temperature_data.xml
b
diff -r 000000000000 -r 26415eac98c3 .shed.yml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.shed.yml Tue Nov 27 11:08:20 2018 -0500
b
@@ -0,0 +1,11 @@
+name: validate_temperature_data
+owner: greg
+description: |
+  Contains a tool that validates both 30 year normals and daily temperature data for the insect_phenology_model tool.
+homepage_url: https://github.com/gregvonkuster/galaxy_tools/tree/master/tools/entomology/validate_temperature_data
+long_description: |
+  Contains a tool that validates both 30 year normals and daily temperature data for the insect_phenology_model tool
+remote_repository_url: https://github.com/gregvonkuster/galaxy_tools/tree/master/tools/entomology/validate_temperature_data
+type: unrestricted
+categories:
+  - Entomology
b
diff -r 000000000000 -r 26415eac98c3 test-data/30_year_normals.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/30_year_normals.csv Tue Nov 27 11:08:20 2018 -0500
b
b'@@ -0,0 +1,367 @@\n+stationid,latitude,longitude,elev_m,name,st,mmdd,doy,tmin,tmax\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-01, 001,-9.9,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-02, 002,-10.0,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-03, 003,-10.1,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-04, 004,-10.1,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-05, 005,-10.2,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-06, 006,-10.2,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-07, 007,-10.3,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-08, 008,-10.3,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-09, 009,-10.3,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-10, 010,-10.4,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-11, 011,-10.4,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-12, 012,-10.4,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-13, 013,-10.5,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-14, 014,-10.5,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-15, 015,-10.6,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-16, 016,-10.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-17, 017,-10.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-18, 018,-10.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-19, 019,-10.6,1.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-20, 020,-10.6,1.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-21, 021,-10.6,1.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-22, 022,-10.6,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-23, 023,-10.6,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-24, 024,-10.6,1.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-25, 025,-10.5,1.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-26, 026,-10.5,1.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-27, 027,-10.4,1.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-28, 028,-10.4,1.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-29, 029,-10.3,1.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-30, 030,-10.3,1.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-31, 031,-10.2,1.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-01, 032,-10.1,1.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-02, 033,-10.0,2.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-03, 034,-9.9,2.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-04, 035,-9.8,2.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-05, 036,-9.7,2.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-06, 037,-9.6,2.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-07, 038,-9.4,2.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-08, 039,-9.3,2.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-09, 040,-9.1,2.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-10, 041,-8.9,3.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-11, 042,-8.8,3.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-12, 043,-8.6,3.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-13, 044,-8.4,3.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-14, 045,-8.2,3.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-15, 046,-8.1,3.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-16, 047,-7.8,4.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-17, 048,-7.6,4.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-18, 049,-7.4,4.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-19, 050,-7.2,4.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-20, 051,-7.0,4.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-21, 052,-6.8,4.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-22, 053,-6.6,5.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-23, 054,-6.3,5.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-24, 055,-6.1,5.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-25, 056,-5.8,5.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-26, 057,-5.6,6.1\n+USC00137'..b',-95.38,297.2,SHENANDOAH,IA,11-03, 308,1.6,14.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-04, 309,1.4,13.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-05, 310,1.2,13.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-06, 311,0.9,13.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-07, 312,0.7,13.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-08, 313,0.4,12.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-09, 314,0.2,12.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-10, 315,-0.1,12.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-11, 316,-0.3,11.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-12, 317,-0.6,11.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-13, 318,-0.9,11.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-14, 319,-1.2,10.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-15, 320,-1.4,10.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-16, 321,-1.7,10.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-17, 322,-2.0,9.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-18, 323,-2.3,9.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-19, 324,-2.6,9.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-20, 325,-2.8,8.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-21, 326,-3.1,8.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-22, 327,-3.4,8.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-23, 328,-3.7,7.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-24, 329,-3.9,7.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-25, 330,-4.2,7.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-26, 331,-4.4,6.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-27, 332,-4.7,6.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-28, 333,-4.9,6.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-29, 334,-5.2,5.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-30, 335,-5.4,5.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-01, 336,-5.7,5.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-02, 337,-5.9,4.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-03, 338,-6.2,4.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-04, 339,-6.4,4.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-05, 340,-6.6,4.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-06, 341,-6.8,3.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-07, 342,-7.0,3.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-08, 343,-7.2,3.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-09, 344,-7.4,3.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-10, 345,-7.6,3.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-11, 346,-7.7,2.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-12, 347,-7.9,2.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-13, 348,-8.1,2.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-14, 349,-8.2,2.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-15, 350,-8.3,2.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-16, 351,-8.5,1.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-17, 352,-8.6,1.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-18, 353,-8.7,1.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-19, 354,-8.8,1.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-20, 355,-8.9,1.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-21, 356,-9.1,1.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-22, 357,-9.2,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-23, 358,-9.2,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-24, 359,-9.3,1.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-25, 360,-9.4,1.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-26, 361,-9.5,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-27, 362,-9.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-28, 363,-9.7,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-29, 364,-9.7,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-30, 365,-9.8,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-31, 366,-9.9,0.7\n'
b
diff -r 000000000000 -r 26415eac98c3 test-data/30_year_normals_invalid.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/30_year_normals_invalid.csv Tue Nov 27 11:08:20 2018 -0500
b
b'@@ -0,0 +1,367 @@\n+stationid,latitude,longitude,elev_m,name,st,mmdd,doy,tmin,tmax\n+,40.7672,-95.38,297.2,SHENANDOAH,IA,01-01, 001,-9.9,0.7\n+USC00137613,error2,-95.38,297.2,SHENANDOAH,IA,01-02, 002,-10.0,0.7\n+USC00137613,40.7672,error3,297.2,SHENANDOAH,IA,01-03, 003,-10.1,0.7\n+USC00137613,40.7672,-95.38,error4,SHENANDOAH,IA,01-04, 004,-10.1,0.7\n+USC00137613,40.7672,-95.38,297.2,,IA,01-05, 005,-10.2,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,,01-06, 006,-10.2,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,error7, 007,-10.3,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-08, 008,error8,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-09, 009,-10.3,error9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-10, 010,-10.4,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-11, 011,-10.4,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-12, 012,-10.4,0.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-13, 013,-10.5,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-14, 014,-10.5,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-15, 015,-10.6,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-16, 016,-10.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-17, 017,-10.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-18, 018,-10.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-19, 019,-10.6,1.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-20, 020,-10.6,1.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-21, 021,-10.6,1.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-22, 022,-10.6,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-23, 023,-10.6,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-24, 024,-10.6,1.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-25, 025,-10.5,1.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-26, 026,-10.5,1.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-27, 027,-10.4,1.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-28, 028,-10.4,1.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-29, 029,-10.3,1.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-30, 030,-10.3,1.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,01-31, 031,-10.2,1.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-01, 032,-10.1,1.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-02, 033,-10.0,2.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-03, 034,-9.9,2.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-04, 035,-9.8,2.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-05, 036,-9.7,2.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-06, 037,-9.6,2.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-07, 038,-9.4,2.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-08, 039,-9.3,2.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-09, 040,-9.1,2.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-10, 041,-8.9,3.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-11, 042,-8.8,3.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-12, 043,-8.6,3.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-13, 044,-8.4,3.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-14, 045,-8.2,3.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-15, 046,-8.1,3.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-16, 047,-7.8,4.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-17, 048,-7.6,4.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-18, 049,-7.4,4.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-19, 050,-7.2,4.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-20, 051,-7.0,4.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-21, 052,-6.8,4.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-22, 053,-6.6,5.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-23, 054,-6.3,5.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-24, 055,-6.1,5.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-25, 056,-5.8,5.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,02-26, 057,-5.6,6.1\n+USC00137613,40.7672,-95.38'..b',-95.38,297.2,SHENANDOAH,IA,11-03, 308,1.6,14.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-04, 309,1.4,13.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-05, 310,1.2,13.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-06, 311,0.9,13.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-07, 312,0.7,13.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-08, 313,0.4,12.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-09, 314,0.2,12.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-10, 315,-0.1,12.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-11, 316,-0.3,11.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-12, 317,-0.6,11.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-13, 318,-0.9,11.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-14, 319,-1.2,10.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-15, 320,-1.4,10.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-16, 321,-1.7,10.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-17, 322,-2.0,9.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-18, 323,-2.3,9.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-19, 324,-2.6,9.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-20, 325,-2.8,8.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-21, 326,-3.1,8.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-22, 327,-3.4,8.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-23, 328,-3.7,7.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-24, 329,-3.9,7.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-25, 330,-4.2,7.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-26, 331,-4.4,6.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-27, 332,-4.7,6.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-28, 333,-4.9,6.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-29, 334,-5.2,5.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,11-30, 335,-5.4,5.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-01, 336,-5.7,5.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-02, 337,-5.9,4.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-03, 338,-6.2,4.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-04, 339,-6.4,4.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-05, 340,-6.6,4.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-06, 341,-6.8,3.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-07, 342,-7.0,3.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-08, 343,-7.2,3.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-09, 344,-7.4,3.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-10, 345,-7.6,3.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-11, 346,-7.7,2.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-12, 347,-7.9,2.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-13, 348,-8.1,2.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-14, 349,-8.2,2.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-15, 350,-8.3,2.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-16, 351,-8.5,1.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-17, 352,-8.6,1.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-18, 353,-8.7,1.7\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-19, 354,-8.8,1.6\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-20, 355,-8.9,1.4\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-21, 356,-9.1,1.3\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-22, 357,-9.2,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-23, 358,-9.2,1.2\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-24, 359,-9.3,1.1\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-25, 360,-9.4,1.0\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-26, 361,-9.5,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-27, 362,-9.6,0.9\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-28, 363,-9.7,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-29, 364,-9.7,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-29, 366,-9.7,0.8\n+USC00137613,40.7672,-95.38,297.2,SHENANDOAH,IA,12-31, 367,-9.9,0.7\n'
b
diff -r 000000000000 -r 26415eac98c3 test-data/daily_actuals.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/daily_actuals.csv Tue Nov 27 11:08:20 2018 -0500
b
b'@@ -0,0 +1,184 @@\n+LATITUDE,LONGITUDE,DATE,DOY,TMIN,TMAX\n+ 40.81849,-77.84637,2017-04-01,091,3.30,7.66\n+ 40.81849,-77.84637,2017-04-02,092,1.69,15.19\n+ 40.81849,-77.84637,2017-04-03,093,3.48,18.81\n+ 40.81849,-77.84637,2017-04-04,094,9.28,18.75\n+ 40.81849,-77.84637,2017-04-05,095,8.14,19.01\n+ 40.81849,-77.84637,2017-04-06,096,4.59,12.02\n+ 40.81849,-77.84637,2017-04-07,097,1.19,3.66\n+ 40.81849,-77.84637,2017-04-08,098,-0.56,13.85\n+ 40.81849,-77.84637,2017-04-09,099,-2.32,21.96\n+ 40.81849,-77.84637,2017-04-10,100,7.90,26.25\n+ 40.81849,-77.84637,2017-04-11,101,9.25,26.48\n+ 40.81849,-77.84637,2017-04-12,102,8.95,19.78\n+ 40.81849,-77.84637,2017-04-13,103,4.00,15.47\n+ 40.81849,-77.84637,2017-04-14,104,5.09,20.10\n+ 40.81849,-77.84637,2017-04-15,105,8.44,25.02\n+ 40.81849,-77.84637,2017-04-16,106,14.13,26.54\n+ 40.81849,-77.84637,2017-04-17,107,8.23,20.59\n+ 40.81849,-77.84637,2017-04-18,108,3.27,20.96\n+ 40.81849,-77.84637,2017-04-19,109,9.76,13.40\n+ 40.81849,-77.84637,2017-04-20,110,10.70,25.45\n+ 40.81849,-77.84637,2017-04-21,111,11.74,22.34\n+ 40.81849,-77.84637,2017-04-22,112,4.90,13.43\n+ 40.81849,-77.84637,2017-04-23,113,0.43,20.16\n+ 40.81849,-77.84637,2017-04-24,114,1.21,17.18\n+ 40.81849,-77.84637,2017-04-25,115,9.93,14.30\n+ 40.81849,-77.84637,2017-04-26,116,11.38,23.36\n+ 40.81849,-77.84637,2017-04-27,117,12.42,23.94\n+ 40.81849,-77.84637,2017-04-28,118,11.79,25.11\n+ 40.81849,-77.84637,2017-04-29,119,11.14,24.38\n+ 40.81849,-77.84637,2017-04-30,120,12.08,25.29\n+ 40.81849,-77.84637,2017-05-01,121,13.37,25.43\n+ 40.81849,-77.84637,2017-05-02,122,10.78,15.74\n+ 40.81849,-77.84637,2017-05-03,123,5.09,16.41\n+ 40.81849,-77.84637,2017-05-04,124,4.07,14.99\n+ 40.81849,-77.84637,2017-05-05,125,8.04,17.02\n+ 40.81849,-77.84637,2017-05-06,126,5.92,12.78\n+ 40.81849,-77.84637,2017-05-07,127,2.90,12.05\n+ 40.81849,-77.84637,2017-05-08,128,1.22,13.07\n+ 40.81849,-77.84637,2017-05-09,129,-1.45,17.87\n+ 40.81849,-77.84637,2017-05-10,130,5.94,19.31\n+ 40.81849,-77.84637,2017-05-11,131,7.90,11.11\n+ 40.81849,-77.84637,2017-05-12,132,8.75,12.95\n+ 40.81849,-77.84637,2017-05-13,133,5.68,14.39\n+ 40.81849,-77.84637,2017-05-14,134,5.94,19.81\n+ 40.81849,-77.84637,2017-05-15,135,7.37,22.14\n+ 40.81849,-77.84637,2017-05-16,136,5.18,26.96\n+ 40.81849,-77.84637,2017-05-17,137,11.12,31.63\n+ 40.81849,-77.84637,2017-05-18,138,15.39,32.05\n+ 40.81849,-77.84637,2017-05-19,139,13.92,29.51\n+ 40.81849,-77.84637,2017-05-20,140,9.38,13.55\n+ 40.81849,-77.84637,2017-05-21,141,12.60,17.19\n+ 40.81849,-77.84637,2017-05-22,142,10.93,23.45\n+ 40.81849,-77.84637,2017-05-23,143,6.24,21.30\n+ 40.81849,-77.84637,2017-05-24,144,10.97,21.61\n+ 40.81849,-77.84637,2017-05-25,145,11.91,18.55\n+ 40.81849,-77.84637,2017-05-26,146,13.00,19.09\n+ 40.81849,-77.84637,2017-05-27,147,9.28,22.35\n+ 40.81849,-77.84637,2017-05-28,148,13.02,19.25\n+ 40.81849,-77.84637,2017-05-29,149,15.61,25.52\n+ 40.81849,-77.84637,2017-05-30,150,14.89,20.32\n+ 40.81849,-77.84637,2017-05-31,151,12.29,24.32\n+ 40.81849,-77.84637,2017-06-01,152,9.02,22.91\n+ 40.81849,-77.84637,2017-06-02,153,10.83,22.70\n+ 40.81849,-77.84637,2017-06-03,154,10.01,25.36\n+ 40.81849,-77.84637,2017-06-04,155,8.05,16.85\n+ 40.81849,-77.84637,2017-06-05,156,14.04,23.52\n+ 40.81849,-77.84637,2017-06-06,157,13.20,21.63\n+ 40.81849,-77.84637,2017-06-07,158,9.99,17.12\n+ 40.81849,-77.84637,2017-06-08,159,9.42,23.51\n+ 40.81849,-77.84637,2017-06-09,160,10.71,25.54\n+ 40.81849,-77.84637,2017-06-10,161,15.90,29.01\n+ 40.81849,-77.84637,2017-06-11,162,15.11,31.46\n+ 40.81849,-77.84637,2017-06-12,163,15.59,31.82\n+ 40.81849,-77.84637,2017-06-13,164,18.19,34.21\n+ 40.81849,-77.84637,2017-06-14,165,19.55,29.87\n+ 40.81849,-77.84637,2017-06-15,166,17.02,27.22\n+ 40.81849,-77.84637,2017-06-16,167,17.59,26.76\n+ 40.81849,-77.84637,2017-06-17,168,17.43,29.03\n+ 40.81849,-77.84637,2017-06-18,169,20.91,31.44\n+ 40.81849,-77.84637,2017-06-19,170,17.51,24.38\n+ 40.81849,-77.84637,2017-06-20,171,14.80,25.74\n+ 40.81849,-77.84637,2017-06-21,172,13.97,26.99\n+ 40.81849,-77.84637,2017-06-22,173,12.72,29.78\n'..b'4637,2017-07-09,190,11.83,26.33\n+ 40.81849,-77.84637,2017-07-10,191,12.38,27.23\n+ 40.81849,-77.84637,2017-07-11,192,17.98,28.99\n+ 40.81849,-77.84637,2017-07-12,193,21.06,29.84\n+ 40.81849,-77.84637,2017-07-13,194,21.07,28.19\n+ 40.81849,-77.84637,2017-07-14,195,19.22,28.46\n+ 40.81849,-77.84637,2017-07-15,196,16.50,24.54\n+ 40.81849,-77.84637,2017-07-16,197,14.44,28.05\n+ 40.81849,-77.84637,2017-07-17,198,17.26,30.80\n+ 40.81849,-77.84637,2017-07-18,199,17.44,31.69\n+ 40.81849,-77.84637,2017-07-19,200,16.67,32.40\n+ 40.81849,-77.84637,2017-07-20,201,19.12,32.13\n+ 40.81849,-77.84637,2017-07-21,202,20.94,31.43\n+ 40.81849,-77.84637,2017-07-22,203,19.30,28.36\n+ 40.81849,-77.84637,2017-07-23,204,20.25,30.59\n+ 40.81849,-77.84637,2017-07-24,205,18.56,28.17\n+ 40.81849,-77.84637,2017-07-25,206,15.18,22.72\n+ 40.81849,-77.84637,2017-07-26,207,12.03,26.34\n+ 40.81849,-77.84637,2017-07-27,208,16.35,29.74\n+ 40.81849,-77.84637,2017-07-28,209,16.35,26.24\n+ 40.81849,-77.84637,2017-07-29,210,11.05,23.78\n+ 40.81849,-77.84637,2017-07-30,211,7.73,28.01\n+ 40.81849,-77.84637,2017-07-31,212,13.66,30.13\n+ 40.81849,-77.84637,2017-08-01,213,15.11,30.81\n+ 40.81849,-77.84637,2017-08-02,214,16.56,30.22\n+ 40.81849,-77.84637,2017-08-03,215,15.69,28.57\n+ 40.81849,-77.84637,2017-08-04,216,16.07,30.48\n+ 40.81849,-77.84637,2017-08-05,217,12.30,23.46\n+ 40.81849,-77.84637,2017-08-06,218,11.46,23.44\n+ 40.81849,-77.84637,2017-08-07,219,15.40,18.35\n+ 40.81849,-77.84637,2017-08-08,220,12.19,25.48\n+ 40.81849,-77.84637,2017-08-09,221,9.23,26.69\n+ 40.81849,-77.84637,2017-08-10,222,9.53,25.78\n+ 40.81849,-77.84637,2017-08-11,223,16.54,26.25\n+ 40.81849,-77.84637,2017-08-12,224,16.29,26.87\n+ 40.81849,-77.84637,2017-08-13,225,14.17,26.51\n+ 40.81849,-77.84637,2017-08-14,226,13.98,22.43\n+ 40.81849,-77.84637,2017-08-15,227,17.69,28.88\n+ 40.81849,-77.84637,2017-08-16,228,14.84,29.43\n+ 40.81849,-77.84637,2017-08-17,229,13.40,29.96\n+ 40.81849,-77.84637,2017-08-18,230,19.42,29.00\n+ 40.81849,-77.84637,2017-08-19,231,14.40,28.28\n+ 40.81849,-77.84637,2017-08-20,232,12.31,27.77\n+ 40.81849,-77.84637,2017-08-21,233,14.27,30.25\n+ 40.81849,-77.84637,2017-08-22,234,18.44,31.05\n+ 40.81849,-77.84637,2017-08-23,235,14.22,24.64\n+ 40.81849,-77.84637,2017-08-24,236,10.30,23.00\n+ 40.81849,-77.84637,2017-08-25,237,12.57,21.39\n+ 40.81849,-77.84637,2017-08-26,238,10.93,23.29\n+ 40.81849,-77.84637,2017-08-27,239,9.96,23.45\n+ 40.81849,-77.84637,2017-08-28,240,9.26,22.38\n+ 40.81849,-77.84637,2017-08-29,241,13.80,19.09\n+ 40.81849,-77.84637,2017-08-30,242,10.88,24.45\n+ 40.81849,-77.84637,2017-08-31,243,13.15,24.42\n+ 40.81849,-77.84637,2017-09-01,244,7.82,17.91\n+ 40.81849,-77.84637,2017-09-02,245,6.20,13.16\n+ 40.81849,-77.84637,2017-09-03,246,12.37,19.35\n+ 40.81849,-77.84637,2017-09-04,247,10.67,26.97\n+ 40.81849,-77.84637,2017-09-05,248,15.39,21.54\n+ 40.81849,-77.84637,2017-09-06,249,13.80,18.10\n+ 40.81849,-77.84637,2017-09-07,250,9.30,18.45\n+ 40.81849,-77.84637,2017-09-08,251,8.86,18.11\n+ 40.81849,-77.84637,2017-09-09,252,8.44,18.21\n+ 40.81849,-77.84637,2017-09-10,253,3.93,9.19\n+ 40.81849,-77.84637,2017-09-11,254,4.98,22.12\n+ 40.81849,-77.84637,2017-09-12,255,8.70,24.06\n+ 40.81849,-77.84637,2017-09-13,256,12.75,23.14\n+ 40.81849,-77.84637,2017-09-14,257,16.60,19.18\n+ 40.81849,-77.84637,2017-09-15,258,14.89,25.28\n+ 40.81849,-77.84637,2017-09-16,259,14.73,25.42\n+ 40.81849,-77.84637,2017-09-17,260,14.85,27.42\n+ 40.81849,-77.84637,2017-09-18,261,16.12,26.18\n+ 40.81849,-77.84637,2017-09-19,262,13.36,25.46\n+ 40.81849,-77.84637,2017-09-20,263,10.90,28.76\n+ 40.81849,-77.84637,2017-09-21,264,11.68,28.44\n+ 40.81849,-77.84637,2017-09-22,265,13.10,29.03\n+ 40.81849,-77.84637,2017-09-23,266,10.11,30.51\n+ 40.81849,-77.84637,2017-09-24,267,12.33,31.11\n+ 40.81849,-77.84637,2017-09-25,268,15.03,31.81\n+ 40.81849,-77.84637,2017-09-26,269,16.01,30.96\n+ 40.81849,-77.84637,2017-09-27,270,15.03,31.27\n+ 40.81849,-77.84637,2017-09-28,271,9.61,21.39\n+ 40.81849,-77.84637,2017-09-29,272,6.03,20.71\n+ 40.81849,-77.84637,2017-09-30,273,2.85,15.23\n'
b
diff -r 000000000000 -r 26415eac98c3 test-data/daily_actuals_invalid.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/daily_actuals_invalid.csv Tue Nov 27 11:08:20 2018 -0500
b
b'@@ -0,0 +1,183 @@\n+LATITUDE,LONGITUDE,DATE,DOY,TMIN,TMAX\n+,-77.84637,2017-04-01,091,3.30,7.66\n+ error2,-77.84637,2017-04-02,092,1.69,15.19\n+ 40.81849,error3,2017-04-03,093,3.48,18.81\n+ 40.81849,-77.84637,error4,094,9.28,18.75\n+ 40.81849,-77.84637,2017-04-05,095,error5,19.01\n+ 40.81849,-77.84637,2017-04-06,096,4.59,error6\n+ 40.81849,-77.84637,2017-04-07,097,1.19,3.66\n+ 40.81849,-77.84637,2017-04-08,098,-0.56,13.85\n+ 40.81849,-77.84637,2017-04-09,099,-2.32,21.96\n+ 40.81849,-77.84637,2017-04-10,100,7.90,26.25\n+ 40.81849,-77.84637,2017-04-11,101,9.25,26.48\n+ 40.81849,-77.84637,2017-04-12,102,8.95,19.78\n+ 40.81849,-77.84637,2017-04-13,103,4.00,15.47\n+ 40.81849,-77.84637,2017-04-14,104,5.09,20.10\n+ 40.81849,-77.84637,2017-04-15,105,8.44,25.02\n+ 40.81849,-77.84637,2017-04-16,106,14.13,26.54\n+ 40.81849,-77.84637,2017-04-17,107,8.23,20.59\n+ 40.81849,-77.84637,2017-04-18,108,3.27,20.96\n+ 40.81849,-77.84637,2017-04-19,109,9.76,13.40\n+ 40.81849,-77.84637,2017-04-20,110,10.70,25.45\n+ 40.81849,-77.84637,2017-04-21,111,11.74,22.34\n+ 40.81849,-77.84637,2017-04-22,112,4.90,13.43\n+ 40.81849,-77.84637,2017-04-23,113,0.43,20.16\n+ 40.81849,-77.84637,2017-04-24,114,1.21,17.18\n+ 40.81849,-77.84637,2017-04-25,115,9.93,14.30\n+ 40.81849,-77.84637,2017-04-26,116,11.38,23.36\n+ 40.81849,-77.84637,2017-04-27,117,12.42,23.94\n+ 40.81849,-77.84637,2017-04-28,118,11.79,25.11\n+ 40.81849,-77.84637,2017-04-29,119,11.14,24.38\n+ 40.81849,-77.84637,2017-04-30,120,12.08,25.29\n+ 40.81849,-77.84637,2017-05-01,121,13.37,25.43\n+ 40.81849,-77.84637,2017-05-02,122,10.78,15.74\n+ 40.81849,-77.84637,2017-05-03,123,5.09,16.41\n+ 40.81849,-77.84637,2017-05-04,124,4.07,14.99\n+ 40.81849,-77.84637,2017-05-05,125,8.04,17.02\n+ 40.81849,-77.84637,2017-05-06,126,5.92,12.78\n+ 40.81849,-77.84637,2017-05-07,127,2.90,12.05\n+ 40.81849,-77.84637,2017-05-08,128,1.22,13.07\n+ 40.81849,-77.84637,2017-05-09,129,-1.45,17.87\n+ 40.81849,-77.84637,2017-05-10,130,5.94,19.31\n+ 40.81849,-77.84637,2017-05-11,131,7.90,11.11\n+ 40.81849,-77.84637,2017-05-12,132,8.75,12.95\n+ 40.81849,-77.84637,2017-05-13,133,5.68,14.39\n+ 40.81849,-77.84637,2017-05-14,134,5.94,19.81\n+ 40.81849,-77.84637,2017-05-15,135,7.37,22.14\n+ 40.81849,-77.84637,2017-05-16,136,5.18,26.96\n+ 40.81849,-77.84637,2017-05-17,137,11.12,31.63\n+ 40.81849,-77.84637,2017-05-18,138,15.39,32.05\n+ 40.81849,-77.84637,2017-05-19,139,13.92,29.51\n+ 40.81849,-77.84637,2017-05-20,140,9.38,13.55\n+ 40.81849,-77.84637,2017-05-21,141,12.60,17.19\n+ 40.81849,-77.84637,2017-05-22,142,10.93,23.45\n+ 40.81849,-77.84637,2017-05-23,143,6.24,21.30\n+ 40.81849,-77.84637,2017-05-24,144,10.97,21.61\n+ 40.81849,-77.84637,2017-05-25,145,11.91,18.55\n+ 40.81849,-77.84637,2017-05-26,146,13.00,19.09\n+ 40.81849,-77.84637,2017-05-27,147,9.28,22.35\n+ 40.81849,-77.84637,2017-05-28,148,13.02,19.25\n+ 40.81849,-77.84637,2017-05-29,149,15.61,25.52\n+ 40.81849,-77.84637,2017-05-30,150,14.89,20.32\n+ 40.81849,-77.84637,2017-05-31,151,12.29,24.32\n+ 40.81849,-77.84637,2017-06-01,152,9.02,22.91\n+ 40.81849,-77.84637,2017-06-02,153,10.83,22.70\n+ 40.81849,-77.84637,2017-06-03,154,10.01,25.36\n+ 40.81849,-77.84637,2017-06-04,155,8.05,16.85\n+ 40.81849,-77.84637,2017-06-05,156,14.04,23.52\n+ 40.81849,-77.84637,2017-06-06,157,13.20,21.63\n+ 40.81849,-77.84637,2017-06-07,158,9.99,17.12\n+ 40.81849,-77.84637,2017-06-08,159,9.42,23.51\n+ 40.81849,-77.84637,2017-06-09,160,10.71,25.54\n+ 40.81849,-77.84637,2017-06-10,161,15.90,29.01\n+ 40.81849,-77.84637,2017-06-11,162,15.11,31.46\n+ 40.81849,-77.84637,2017-06-12,163,15.59,31.82\n+ 40.81849,-77.84637,2017-06-13,164,18.19,34.21\n+ 40.81849,-77.84637,2017-06-14,165,19.55,29.87\n+ 40.81849,-77.84637,2017-06-15,166,17.02,27.22\n+ 40.81849,-77.84637,2017-06-16,167,17.59,26.76\n+ 40.81849,-77.84637,2017-06-17,168,17.43,29.03\n+ 40.81849,-77.84637,2017-06-18,169,20.91,31.44\n+ 40.81849,-77.84637,2017-06-19,170,17.51,24.38\n+ 40.81849,-77.84637,2017-06-20,171,14.80,25.74\n+ 40.81849,-77.84637,2017-06-21,172,13.97,26.99\n+ 40.81849,-77.84637,2017-06-22,173,12.72,29.78\n+ 40.81849,-77.'..b'637,2017-07-08,189,15.93,25.53\n+ 40.81849,-77.84637,2017-07-09,190,11.83,26.33\n+ 40.81849,-77.84637,2017-07-10,191,12.38,27.23\n+ 40.81849,-77.84637,2017-07-11,192,17.98,28.99\n+ 40.81849,-77.84637,2017-07-12,193,21.06,29.84\n+ 40.81849,-77.84637,2017-07-13,194,21.07,28.19\n+ 40.81849,-77.84637,2017-07-14,195,19.22,28.46\n+ 40.81849,-77.84637,2017-07-15,196,16.50,24.54\n+ 40.81849,-77.84637,2017-07-16,197,14.44,28.05\n+ 40.81849,-77.84637,2017-07-17,198,17.26,30.80\n+ 40.81849,-77.84637,2017-07-18,199,17.44,31.69\n+ 40.81849,-77.84637,2017-07-19,200,16.67,32.40\n+ 40.81849,-77.84637,2017-07-20,201,19.12,32.13\n+ 40.81849,-77.84637,2017-07-21,202,20.94,31.43\n+ 40.81849,-77.84637,2017-07-22,203,19.30,28.36\n+ 40.81849,-77.84637,2017-07-23,204,20.25,30.59\n+ 40.81849,-77.84637,2017-07-24,205,18.56,28.17\n+ 40.81849,-77.84637,2017-07-25,206,15.18,22.72\n+ 40.81849,-77.84637,2017-07-26,207,12.03,26.34\n+ 40.81849,-77.84637,2017-07-27,208,16.35,29.74\n+ 40.81849,-77.84637,2017-07-28,209,16.35,26.24\n+ 40.81849,-77.84637,2017-07-29,210,11.05,23.78\n+ 40.81849,-77.84637,2017-07-30,211,7.73,28.01\n+ 40.81849,-77.84637,2017-07-31,212,13.66,30.13\n+ 40.81849,-77.84637,2017-08-01,213,15.11,30.81\n+ 40.81849,-77.84637,2017-08-02,214,16.56,30.22\n+ 40.81849,-77.84637,2017-08-03,215,15.69,28.57\n+ 40.81849,-77.84637,2017-08-04,216,16.07,30.48\n+ 40.81849,-77.84637,2017-08-05,217,12.30,23.46\n+ 40.81849,-77.84637,2017-08-06,218,11.46,23.44\n+ 40.81849,-77.84637,2017-08-07,219,15.40,18.35\n+ 40.81849,-77.84637,2017-08-08,220,12.19,25.48\n+ 40.81849,-77.84637,2017-08-09,221,9.23,26.69\n+ 40.81849,-77.84637,2017-08-10,222,9.53,25.78\n+ 40.81849,-77.84637,2017-08-11,223,16.54,26.25\n+ 40.81849,-77.84637,2017-08-12,224,16.29,26.87\n+ 40.81849,-77.84637,2017-08-13,225,14.17,26.51\n+ 40.81849,-77.84637,2017-08-14,226,13.98,22.43\n+ 40.81849,-77.84637,2017-08-15,227,17.69,28.88\n+ 40.81849,-77.84637,2017-08-16,228,14.84,29.43\n+ 40.81849,-77.84637,2017-08-17,229,13.40,29.96\n+ 40.81849,-77.84637,2017-08-18,230,19.42,29.00\n+ 40.81849,-77.84637,2017-08-19,231,14.40,28.28\n+ 40.81849,-77.84637,2017-08-20,232,12.31,27.77\n+ 40.81849,-77.84637,2017-08-21,233,14.27,30.25\n+ 40.81849,-77.84637,2017-08-22,234,18.44,31.05\n+ 40.81849,-77.84637,2017-08-23,235,14.22,24.64\n+ 40.81849,-77.84637,2017-08-24,236,10.30,23.00\n+ 40.81849,-77.84637,2017-08-25,237,12.57,21.39\n+ 40.81849,-77.84637,2017-08-26,238,10.93,23.29\n+ 40.81849,-77.84637,2017-08-27,239,9.96,23.45\n+ 40.81849,-77.84637,2017-08-28,240,9.26,22.38\n+ 40.81849,-77.84637,2017-08-29,241,13.80,19.09\n+ 40.81849,-77.84637,2017-08-30,242,10.88,24.45\n+ 40.81849,-77.84637,2017-08-31,243,13.15,24.42\n+ 40.81849,-77.84637,2017-09-01,244,7.82,17.91\n+ 40.81849,-77.84637,2017-09-02,245,6.20,13.16\n+ 40.81849,-77.84637,2017-09-03,246,12.37,19.35\n+ 40.81849,-77.84637,2017-09-04,247,10.67,26.97\n+ 40.81849,-77.84637,2017-09-05,248,15.39,21.54\n+ 40.81849,-77.84637,2017-09-06,249,13.80,18.10\n+ 40.81849,-77.84637,2017-09-07,250,9.30,18.45\n+ 40.81849,-77.84637,2017-09-08,251,8.86,18.11\n+ 40.81849,-77.84637,2017-09-09,252,8.44,18.21\n+ 40.81849,-77.84637,2017-09-10,253,3.93,9.19\n+ 40.81849,-77.84637,2017-09-11,254,4.98,22.12\n+ 40.81849,-77.84637,2017-09-12,255,8.70,24.06\n+ 40.81849,-77.84637,2017-09-13,256,12.75,23.14\n+ 40.81849,-77.84637,2017-09-14,257,16.60,19.18\n+ 40.81849,-77.84637,2017-09-15,258,14.89,25.28\n+ 40.81849,-77.84637,2017-09-16,259,14.73,25.42\n+ 40.81849,-77.84637,2017-09-17,260,14.85,27.42\n+ 40.81849,-77.84637,2017-09-18,261,16.12,26.18\n+ 40.81849,-77.84637,2017-09-19,262,13.36,25.46\n+ 40.81849,-77.84637,2017-09-20,263,10.90,28.76\n+ 40.81849,-77.84637,2017-09-21,264,11.68,28.44\n+ 40.81849,-77.84637,2017-09-22,265,13.10,29.03\n+ 40.81849,-77.84637,2017-09-23,266,10.11,30.51\n+ 40.81849,-77.84637,2017-09-24,267,12.33,31.11\n+ 40.81849,-77.84637,2017-09-25,268,15.03,31.81\n+ 40.81849,-77.84637,2017-09-26,269,16.01,30.96\n+ 40.81849,-77.84637,2017-09-27,270,15.03,31.27\n+ 40.81849,-77.84637,2017-09-29,272,6.03,20.71\n+ 40.81849,-77.84637,2017-09-30,273,2.85,15.23\n'
b
diff -r 000000000000 -r 26415eac98c3 validate_temperature_data.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/validate_temperature_data.py Tue Nov 27 11:08:20 2018 -0500
[
b'@@ -0,0 +1,171 @@\n+#!/usr/bin/env python\n+import argparse\n+import datetime\n+import decimal\n+import re\n+import shutil\n+import sys\n+\n+parser = argparse.ArgumentParser()\n+parser.add_argument(\'--data_type\', dest=\'data_type\', default=None, help=\'Temperature data type, normals or actuals\')\n+parser.add_argument(\'--input_actuals\', dest=\'input_actuals\', default=None, help=\'Daily actuals temperature data\')\n+parser.add_argument(\'--input_normals\', dest=\'input_normals\', default=None, help=\'30 year normals temperature data\')\n+parser.add_argument(\'--output\', dest=\'output\', help=\'Output dataset\'),\n+args = parser.parse_args()\n+\n+ACTUALS_HEADER = "LATITUDE,LONGITUDE,DATE,DOY,TMIN,TMAX"\n+NORMALS_HEADER = "stationid,latitude,longitude,elev_m,name,st,mmdd,doy,tmin,tmax"\n+\n+def add_error_msg(accumulated_msgs, msg):\n+    return "%s\\n%s" % (accumulated_msgs, msg)\n+\n+\n+def empty_value(line_no, label, accumulated_msgs):\n+    return add_error_msg(accumulated_msgs, "The required %s value is missing on line %d." % (label, line_no))\n+\n+\n+def stop_error(msg):\n+    sys.exit(msg)\n+\n+\n+def validate_date_string(line_no, date_string, accumulated_msgs):\n+    try:\n+        datetime.datetime.strptime(date_string, \'%Y-%m-%d\')\n+        return accumulated_msgs\n+    except ValueError:\n+        return add_error_msg(accumulated_msgs, "Line %d contains an incorrect date format (%s must be YYYY-MM-DD)." % (line_no, date_string))\n+\n+\n+def validate_decimal(line_no, decimal_string, accumulated_msgs, label):\n+    try:\n+        decimal.Decimal(decimal_string)\n+        return accumulated_msgs\n+    except Exception:\n+        return add_error_msg(accumulated_msgs, "Line %d contains an incorrect %s decimal value (%s)." % (line_no, label, decimal_string))\n+\n+\n+def validate_integer(line_no, integer_string, accumulated_msgs, label):\n+    if integer_string.isdigit():\n+        return accumulated_msgs\n+    return add_error_msg(accumulated_msgs, "Line %d contains an incorrect %s integer value (%s)." % (line_no, label, integer_string))\n+\n+\n+def validate_mmdd(line_no, mmdd, accumulated_msgs):\n+    try:\n+        datetime.datetime.strptime(mmdd, \'%m-%d\')\n+        return accumulated_msgs\n+    except ValueError:\n+        # Handle Feb 29.\n+        items = mmdd.split("-")\n+        try:\n+            month = int(items[0])\n+            day = int(items[1])\n+            if month == 2 and day == 29:\n+                return accumulated_msgs\n+        except Exception:\n+            # Error message accumulated below.\n+            pass\n+        return add_error_msg(accumulated_msgs, "Line %d contains an incorrect date format (%s must be mm-dd)." % (line_no, mmdd))\n+\n+\n+accumulated_msgs = ""\n+last_doy = 0\n+# Parse the input file, skipping the header, and validating\n+# that each data line consists of 31 comma-separated items.\n+if args.data_type == "normals":\n+    input_file = args.input_normals\n+    num_normals_rows = 0\n+else:\n+    input_file = args.input_actuals\n+with open(input_file, "r") as ih:\n+    for i, line in enumerate(ih):\n+        line = line.rstrip("\\r\\n")\n+        items = line.split(",")\n+        if args.data_type == "normals":\n+            num_normals_rows += 1\n+            if i == 0:\n+                if line != NORMALS_HEADER:\n+                    accumulated_msgs = add_error_msg(accumulated_msgs, "The header is invalid, must be %s" % NORMALS_HEADER)\n+                continue\n+            if i > 367:\n+                accumulated_msgs = add_error_msg(accumulated_msgs, "The input file contains more than 367 lines (must be 1 header line and 366 data lines).")\n+                stop_error(accumulated_msgs)\n+            if len(items) != 10:\n+                accumulated_msgs = add_error_msg(accumulated_msgs, "Line %d contains %s columns, (must be 10)." % (i, len(items)))\n+                stop_error(accumulated_msgs)\n+            stationid = items[0].strip()\n+            if len(stationid) == 0:\n+                accumulated_msgs = empty_value(i, "stationid", accumulated_msgs)\n+            latitude = ite'..b'lidate_decimal(i, latitude, accumulated_msgs, "latitude")\n+            longitude = items[2].strip()\n+            accumulated_msgs = validate_decimal(i, longitude, accumulated_msgs, "longitude")\n+            elev_m = items[3].strip()\n+            accumulated_msgs = validate_decimal(i, elev_m, accumulated_msgs, "elev_m")\n+            name = items[4].strip()\n+            if len(name) == 0:\n+                accumulated_msgs = empty_value(i, "name", accumulated_msgs)\n+            st = items[5].strip()\n+            if len(st) == 0:\n+                accumulated_msgs = empty_value(i, "st", accumulated_msgs)\n+            mmdd = items[6].strip()\n+            accumulated_msgs = validate_mmdd(i, mmdd, accumulated_msgs)\n+            doy = items[7].strip()\n+            accumulated_msgs = validate_integer(i, doy, accumulated_msgs, "doy")\n+            # Make sure the DOY values are consecutive.\n+            try:\n+                if int(doy) != (last_doy + 1):\n+                    accumulated_msgs = add_error_msg(accumulated_msgs, "Line %d contains a DOY (%s) that is not conexcutive (previous DOY is %d)." % (i, doy, last_doy))\n+                    stop_error(accumulated_msgs)\n+                else:\n+                    last_doy += 1\n+            except Exception:\n+                # The error for an invalid integer was captured above.\n+                pass\n+            tmin = items[8].strip()\n+            accumulated_msgs = validate_decimal(i, tmin, accumulated_msgs, "tmin")\n+            tmax = items[9].strip()\n+            accumulated_msgs = validate_decimal(i, tmax, accumulated_msgs, "tmax")\n+        else:\n+            if i == 0:\n+                if line != ACTUALS_HEADER:\n+                    accumulated_msgs = add_error_msg(accumulated_msgs, "The header is invalid, must be %s" % ACTUALS_HEADER)\n+                continue\n+            if i > 367:\n+                accumulated_msgs = add_error_msg(accumulated_msgs, "The input file contains more than 367 lines (must be 1 header line and no more than 366 data lines).")\n+                stop_error(accumulated_msgs)\n+            if len(items) != 6:\n+                accumulated_msgs = add_error_msg(accumulated_msgs, "Line %d contains %s columns, (must be 6)." % (i, len(items)))\n+                stop_error(accumulated_msgs)\n+            latitude = items[0].strip()\n+            accumulated_msgs = validate_decimal(i, latitude, accumulated_msgs, "LATITUDE")\n+            longitude = items[1].strip()\n+            accumulated_msgs = validate_decimal(i, longitude, accumulated_msgs, "LONGITUDE")\n+            date_string = items[2].strip()\n+            accumulated_msgs = validate_date_string(i, date_string, accumulated_msgs)\n+            doy = items[3].strip()\n+            accumulated_msgs = validate_integer(i, doy, accumulated_msgs, "doy")\n+            # Make sure the DOY values are consecutive.\n+            if i == 1:\n+                last_doy = int(doy)\n+            else:\n+                try:\n+                    if int(doy) != (last_doy + 1):\n+                        accumulated_msgs = add_error_msg(accumulated_msgs, "Line %d contains a DOY (%s) that is not conexcutive (previous DOY is %d)." % (i, doy, last_doy))\n+                        stop_error(accumulated_msgs)\n+                    else:\n+                        last_doy += 1\n+                except Exception:\n+                    # The error for an invalid integer was captured above.\n+                    pass\n+            tmin = items[4].strip()\n+            accumulated_msgs = validate_decimal(i, tmin, accumulated_msgs, "tmin")\n+            tmax = items[5].strip()\n+            accumulated_msgs = validate_decimal(i, tmax, accumulated_msgs, "tmax")\n+    if args.data_type == "normals" and num_normals_rows != 367:\n+        accumulated_msgs = add_error_msg(accumulated_msgs, "The input file contains %d rows, (must be 367)." % num_normals_rows)\n+\n+if len(accumulated_msgs) > 0:\n+    stop_error(accumulated_msgs)\n+\n+shutil.copyfile(input_file, args.output)\n'
b
diff -r 000000000000 -r 26415eac98c3 validate_temperature_data.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/validate_temperature_data.xml Tue Nov 27 11:08:20 2018 -0500
[
@@ -0,0 +1,77 @@
+<tool id="validate_temperature_data" name="Validate temperature data" version="1.0.0">
+    <description>for insect phenology model</description>
+    <command detect_errors="exit_code"><![CDATA[
+#set temperature_data_type = $temperature_data_type_cond.temperature_data_type
+python '$__tool_directory__/validate_temperature_data.py'
+--data_type $temperature_data_type
+#if str($temperature_data_type) == "normals":
+    --input_normals '$temperature_data_type_cond.input_normals'
+#else:
+    --input_actuals '$temperature_data_type_cond.input_actuals'
+#end if
+--output '$output']]></command>
+    <inputs>
+        <conditional name="temperature_data_type_cond">
+            <param name="temperature_data_type" type="select" label="Validate 30 year normals or daily actuals temperature data?">
+                <option value="normals" selected="true">30 year normals</option>
+                <option value="actuals">daily actuals</option>
+            </param>
+            <when value="normals">
+                <param name="input_normals" type="data" format="csv" label="30 year normals CSV file">
+                    <validator type="expression" message="30 year normals temperature data must have 10 columns and 366 rows">value is not None and value.metadata.columns==10 and value.metadata.data_lines==366</validator>
+                </param>
+            </when>
+            <when value="actuals">
+                <param name="input_actuals" type="data" format="csv" label="Daily actuals CSV file">
+                     <validator type="expression" message="Daily actuals temperature data must have 6 columns">value is not None and value.metadata.columns==6</validator>
+                </param>
+            </when>
+        </conditional>
+    </inputs>
+    <outputs>
+        <data name="output" format="csv"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="input_normals" value="30_year_normals.csv" ftype="csv"/>
+            <output name="output" file="30_year_normals.csv" ftype="csv"/>
+        </test>
+        <test>
+            <param name="temperature_data_type" value="actuals"/>
+            <param name="input_actuals" value="daily_actuals.csv" ftype="csv"/>
+            <output name="output" file="daily_actuals.csv" ftype="csv"/>
+        </test>
+    </tests>
+    <help>
+**What it does**
+
+Validates either a 30 year normals temeprature dataset or a daily actuals temperature dataset which are used
+as input to the insect phenology model tool.  The tool will output the input file if it is valid.
+
+-----
+
+**30 year normals columns**
+
+ * stationid
+ * latitude
+ * longitude
+ * elev_m
+ * name
+ * st
+ * mmdd
+ * doy
+ * tmin
+ * tmax
+
+**Daily actuals columns**
+
+ * LATITUDE
+ * LONGITUDE
+ * DATE
+ * DOY
+ * TMIN
+ * TMAX
+    </help>
+    <citations>
+    </citations>
+</tool>