anuga 1.3.5__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (870) hide show
  1. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.py +21 -0
  2. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.pyc +0 -0
  3. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.py +363 -0
  4. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.pyc +0 -0
  5. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.py +6 -0
  6. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.pyc +0 -0
  7. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.py +17 -0
  8. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.pyc +0 -0
  9. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.py +251 -0
  10. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.pyc +0 -0
  11. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.py +483 -0
  12. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.pyc +0 -0
  13. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.py +1080 -0
  14. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.pyc +0 -0
  15. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.py +865 -0
  16. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.pyc +0 -0
  17. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.py +862 -0
  18. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.pyc +0 -0
  19. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.py +2274 -0
  20. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.pyc +0 -0
  21. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.py +1011 -0
  22. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.pyc +0 -0
  23. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory_ext.pyd +0 -0
  24. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.py +1488 -0
  25. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.pyc +0 -0
  26. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh_ext.pyd +0 -0
  27. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_table_ext.pyd +0 -0
  28. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.py +299 -0
  29. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.pyc +0 -0
  30. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain_ext.pyd +0 -0
  31. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.py +2162 -0
  32. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.pyc +0 -0
  33. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity_ext.pyd +0 -0
  34. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.py +321 -0
  35. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.pyc +0 -0
  36. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.py +48 -0
  37. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.pyc +0 -0
  38. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.py +167 -0
  39. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.pyc +0 -0
  40. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/__init__.py +8 -0
  41. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/show_balanced_limiters.py +87 -0
  42. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ermapper.py +189 -0
  43. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_gauge.py +539 -0
  44. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_general_mesh.py +517 -0
  45. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_boundary_conditions.py +439 -0
  46. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_domain.py +907 -0
  47. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ghost.py +52 -0
  48. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_neighbour_mesh.py +1854 -0
  49. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_pmesh2domain.py +219 -0
  50. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_quantity.py +2859 -0
  51. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_region.py +99 -0
  52. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_tag_region.py +258 -0
  53. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_util.py +1632 -0
  54. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.py +928 -0
  55. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.pyc +0 -0
  56. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.py +12 -0
  57. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.pyc +0 -0
  58. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.py +298 -0
  59. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.pyc +0 -0
  60. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection_ext.pyd +0 -0
  61. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.py +27 -0
  62. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.pyc +0 -0
  63. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/__init__.py +8 -0
  64. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/test_advection.py +183 -0
  65. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.py +4 -0
  66. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.pyc +0 -0
  67. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.py +654 -0
  68. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.pyc +0 -0
  69. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.py +21 -0
  70. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.pyc +0 -0
  71. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/__init__.py +8 -0
  72. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/test_alpha_shape.py +402 -0
  73. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.py +46 -0
  74. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.pyc +0 -0
  75. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.py +18 -0
  76. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.pyc +0 -0
  77. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.py +2531 -0
  78. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.pyc +0 -0
  79. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.py +20 -0
  80. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.pyc +0 -0
  81. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.py +21 -0
  82. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.pyc +0 -0
  83. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/__init__.py +8 -0
  84. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/test_caching.py +895 -0
  85. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.py +82 -0
  86. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.pyc +0 -0
  87. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.py +273 -0
  88. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.pyc +0 -0
  89. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.py +6 -0
  90. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.pyc +0 -0
  91. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.py +478 -0
  92. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.pyc +0 -0
  93. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.py +250 -0
  94. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.pyc +0 -0
  95. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.py +128 -0
  96. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.pyc +0 -0
  97. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.py +233 -0
  98. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.pyc +0 -0
  99. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.py +21 -0
  100. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.pyc +0 -0
  101. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/__init__.py +8 -0
  102. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.csv +11 -0
  103. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.lic +17 -0
  104. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.csv +11 -0
  105. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.lic +17 -0
  106. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.csv +11 -0
  107. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.lic +17 -0
  108. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.lic +17 -0
  109. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.xls +0 -0
  110. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_geo_reference.py +716 -0
  111. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_lat_long_UTM_conversion.py +126 -0
  112. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_point.py +125 -0
  113. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_redfearn.py +508 -0
  114. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.py +9 -0
  115. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.pyc +0 -0
  116. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.py +1627 -0
  117. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.pyc +0 -0
  118. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.py +114 -0
  119. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.pyc +0 -0
  120. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.py +362 -0
  121. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.pyc +0 -0
  122. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.py +1630 -0
  123. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.pyc +0 -0
  124. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.py +21 -0
  125. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.pyc +0 -0
  126. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/__init__.py +8 -0
  127. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/culvert_polygons_example.py +38 -0
  128. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.csv +20 -0
  129. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.lic +17 -0
  130. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.csv +20 -0
  131. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.lic +17 -0
  132. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.lic +17 -0
  133. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.xls +0 -0
  134. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/run_culvert_flat_water_lev.py +173 -0
  135. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_class.py +812 -0
  136. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_polygons.py +84 -0
  137. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines.py +586 -0
  138. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_10pct.py +342 -0
  139. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_1pct.py +342 -0
  140. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_10pct.py +338 -0
  141. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_1pct.py +338 -0
  142. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_new_culvert_class.py +810 -0
  143. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.py +9 -0
  144. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.pyc +0 -0
  145. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.py +223 -0
  146. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.pyc +0 -0
  147. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.py +467 -0
  148. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.pyc +0 -0
  149. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.py +21 -0
  150. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.pyc +0 -0
  151. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/__init__.py +8 -0
  152. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_exposure.py +325 -0
  153. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_inundation_damage.py +610 -0
  154. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.py +130 -0
  155. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.pyc +0 -0
  156. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.py +193 -0
  157. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.pyc +0 -0
  158. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.py +54 -0
  159. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.pyc +0 -0
  160. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.py +399 -0
  161. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.pyc +0 -0
  162. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.py +120 -0
  163. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.pyc +0 -0
  164. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.py +266 -0
  165. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.pyc +0 -0
  166. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.py +29 -0
  167. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.pyc +0 -0
  168. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.py +27 -0
  169. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.pyc +0 -0
  170. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.py +293 -0
  171. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.pyc +0 -0
  172. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.py +1552 -0
  173. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.pyc +0 -0
  174. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/__init__.py +8 -0
  175. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_csv.py +413 -0
  176. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_mux.py +1539 -0
  177. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_read_sww.py +350 -0
  178. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_sww.py +560 -0
  179. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_ungenerate.py +283 -0
  180. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_urs.py +217 -0
  181. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.py +92 -0
  182. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.pyc +0 -0
  183. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.py +323 -0
  184. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.pyc +0 -0
  185. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs_ext.pyd +0 -0
  186. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.py +20 -0
  187. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.pyc +0 -0
  188. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.py +213 -0
  189. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.pyc +0 -0
  190. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/calc_grid_values_ext.pyd +0 -0
  191. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.py +165 -0
  192. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.pyc +0 -0
  193. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.py +90 -0
  194. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.pyc +0 -0
  195. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.py +145 -0
  196. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.pyc +0 -0
  197. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.py +357 -0
  198. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.pyc +0 -0
  199. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.py +327 -0
  200. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.pyc +0 -0
  201. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.py +436 -0
  202. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.pyc +0 -0
  203. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.py +367 -0
  204. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.pyc +0 -0
  205. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.py +122 -0
  206. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.pyc +0 -0
  207. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.py +181 -0
  208. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.pyc +0 -0
  209. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.py +29 -0
  210. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.pyc +0 -0
  211. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.py +141 -0
  212. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.pyc +0 -0
  213. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.py +321 -0
  214. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.pyc +0 -0
  215. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.py +550 -0
  216. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.pyc +0 -0
  217. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.py +547 -0
  218. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.pyc +0 -0
  219. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.py +175 -0
  220. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.pyc +0 -0
  221. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/__init__.py +8 -0
  222. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_2pts.py +249 -0
  223. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_csv2sts.py +118 -0
  224. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2array.py +121 -0
  225. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2dem.py +220 -0
  226. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2pts.py +411 -0
  227. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_file_conversion.py +953 -0
  228. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_grd2array.py +270 -0
  229. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_sww2dem.py +1882 -0
  230. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sts.py +2127 -0
  231. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sww.py +628 -0
  232. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.py +202 -0
  233. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.pyc +0 -0
  234. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.py +316 -0
  235. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.pyc +0 -0
  236. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.py +306 -0
  237. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.pyc +0 -0
  238. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.py +71 -0
  239. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.pyc +0 -0
  240. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.py +39 -0
  241. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.pyc +0 -0
  242. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.py +12 -0
  243. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.pyc +0 -0
  244. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.py +367 -0
  245. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.pyc +0 -0
  246. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.py +611 -0
  247. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.pyc +0 -0
  248. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fitsmooth.pyd +0 -0
  249. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.py +127 -0
  250. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.pyc +0 -0
  251. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.py +1144 -0
  252. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.pyc +0 -0
  253. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.py +305 -0
  254. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.pyc +0 -0
  255. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.py +79 -0
  256. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.pyc +0 -0
  257. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.py +131 -0
  258. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.pyc +0 -0
  259. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.py +37 -0
  260. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.pyc +0 -0
  261. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_fit.py +1150 -0
  262. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate.py +1952 -0
  263. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate2d.py +469 -0
  264. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_search_functions.py +236 -0
  265. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.py +66 -0
  266. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.pyc +0 -0
  267. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.py +11 -0
  268. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.pyc +0 -0
  269. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.py +133 -0
  270. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.pyc +0 -0
  271. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.py +1138 -0
  272. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.pyc +0 -0
  273. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_ext.pyd +0 -0
  274. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.py +133 -0
  275. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.pyc +0 -0
  276. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.py +190 -0
  277. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.pyc +0 -0
  278. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.py +27 -0
  279. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.pyc +0 -0
  280. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/__init__.py +8 -0
  281. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_geometry.py +110 -0
  282. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_polygon.py +1994 -0
  283. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.py +9 -0
  284. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.pyc +0 -0
  285. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.py +1698 -0
  286. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.pyc +0 -0
  287. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.py +21 -0
  288. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.pyc +0 -0
  289. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/tests/test_geospatial_data.py +1853 -0
  290. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.py +11 -0
  291. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.pyc +0 -0
  292. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.py +136 -0
  293. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.pyc +0 -0
  294. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.py +14 -0
  295. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.pyc +0 -0
  296. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.py +96 -0
  297. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.pyc +0 -0
  298. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.py +109 -0
  299. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.pyc +0 -0
  300. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.py +22 -0
  301. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.pyc +0 -0
  302. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/__init__.py +8 -0
  303. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m.lic +17 -0
  304. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m_all.lic +17 -0
  305. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_original.lic +17 -0
  306. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.asc +17 -0
  307. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.lic +17 -0
  308. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.asc +16 -0
  309. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.lic +17 -0
  310. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.asc +17 -0
  311. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.lic +17 -0
  312. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.asc +17 -0
  313. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.lic +17 -0
  314. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.asc +17 -0
  315. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.asc +17 -0
  316. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.lic +17 -0
  317. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.lic +17 -0
  318. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.asc +17 -0
  319. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.asc +17 -0
  320. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.lic +17 -0
  321. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.lic +17 -0
  322. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_maxasc.py +150 -0
  323. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_order_boundary.py +397 -0
  324. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.py +4 -0
  325. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.pyc +0 -0
  326. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.py +1073 -0
  327. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.pyc +0 -0
  328. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.py +21 -0
  329. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.pyc +0 -0
  330. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/tests/test_loadASCII.py +544 -0
  331. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.py +4 -0
  332. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.pyc +0 -0
  333. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.py +9 -0
  334. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.pyc +0 -0
  335. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.py +221 -0
  336. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.pyc +0 -0
  337. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine_c_layer.pyd +0 -0
  338. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.py +29 -0
  339. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.pyc +0 -0
  340. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/tests/test_generate_mesh.py +470 -0
  341. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.py +11 -0
  342. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.pyc +0 -0
  343. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.py +125 -0
  344. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.pyc +0 -0
  345. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.py +79 -0
  346. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.pyc +0 -0
  347. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.py +240 -0
  348. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.pyc +0 -0
  349. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.py +142 -0
  350. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.pyc +0 -0
  351. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.py +85 -0
  352. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.pyc +0 -0
  353. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.py +16 -0
  354. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.pyc +0 -0
  355. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.py +495 -0
  356. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.pyc +0 -0
  357. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.py +859 -0
  358. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.pyc +0 -0
  359. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.py +563 -0
  360. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.pyc +0 -0
  361. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator_ext.pyd +0 -0
  362. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.py +87 -0
  363. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.pyc +0 -0
  364. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator_ext.pyd +0 -0
  365. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.py +431 -0
  366. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.pyc +0 -0
  367. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.py +290 -0
  368. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.pyc +0 -0
  369. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.py +148 -0
  370. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.pyc +0 -0
  371. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.py +159 -0
  372. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.pyc +0 -0
  373. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.py +172 -0
  374. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.pyc +0 -0
  375. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.py +158 -0
  376. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.pyc +0 -0
  377. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.py +131 -0
  378. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.pyc +0 -0
  379. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.py +135 -0
  380. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.pyc +0 -0
  381. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.py +170 -0
  382. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.pyc +0 -0
  383. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.py +33 -0
  384. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.pyc +0 -0
  385. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_base_operator.py +51 -0
  386. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_boundary_flux_integral_operator.py +98 -0
  387. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_erosion_operators.py +344 -0
  388. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_kinematic_viscosity_operator.py +1366 -0
  389. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_rate_operators.py +888 -0
  390. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_elevation_operator.py +1034 -0
  391. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_quantity.py +511 -0
  392. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_stage_operator.py +491 -0
  393. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_w_uh_vh_operators.py +211 -0
  394. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.py +31 -0
  395. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.pyc +0 -0
  396. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.py +14 -0
  397. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.pyc +0 -0
  398. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.py +1682 -0
  399. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.pyc +0 -0
  400. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.py +205 -0
  401. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.pyc +0 -0
  402. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.py +467 -0
  403. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.pyc +0 -0
  404. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.py +332 -0
  405. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.pyc +0 -0
  406. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.py +283 -0
  407. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.pyc +0 -0
  408. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.py +207 -0
  409. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.pyc +0 -0
  410. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.py +605 -0
  411. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.pyc +0 -0
  412. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.py +228 -0
  413. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.pyc +0 -0
  414. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.py +281 -0
  415. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.pyc +0 -0
  416. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.py +230 -0
  417. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.pyc +0 -0
  418. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.py +445 -0
  419. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.pyc +0 -0
  420. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.py +959 -0
  421. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.pyc +0 -0
  422. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.py +282 -0
  423. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.pyc +0 -0
  424. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.py +1241 -0
  425. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.pyc +0 -0
  426. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.py +281 -0
  427. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.pyc +0 -0
  428. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.py +205 -0
  429. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.pyc +0 -0
  430. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.py +528 -0
  431. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.pyc +0 -0
  432. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.py +309 -0
  433. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.pyc +0 -0
  434. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.py +100 -0
  435. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.pyc +0 -0
  436. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.py +345 -0
  437. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.pyc +0 -0
  438. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.py +9253 -0
  439. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.pyc +0 -0
  440. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.py +671 -0
  441. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.pyc +0 -0
  442. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.py +389 -0
  443. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.pyc +0 -0
  444. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.py +80 -0
  445. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.pyc +0 -0
  446. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.py +4 -0
  447. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.pyc +0 -0
  448. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.py +24 -0
  449. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.pyc +0 -0
  450. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.py +8 -0
  451. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.pyc +0 -0
  452. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.py +24 -0
  453. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.pyc +0 -0
  454. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.py +1519 -0
  455. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.pyc +0 -0
  456. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.gif +0 -0
  457. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.lic +16 -0
  458. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.gif +0 -0
  459. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.lic +16 -0
  460. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.gif +0 -0
  461. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.lic +16 -0
  462. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.gif +0 -0
  463. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.lic +16 -0
  464. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.gif +0 -0
  465. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.lic +16 -0
  466. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.gif +0 -0
  467. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.lic +16 -0
  468. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.gif +0 -0
  469. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.lic +16 -0
  470. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.gif +0 -0
  471. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.lic +16 -0
  472. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.gif +0 -0
  473. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.lic +16 -0
  474. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.gif +0 -0
  475. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.lic +16 -0
  476. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.gif +0 -0
  477. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.lic +16 -0
  478. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.gif +0 -0
  479. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.lic +16 -0
  480. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.gif +0 -0
  481. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.lic +16 -0
  482. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.gif +0 -0
  483. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.lic +16 -0
  484. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.gif +0 -0
  485. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.lic +16 -0
  486. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.gif +0 -0
  487. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.lic +16 -0
  488. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.gif +0 -0
  489. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.lic +16 -0
  490. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.py +2416 -0
  491. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.pyc +0 -0
  492. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.py +373 -0
  493. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.pyc +0 -0
  494. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.py +130 -0
  495. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.pyc +0 -0
  496. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.py +43 -0
  497. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.pyc +0 -0
  498. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.py +22 -0
  499. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.pyc +0 -0
  500. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh.py +2129 -0
  501. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh_interface.py +988 -0
  502. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_meshquad.py +189 -0
  503. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.py +150 -0
  504. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.pyc +0 -0
  505. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.py +80 -0
  506. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.pyc +0 -0
  507. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.py +69 -0
  508. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.pyc +0 -0
  509. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.py +47 -0
  510. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.pyc +0 -0
  511. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.py +302 -0
  512. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.pyc +0 -0
  513. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.py +6 -0
  514. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.pyc +0 -0
  515. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/metis_ext.pyd +0 -0
  516. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.py +54 -0
  517. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.pyc +0 -0
  518. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/__init__.py +8 -0
  519. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/test_metis.py +141 -0
  520. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.py +49 -0
  521. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.pyc +0 -0
  522. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.py +12 -0
  523. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.pyc +0 -0
  524. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.py +1028 -0
  525. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.pyc +0 -0
  526. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.py +118 -0
  527. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.pyc +0 -0
  528. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.py +1339 -0
  529. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.pyc +0 -0
  530. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.py +101 -0
  531. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.pyc +0 -0
  532. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.py +37 -0
  533. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.pyc +0 -0
  534. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.py +3114 -0
  535. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.pyc +0 -0
  536. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_ext.pyd +0 -0
  537. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swDE1_domain_ext.pyd +0 -0
  538. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.py +576 -0
  539. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.pyc +0 -0
  540. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain_ext.pyd +0 -0
  541. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.py +652 -0
  542. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.pyc +0 -0
  543. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/__init__.py +8 -0
  544. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.csv +46 -0
  545. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.lic +17 -0
  546. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.csv +7855 -0
  547. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.lic +17 -0
  548. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.csv +17 -0
  549. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.lic +17 -0
  550. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_DE1_domain.py +111 -0
  551. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_data_manager.py +879 -0
  552. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_forcing.py +2271 -0
  553. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_loadsave.py +212 -0
  554. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_local_extrapolation_and_flux_updating.py +114 -0
  555. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_most2nc.py +52 -0
  556. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_shallow_water_domain.py +8670 -0
  557. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_swb2_domain.py +106 -0
  558. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_sww_interrogate.py +888 -0
  559. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_system.py +193 -0
  560. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-e-mux2 +0 -0
  561. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-n-mux2 +0 -0
  562. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-z-mux2 +0 -0
  563. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.lic +55 -0
  564. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-e-mux2 +0 -0
  565. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-n-mux2 +0 -0
  566. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-z-mux2 +0 -0
  567. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.lic +55 -0
  568. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-e-mux2 +0 -0
  569. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-n-mux2 +0 -0
  570. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-z-mux2 +0 -0
  571. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.lic +55 -0
  572. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.csv +252 -0
  573. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.lic +25 -0
  574. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.csv +252 -0
  575. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.lic +25 -0
  576. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.csv +252 -0
  577. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.lic +25 -0
  578. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.csv +252 -0
  579. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.lic +25 -0
  580. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.csv +252 -0
  581. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.lic +25 -0
  582. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.csv +252 -0
  583. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.lic +25 -0
  584. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.csv +252 -0
  585. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.lic +25 -0
  586. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.csv +252 -0
  587. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.lic +25 -0
  588. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.csv +252 -0
  589. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.lic +25 -0
  590. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.csv +252 -0
  591. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.lic +25 -0
  592. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.csv +252 -0
  593. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.lic +25 -0
  594. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.csv +252 -0
  595. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.lic +25 -0
  596. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.csv +252 -0
  597. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.lic +25 -0
  598. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.csv +252 -0
  599. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.lic +25 -0
  600. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.csv +252 -0
  601. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.lic +25 -0
  602. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.csv +252 -0
  603. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.lic +25 -0
  604. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.csv +252 -0
  605. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.lic +25 -0
  606. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.csv +252 -0
  607. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.lic +25 -0
  608. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.csv +252 -0
  609. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.lic +25 -0
  610. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.csv +252 -0
  611. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.lic +25 -0
  612. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.csv +252 -0
  613. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.lic +25 -0
  614. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.csv +252 -0
  615. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.lic +25 -0
  616. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.csv +252 -0
  617. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.lic +25 -0
  618. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.csv +252 -0
  619. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.lic +25 -0
  620. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.csv +252 -0
  621. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.lic +25 -0
  622. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.csv +252 -0
  623. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.lic +25 -0
  624. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.csv +252 -0
  625. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.lic +25 -0
  626. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.csv +252 -0
  627. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.lic +25 -0
  628. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.csv +252 -0
  629. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.lic +25 -0
  630. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.csv +252 -0
  631. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.lic +25 -0
  632. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.csv +252 -0
  633. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.lic +25 -0
  634. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.csv +252 -0
  635. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.lic +25 -0
  636. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.csv +252 -0
  637. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.lic +25 -0
  638. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.csv +252 -0
  639. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.lic +25 -0
  640. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.csv +252 -0
  641. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.lic +25 -0
  642. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.csv +252 -0
  643. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.lic +25 -0
  644. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.csv +252 -0
  645. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.lic +25 -0
  646. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.csv +252 -0
  647. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.lic +25 -0
  648. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.csv +252 -0
  649. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.lic +25 -0
  650. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.csv +252 -0
  651. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.lic +25 -0
  652. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.lic +18 -0
  653. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.txt +6 -0
  654. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.csv +252 -0
  655. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.lic +25 -0
  656. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.csv +252 -0
  657. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.lic +25 -0
  658. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.csv +252 -0
  659. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.lic +25 -0
  660. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.csv +252 -0
  661. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.lic +25 -0
  662. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.csv +252 -0
  663. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.lic +25 -0
  664. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.csv +252 -0
  665. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.lic +25 -0
  666. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.csv +252 -0
  667. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.lic +25 -0
  668. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.csv +252 -0
  669. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.lic +25 -0
  670. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.csv +252 -0
  671. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.lic +25 -0
  672. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.csv +252 -0
  673. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.lic +25 -0
  674. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.csv +252 -0
  675. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.lic +25 -0
  676. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.csv +252 -0
  677. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.lic +25 -0
  678. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.csv +252 -0
  679. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.lic +25 -0
  680. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.csv +252 -0
  681. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.lic +25 -0
  682. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.csv +252 -0
  683. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.lic +25 -0
  684. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.csv +252 -0
  685. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.lic +25 -0
  686. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.csv +252 -0
  687. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.lic +25 -0
  688. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.csv +252 -0
  689. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.lic +25 -0
  690. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.csv +252 -0
  691. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.lic +25 -0
  692. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.csv +252 -0
  693. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.lic +25 -0
  694. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.py +65 -0
  695. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.pyc +0 -0
  696. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.py +5 -0
  697. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.pyc +0 -0
  698. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.py +380 -0
  699. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.pyc +0 -0
  700. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.py +245 -0
  701. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.pyc +0 -0
  702. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.py +305 -0
  703. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.pyc +0 -0
  704. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.py +289 -0
  705. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.pyc +0 -0
  706. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.py +146 -0
  707. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.pyc +0 -0
  708. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.py +229 -0
  709. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.pyc +0 -0
  710. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.py +431 -0
  711. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.pyc +0 -0
  712. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.py +169 -0
  713. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.pyc +0 -0
  714. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.py +738 -0
  715. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.pyc +0 -0
  716. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.py +24 -0
  717. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.pyc +0 -0
  718. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.py +757 -0
  719. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.pyc +0 -0
  720. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/hecras_bridge_table.csv +105 -0
  721. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.lic +17 -0
  722. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.tms +0 -0
  723. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.lic +17 -0
  724. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.tms +0 -0
  725. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/test_hydrograph.tms +0 -0
  726. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_box_operator.py +2623 -0
  727. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_pipe_operator.py +482 -0
  728. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_inlet_operator.py +311 -0
  729. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_internal_boundary_functions.py +96 -0
  730. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_riverwall_structure.py +619 -0
  731. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_weir_orifice_trapezoid_operator.py +650 -0
  732. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.py +387 -0
  733. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.pyc +0 -0
  734. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.py +282 -0
  735. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.pyc +0 -0
  736. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.py +13 -0
  737. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.pyc +0 -0
  738. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.py +147 -0
  739. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.pyc +0 -0
  740. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.py +559 -0
  741. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.pyc +0 -0
  742. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.py +347 -0
  743. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.pyc +0 -0
  744. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.py +27 -0
  745. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.pyc +0 -0
  746. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.py +467 -0
  747. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.pyc +0 -0
  748. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.lic +23 -0
  749. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.txt +36 -0
  750. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.lic +23 -0
  751. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.txt +36 -0
  752. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.lic +23 -0
  753. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.txt +36 -0
  754. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/okada_tsunami_octave_95.txt +101 -0
  755. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_eq.py +67 -0
  756. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_okada_tsunami.py +439 -0
  757. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_smf.py +143 -0
  758. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_tsunami_okada.py +303 -0
  759. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.py +1885 -0
  760. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.pyc +0 -0
  761. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.py +11 -0
  762. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.pyc +0 -0
  763. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.py +76 -0
  764. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.pyc +0 -0
  765. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_ext.pyd +0 -0
  766. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.py +327 -0
  767. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.pyc +0 -0
  768. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.py +497 -0
  769. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.pyc +0 -0
  770. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.py +121 -0
  771. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.pyc +0 -0
  772. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.py +404 -0
  773. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.pyc +0 -0
  774. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.py +52 -0
  775. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.pyc +0 -0
  776. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.py +308 -0
  777. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.pyc +0 -0
  778. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.py +117 -0
  779. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.pyc +0 -0
  780. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.py +318 -0
  781. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.pyc +0 -0
  782. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.py +414 -0
  783. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.pyc +0 -0
  784. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.py +77 -0
  785. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.pyc +0 -0
  786. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.py +106 -0
  787. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.pyc +0 -0
  788. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.py +457 -0
  789. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.pyc +0 -0
  790. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.py +16 -0
  791. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.pyc +0 -0
  792. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.py +397 -0
  793. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.pyc +0 -0
  794. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.py +67 -0
  795. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.pyc +0 -0
  796. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.py +26 -0
  797. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.pyc +0 -0
  798. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.py +1237 -0
  799. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.pyc +0 -0
  800. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quad_tree_ext.pyd +0 -0
  801. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.py +612 -0
  802. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.pyc +0 -0
  803. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.py +164 -0
  804. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.pyc +0 -0
  805. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.py +70 -0
  806. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.pyc +0 -0
  807. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.py +39 -0
  808. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.pyc +0 -0
  809. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.py +398 -0
  810. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.pyc +0 -0
  811. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_ext.pyd +0 -0
  812. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_matrix_ext.pyd +0 -0
  813. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.py +1394 -0
  814. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.pyc +0 -0
  815. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.py +820 -0
  816. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.pyc +0 -0
  817. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.py +646 -0
  818. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.pyc +0 -0
  819. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.py +60 -0
  820. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.pyc +0 -0
  821. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.csv +4 -0
  822. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.lic +17 -0
  823. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.lic +17 -0
  824. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.png +0 -0
  825. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.csv +669 -0
  826. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.lic +33 -0
  827. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.csv +5 -0
  828. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.lic +17 -0
  829. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_cg_solve.py +569 -0
  830. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_csv_tools.py +435 -0
  831. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_data_audit.py +393 -0
  832. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_file_utils.py +157 -0
  833. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_function_utils.py +65 -0
  834. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_log_analyser.py +89 -0
  835. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_mem_time_equation.py +47 -0
  836. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_numerical_tools.py +616 -0
  837. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_plot_utils.py +455 -0
  838. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_quantity_setting_functions.py +369 -0
  839. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_sparse.py +215 -0
  840. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_spatialInputUtil.py +418 -0
  841. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_system_tools.py +483 -0
  842. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_xml_tools.py +316 -0
  843. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/util_ext.pyd +0 -0
  844. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.py +219 -0
  845. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.pyc +0 -0
  846. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.py +326 -0
  847. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.pyc +0 -0
  848. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.py +15 -0
  849. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.pyc +0 -0
  850. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.py +1429 -0
  851. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.pyc +0 -0
  852. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.py +24 -0
  853. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.pyc +0 -0
  854. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.py +38 -0
  855. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.pyc +0 -0
  856. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.py +51 -0
  857. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.pyc +0 -0
  858. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.py +17 -0
  859. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.pyc +0 -0
  860. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.py +22 -0
  861. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.pyc +0 -0
  862. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.py +55 -0
  863. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.pyc +0 -0
  864. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.py +11 -0
  865. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.pyc +0 -0
  866. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/PKG-INFO +117 -0
  867. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/SOURCES.txt +1329 -0
  868. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/dependency_links.txt +1 -0
  869. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/not-zip-safe +1 -0
  870. Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/top_level.txt +1 -0
@@ -0,0 +1,1994 @@
1
+ #!/usr/bin/env python
2
+
3
+ """ Test suite to test polygon functionality. """
4
+
5
+ import unittest
6
+ import os
7
+ import numpy as num
8
+ from anuga.utilities.numerical_tools import ensure_numeric
9
+ from anuga.utilities.system_tools import get_pathname_from_package
10
+
11
+ from anuga.geometry.polygon import _poly_xy, separate_points_by_polygon, \
12
+ populate_polygon, polygon_area, is_inside_polygon, \
13
+ read_polygon, point_on_line, point_in_polygon, \
14
+ plot_polygons, outside_polygon, is_outside_polygon, \
15
+ intersection, is_complex, polygon_overlap, not_polygon_overlap,\
16
+ line_intersect, not_line_intersect,\
17
+ is_inside_triangle, interpolate_polyline, inside_polygon, \
18
+ in_and_outside_polygon
19
+
20
+ from anuga.geometry.polygon_function import Polygon_function
21
+ from anuga.coordinate_transforms.geo_reference import Geo_reference
22
+ from anuga.geospatial_data.geospatial_data import Geospatial_data
23
+
24
+
25
+ def simple_function(x, y):
26
+ return x+y
27
+
28
+
29
+ class Test_Polygon(unittest.TestCase):
30
+ def setUp(self):
31
+ pass
32
+
33
+ def tearDown(self):
34
+ pass
35
+
36
+ def test_that_C_extension_compiles(self):
37
+ FN = 'polygon_ext.c'
38
+ try:
39
+ import anuga.geometry.polygon_ext as polygon_ext
40
+ except:
41
+ from anuga.utilities.compile import compile
42
+
43
+ try:
44
+ compile(FN)
45
+ except:
46
+ raise Exception, 'Could not compile %s' %FN
47
+ else:
48
+ import anuga.geometry.polygon_ext as polygon_ext
49
+
50
+ # Polygon stuff
51
+ def test_polygon_function_constants(self):
52
+ p1 = [[0,0], [10,0], [10,10], [0,10]]
53
+ p2 = [[0,0], [10,10], [15,5], [20, 10], [25,0], [30,10], [40,-10]]
54
+
55
+ f = Polygon_function([(p1, 1.0)])
56
+ z = f([5, 5, 27, 35], [5, 9, 8, -5]) # Two first inside p1
57
+ assert num.allclose(z, [1, 1, 0, 0])
58
+
59
+ f = Polygon_function([(p2, 2.0)])
60
+ z = f([5, 5, 27, 35], [5, 9, 8, -5]) # First and last inside p2
61
+ assert num.allclose(z, [2, 0, 0, 2])
62
+
63
+ # Combined
64
+ f = Polygon_function([(p1, 1.0), (p2, 2.0)])
65
+ z = f([5, 5, 27, 35], [5, 9, 8, -5])
66
+ assert num.allclose(z, [2, 1, 0, 2])
67
+
68
+ def test_polygon_function_csvfile(self):
69
+ from os import sep, getenv
70
+
71
+ # Get path where this test is run
72
+ path = get_pathname_from_package('anuga.utilities')
73
+
74
+ # Form absolute filename and read
75
+ filename = os.path.join( path, 'tests', 'data', 'mainland_only.csv')
76
+ p1 = read_polygon(filename)
77
+
78
+ f = Polygon_function([(p1, 10.0)])
79
+ z = f([430000, 480000], [490000, 7720000]) # 1st outside, 2nd inside
80
+
81
+ assert num.allclose(z, [0, 10])
82
+
83
+ def test_read_polygon_complex(self):
84
+ from os import sep, getenv
85
+
86
+ # Get path where this test is run
87
+ path = get_pathname_from_package('anuga.utilities')
88
+
89
+ # Form absolute filename and read
90
+ filename = os.path.join( path, 'tests', 'data', 'complex_polygon.csv')
91
+ # Should cause an Exception
92
+ try:
93
+ p1 = read_polygon(filename)
94
+ except Exception:
95
+ pass
96
+ else:
97
+ raise Exception, 'Closed polygon should have raised exception'
98
+
99
+ def test_read_polygon_not_complex(self):
100
+ from os import sep, getenv
101
+ # This polygon is not self intersecting, but was interpreted as self
102
+ # intersecting by a previous version of the code
103
+
104
+ # Get path where this test is run
105
+ path = get_pathname_from_package('anuga.utilities')
106
+
107
+ # Form absolute filename and read
108
+ filename = os.path.join( path, 'tests', 'data', 'non_complex_polygon.csv')
109
+ # Should cause an Exception
110
+ try:
111
+ p1 = read_polygon(filename)
112
+ except Exception:
113
+ raise Exception, 'Non-complex polygon should not have raised exception'
114
+
115
+
116
+ def test_read_polygon_open_complex(self):
117
+ from os import sep, getenv
118
+
119
+ # Get path where this test is run
120
+ path = get_pathname_from_package('anuga.utilities')
121
+
122
+ # Form absolute filename and read
123
+ filename = os.path.join( path, 'tests', 'data', 'complex_polygon.csv')
124
+ # Should not cause an Exception
125
+ p1 = read_polygon(filename, closed=False)
126
+
127
+ def test_polygon_function_georef(self):
128
+ """Check that georeferencing works"""
129
+
130
+ from anuga.coordinate_transforms.geo_reference import Geo_reference
131
+
132
+ geo = Geo_reference(56, 200, 1000)
133
+
134
+ # Make points 'absolute'
135
+ p1 = [[200,1000], [210,1000], [210,1010], [200,1010]]
136
+ p2 = [[200,1000], [210,1010], [215,1005], [220, 1010], [225,1000],
137
+ [230,1010], [240,990]]
138
+
139
+ f = Polygon_function([(p1, 1.0)], geo_reference=geo)
140
+ z = f([5, 5, 27, 35], [5, 9, 8, -5]) # Two first inside p1
141
+
142
+ assert num.allclose(z, [1, 1, 0, 0])
143
+
144
+ f = Polygon_function([(p2, 2.0)], geo_reference=geo)
145
+ z = f([5, 5, 27, 35], [5, 9, 8, -5]) # First and last inside p2
146
+ assert num.allclose(z, [2, 0, 0, 2])
147
+
148
+ # Combined
149
+ f = Polygon_function([(p1, 1.0), (p2, 2.0)], geo_reference=geo)
150
+ z = f([5, 5, 27, 35], [5, 9, 8, -5])
151
+ assert num.allclose(z, [2, 1, 0, 2])
152
+
153
+ # Check that it would fail without geo
154
+ f = Polygon_function([(p1, 1.0), (p2, 2.0)])
155
+ z = f([5, 5, 27, 35], [5, 9, 8, -5])
156
+ assert not num.allclose(z, [2, 1, 0, 2])
157
+
158
+ def test_polygon_function_callable(self):
159
+ """Check that values passed into Polygon_function can be callable."""
160
+
161
+ p1 = [[0,0], [10,0], [10,10], [0,10]]
162
+ p2 = [[0,0], [10,10], [15,5], [20, 10], [25,0], [30,10], [40,-10]]
163
+
164
+ f = Polygon_function([(p1, simple_function)])
165
+ z = f([5, 5, 27, 35], [5, 9, 8, -5]) # Two first inside p1
166
+ assert num.allclose(z, [10, 14, 0, 0])
167
+
168
+ # Combined
169
+ f = Polygon_function([(p1, simple_function), (p2, 2.0)])
170
+ z = f([5, 5, 27, 35], [5, 9, 8, -5])
171
+ assert num.allclose(z, [2, 14, 0, 2])
172
+
173
+ # Combined w default
174
+ f = Polygon_function([(p1, simple_function), (p2, 2.0)], default = 3.14)
175
+ z = f([5, 5, 27, 35], [5, 9, 8, -5])
176
+ assert num.allclose(z, [2, 14, 3.14, 2])
177
+
178
+ # Combined w default func
179
+ f = Polygon_function([(p1, simple_function), (p2, 2.0)],
180
+ default=simple_function)
181
+ z = f([5, 5, 27, 35], [5, 9, 8, -5])
182
+ assert num.allclose(z, [2, 14, 35, 2])
183
+
184
+ def test_point_on_line(self):
185
+ # Endpoints first
186
+ assert point_on_line([0,0], [[0,0], [1,0]])
187
+ assert point_on_line([1,0], [[0,0], [1,0]])
188
+
189
+ # Endpoints first - non-simple
190
+ assert point_on_line([-0.1,0.0], [[-0.1,0.0], [1.5,0.6]])
191
+ assert point_on_line([1.5,0.6], [[-0.1,0.0], [1.5,0.6]])
192
+
193
+ # Then points on line
194
+ assert point_on_line([0.5,0], [[0,0], [1,0]])
195
+ assert point_on_line([0,0.5], [[0,1], [0,0]])
196
+ assert point_on_line([1,0.5], [[1,1], [1,0]])
197
+ assert point_on_line([0.5,0.5], [[0,0], [1,1]])
198
+
199
+ # Then points not on line
200
+ assert not point_on_line([0.5,0], [[0,1], [1,1]])
201
+ assert not point_on_line([0,0.5], [[0,0], [1,1]])
202
+
203
+ # From real example that failed
204
+ assert not point_on_line([40,50], [[40,20], [40,40]])
205
+
206
+ # From real example that failed
207
+ assert not point_on_line([40,19], [[40,20], [40,40]])
208
+
209
+ # Degenerate line
210
+ assert point_on_line([40,19], [[40,19], [40,19]])
211
+ assert not point_on_line([40,19], [[40,40], [40,40]])
212
+
213
+ def test_is_inside_polygon_main(self):
214
+ # Simplest case: Polygon is the unit square
215
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
216
+
217
+ assert is_inside_polygon((0.5, 0.5), polygon)
218
+ assert not is_inside_polygon((0.5, 1.5), polygon)
219
+ assert not is_inside_polygon((0.5, -0.5), polygon)
220
+ assert not is_inside_polygon((-0.5, 0.5), polygon)
221
+ assert not is_inside_polygon((1.5, 0.5), polygon)
222
+
223
+ # Try point on borders
224
+ assert is_inside_polygon((1., 0.5), polygon, closed=True)
225
+ assert is_inside_polygon((0.5, 1.), polygon, closed=True)
226
+ assert is_inside_polygon((0., 0.5), polygon, closed=True)
227
+ assert is_inside_polygon((0.5, 0.), polygon, closed=True)
228
+
229
+ assert not is_inside_polygon((0.5, 1.), polygon, closed=False)
230
+ assert not is_inside_polygon((0., 0.5), polygon, closed=False)
231
+ assert not is_inside_polygon((0.5, 0.), polygon, closed=False)
232
+ assert not is_inside_polygon((1., 0.5), polygon, closed=False)
233
+
234
+ def test_inside_polygon_main_1(self):
235
+ """test_is_inside_polygon
236
+
237
+ Test fast version of of is_inside_polygon
238
+ """
239
+
240
+ # Simplest case: Polygon is the unit square
241
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
242
+
243
+ assert is_inside_polygon( (0.5, 0.5), polygon )
244
+ assert not is_inside_polygon( (0.5, 1.5), polygon )
245
+ assert not is_inside_polygon( (0.5, -0.5), polygon )
246
+ assert not is_inside_polygon( (-0.5, 0.5), polygon )
247
+ assert not is_inside_polygon( (1.5, 0.5), polygon )
248
+
249
+ # Try point on borders
250
+ assert is_inside_polygon( (1., 0.5), polygon, closed=True)
251
+ assert is_inside_polygon( (0.5, 1), polygon, closed=True)
252
+ assert is_inside_polygon( (0., 0.5), polygon, closed=True)
253
+ assert is_inside_polygon( (0.5, 0.), polygon, closed=True)
254
+
255
+ assert not is_inside_polygon( (0.5, 1), polygon, closed=False)
256
+ assert not is_inside_polygon( (0., 0.5), polygon, closed=False)
257
+ assert not is_inside_polygon( (0.5, 0.), polygon, closed=False)
258
+ assert not is_inside_polygon( (1., 0.5), polygon, closed=False)
259
+
260
+
261
+
262
+ def test_inside_polygon_main_2(self):
263
+ # Simplest case: Polygon is the unit square
264
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
265
+
266
+ # From real example (that failed)
267
+ polygon = [[20,20], [40,20], [40,40], [20,40]]
268
+ points = [[40, 50]]
269
+ res = inside_polygon(points, polygon)
270
+ assert len(res) == 0
271
+
272
+ polygon = [[20.,20.], [40.,20.], [40.,40.], [20.,40.]]
273
+ points = [[25, 25], [30, 20], [40, 50], [90, 20], [40, 90]]
274
+ res = inside_polygon(points, polygon)
275
+ assert len(res) == 2
276
+ assert num.allclose(res, [0,1])
277
+
278
+ # More convoluted and non convex polygon
279
+ polygon = [[0,0], [1,0], [0.5,-1], [2, -1], [2,1], [0,1]]
280
+ assert is_inside_polygon( (0.5, 0.5), polygon )
281
+ assert is_inside_polygon( (1, -0.5), polygon )
282
+ assert is_inside_polygon( (1.5, 0), polygon )
283
+
284
+ assert not is_inside_polygon( (0.5, 1.5), polygon )
285
+ assert not is_inside_polygon( (0.5, -0.5), polygon )
286
+
287
+ assert is_inside_polygon( (0.5, 0.5), polygon )
288
+ assert is_inside_polygon( (1, -0.5), polygon )
289
+ assert is_inside_polygon( (1.5, 0), polygon )
290
+
291
+ assert not is_inside_polygon( (0.5, 1.5), polygon )
292
+ assert not is_inside_polygon( (0.5, -0.5), polygon )
293
+
294
+ # Very convoluted polygon
295
+ polygon = [[0,0], [10,10], [15,5], [20, 10], [25,0], [30,10], [40,-10]]
296
+ assert is_inside_polygon((5, 5), polygon)
297
+ assert is_inside_polygon((17, 7), polygon)
298
+ assert is_inside_polygon((27, 2), polygon)
299
+ assert is_inside_polygon((35, -5), polygon)
300
+ assert not is_inside_polygon((15, 7), polygon)
301
+ assert not is_inside_polygon((24, 3), polygon)
302
+ assert not is_inside_polygon((25, -10), polygon)
303
+
304
+ # Another combination (that failed)
305
+ polygon = [[0,0], [10,0], [10,10], [0,10]]
306
+ assert is_inside_polygon((5, 5), polygon)
307
+ assert is_inside_polygon((7, 7), polygon)
308
+ assert not is_inside_polygon((-17, 7), polygon)
309
+ assert not is_inside_polygon((7, 17), polygon)
310
+ assert not is_inside_polygon((17, 7), polygon)
311
+ assert not is_inside_polygon((27, 8), polygon)
312
+ assert not is_inside_polygon((35, -5), polygon)
313
+
314
+ # Multiple polygons
315
+ polygon = [[0,0], [1,0], [1,1], [0,1], [0,0], [10,10],
316
+ [11,10], [11,11], [10,11], [10,10]]
317
+ assert is_inside_polygon((0.5, 0.5), polygon)
318
+ assert is_inside_polygon((10.5, 10.5), polygon)
319
+
320
+ # FIXME: Fails if point is 5.5, 5.5
321
+ assert not is_inside_polygon((0, 5.5), polygon)
322
+
323
+ # Polygon with a hole
324
+ polygon = [[-1,-1], [2,-1], [2,2], [-1,2], [-1,-1],
325
+ [0,0], [1,0], [1,1], [0,1], [0,0]]
326
+
327
+ assert is_inside_polygon((0, -0.5), polygon)
328
+ assert not is_inside_polygon((0.5, 0.5), polygon)
329
+
330
+ def test_duplicate_points_being_ok(self):
331
+ # Simplest case: Polygon is the unit square
332
+ polygon = [[0,0], [1,0], [1,0], [1,0], [1,1], [0,1], [0,0]]
333
+
334
+ assert is_inside_polygon((0.5, 0.5), polygon)
335
+ assert not is_inside_polygon((0.5, 1.5), polygon)
336
+ assert not is_inside_polygon((0.5, -0.5), polygon)
337
+ assert not is_inside_polygon((-0.5, 0.5), polygon)
338
+ assert not is_inside_polygon((1.5, 0.5), polygon)
339
+
340
+ # Try point on borders
341
+ assert is_inside_polygon((1., 0.5), polygon, closed=True)
342
+ assert is_inside_polygon((0.5, 1), polygon, closed=True)
343
+ assert is_inside_polygon((0., 0.5), polygon, closed=True)
344
+ assert is_inside_polygon((0.5, 0.), polygon, closed=True)
345
+
346
+ assert not is_inside_polygon((0.5, 1), polygon, closed=False)
347
+ assert not is_inside_polygon((0., 0.5), polygon, closed=False)
348
+ assert not is_inside_polygon((0.5, 0.), polygon, closed=False)
349
+ assert not is_inside_polygon((1., 0.5), polygon, closed=False)
350
+
351
+ # From real example
352
+ polygon = [[20,20], [40,20], [40,40], [20,40]]
353
+ points = [[40, 50]]
354
+ res = inside_polygon(points, polygon)
355
+ assert len(res) == 0
356
+
357
+ def test_inside_polygon_vector_version(self):
358
+ # Now try the vector formulation returning indices
359
+ polygon = [[0,0], [1,0], [0.5,-1], [2, -1], [2,1], [0,1]]
360
+ points = [[0.5, 0.5], [1, -0.5], [1.5, 0], [0.5, 1.5], [0.5, -0.5]]
361
+ res = inside_polygon( points, polygon, verbose=False )
362
+ assert num.allclose(res, [0,1,2])
363
+
364
+ def test_outside_polygon(self):
365
+ # unit square
366
+ U = [[0,0], [1,0], [1,1], [0,1]]
367
+
368
+ # evaluate to False as the point 0.5, 0.5 is inside the unit square
369
+ assert not is_outside_polygon([0.5, 0.5], U)
370
+
371
+ # evaluate to True as the point 1.5, 0.5 is outside the unit square
372
+ assert is_outside_polygon([1.5, 0.5], U)
373
+
374
+ indices = outside_polygon([[0.5, 0.5], [1, -0.5], [0.3, 0.2]], U)
375
+ assert num.allclose(indices, [1])
376
+
377
+ # One more test of vector formulation returning indices
378
+ polygon = [[0,0], [1,0], [0.5,-1], [2, -1], [2,1], [0,1]]
379
+ points = [[0.5, 0.5], [1, -0.5], [1.5, 0], [0.5, 1.5], [0.5, -0.5]]
380
+ res = outside_polygon(points, polygon)
381
+ assert num.allclose(res, [3, 4])
382
+
383
+ polygon = [[0,0], [1,0], [0.5,-1], [2, -1], [2,1], [0,1]]
384
+ points = [[0.5, 1.4], [0.5, 0.5], [1, -0.5], [1.5, 0],
385
+ [0.5, 1.5], [0.5, -0.5]]
386
+ res = outside_polygon(points, polygon)
387
+
388
+ assert num.allclose(res, [0, 4, 5])
389
+
390
+ def test_outside_polygon2(self):
391
+ # unit square
392
+ U = [[0,0], [1,0], [1,1], [0,1]]
393
+
394
+ # evaluate to False as the point 0.5, 1.0 is inside the unit square
395
+ assert not outside_polygon([0.5, 1.0], U, closed = True)
396
+
397
+ # evaluate to True as the point 0.5, 1.0 is outside the unit square
398
+ assert is_outside_polygon([0.5, 1.0], U, closed = False)
399
+
400
+ def test_all_outside_polygon(self):
401
+ """Test case where all points are outside poly"""
402
+
403
+ # unit square
404
+ U = [[0,0], [1,0], [1,1], [0,1]]
405
+
406
+ points = [[2,2], [1,3], [-1,1], [0,2]] # All outside
407
+
408
+ indices, count = separate_points_by_polygon(points, U)
409
+ assert count == 0 # None inside
410
+ assert num.allclose(indices, [3, 2, 1, 0])
411
+
412
+ indices = outside_polygon(points, U, closed = True)
413
+ assert num.allclose(indices, [0, 1, 2, 3])
414
+
415
+ indices = inside_polygon(points, U, closed = True)
416
+ assert num.allclose(indices, [])
417
+
418
+ def test_all_inside_polygon(self):
419
+ """Test case where all points are inside poly"""
420
+
421
+ # unit square
422
+ U = [[0,0], [1,0], [1,1], [0,1]]
423
+
424
+ points = [[0.5,0.5], [0.2,0.3], [0,0.5]] # All inside (or on edge)
425
+
426
+ indices, count = separate_points_by_polygon(points, U)
427
+ assert count == 3 # All inside
428
+ assert num.allclose(indices, [0, 1, 2])
429
+
430
+ indices = outside_polygon(points, U, closed=True)
431
+ assert num.allclose(indices, [])
432
+
433
+ indices = inside_polygon(points, U, closed=True)
434
+ assert num.allclose(indices, [0, 1, 2])
435
+
436
+
437
+ def test_separate_points_by_polygon(self):
438
+ # unit square
439
+ U = [[0,0], [1,0], [1,1], [0,1]]
440
+
441
+ indices, count = separate_points_by_polygon([[0.5, 0.5],
442
+ [1, -0.5],
443
+ [0.3, 0.2]],
444
+ U)
445
+ assert num.allclose( indices, [0, 2, 1] )
446
+ assert count == 2
447
+
448
+ # One more test of vector formulation returning indices
449
+ polygon = [[0,0], [1,0], [0.5,-1], [2, -1], [2,1], [0,1]]
450
+ points = [[0.5, 0.5], [1, -0.5], [1.5, 0], [0.5, 1.5], [0.5, -0.5]]
451
+ res, count = separate_points_by_polygon(points, polygon)
452
+
453
+ assert num.allclose(res, [0, 1, 2, 4, 3])
454
+ assert count == 3
455
+
456
+ polygon = [[0,0], [1,0], [0.5,-1], [2, -1], [2,1], [0,1]]
457
+ points = [ [0.5, 1.4], [0.5, 0.5], [1, -0.5], [1.5, 0], [0.5, 1.5], \
458
+ [0.5, -0.5]]
459
+ res, count = separate_points_by_polygon( points, polygon )
460
+
461
+ assert num.allclose( res, [1,2,3,5,4,0] )
462
+ assert count == 3
463
+
464
+
465
+ def test_polygon_overlap(self):
466
+ #rectangular polygon, 2 triangles overlap
467
+ polygon = [[3.,3.],[3.,4.],[5.,4.],[5.,3.]]
468
+ triangles = [[7.,10.],#does not overlap
469
+ [8.,12.],
470
+ [9.,10.],
471
+ [3., 2.],#intersect
472
+ [4., 5.],
473
+ [5., 3.],
474
+ [3., 2.],#intersect
475
+ [4., 5.],
476
+ [5., 2.],
477
+ [0., 1.],#polygon inside triangle
478
+ [5., 50.],
479
+ [10., 1.],
480
+ [3.5, 3.25],#triangle inside polygon
481
+ [4., 3.75],
482
+ [4.5, 3.25]]
483
+
484
+ indices = polygon_overlap(triangles, polygon)
485
+ assert num.allclose([1, 2, 3, 4], indices)
486
+
487
+ #5 sided polygon, 2 triangles overlap
488
+ polygon = [[3.,3.],[3.,4.],[5.,4.],[5.5, 3.5],[5.,3.]]
489
+ triangles = [[7.,10.],#does not overlap
490
+ [8.,12.],
491
+ [9.,10.],
492
+ [3., 2.],#intersect
493
+ [4., 5.],
494
+ [5., 3.],
495
+ [3., 2.],#intersect
496
+ [4., 5.],
497
+ [5., 2.],
498
+ [0., 1.],#polygon inside triangle
499
+ [5., 50.],
500
+ [10., 1.],
501
+ [3.5, 3.25],#triangle inside polygon
502
+ [4., 3.75],
503
+ [4.5, 3.25]]
504
+
505
+ indices = polygon_overlap(triangles, polygon)
506
+ assert num.allclose([1, 2, 3, 4], indices)
507
+
508
+ def test_not_polygon_overlap(self):
509
+ #rectangular polygon, 2 triangles overlap
510
+ polygon = [[3.,3.],[3.,4.],[5.,4.],[5.,3.]]
511
+ triangles = [[7.,10.],#does not overlap
512
+ [8.,12.],
513
+ [9.,10.],
514
+ [3., 2.],#intersect
515
+ [4., 5.],
516
+ [5., 3.],
517
+ [3., 2.],#intersect
518
+ [4., 5.],
519
+ [5., 2.],
520
+ [0., 1.],#polygon inside triangle
521
+ [5., 50.],
522
+ [10., 1.],
523
+ [3.5, 3.25],#triangle inside polygon
524
+ [4., 3.75],
525
+ [4.5, 3.25]]
526
+
527
+ indices = not_polygon_overlap(triangles, polygon)
528
+ assert num.allclose([0], indices)
529
+
530
+ #5 sided polygon, 2 triangles overlap
531
+ polygon = [[3.,3.],[3.,4.],[5.,4.],[5.5, 3.5],[5.,3.]]
532
+ triangles = [[7.,10.],#does not overlap
533
+ [8.,12.],
534
+ [9.,10.],
535
+ [3., 2.],#intersect
536
+ [4., 5.],
537
+ [5., 3.],
538
+ [3., 2.],#intersect
539
+ [4., 5.],
540
+ [5., 2.],
541
+ [0., 1.],#polygon inside triangle
542
+ [5., 50.],
543
+ [10., 1.],
544
+ [3.5, 3.25],#triangle inside polygon
545
+ [4., 3.75],
546
+ [4.5, 3.25]]
547
+
548
+ indices = not_polygon_overlap(triangles, polygon)
549
+ assert num.allclose([0], indices)
550
+
551
+ def test_line_intersect(self):
552
+ #rectangular polygon, 2 triangles overlap
553
+ line = [[3.,3.],[4.,3.]]
554
+ triangles = [[7.,10.],#does not overlap
555
+ [8.,12.],
556
+ [9.,10.],
557
+ [3., 2.],#intersect
558
+ [4., 5.],
559
+ [5., 3.],
560
+ [3., 2.],#intersect
561
+ [4., 5.],
562
+ [5., 2.],
563
+ [0., 1.],#polygon inside triangle
564
+ [5., 50.],
565
+ [10., 1.],
566
+ [3.5, 3.25],#no overlap
567
+ [4., 3.75],
568
+ [4.5, 3.25],
569
+ [2., 3.],#overlap
570
+ [5., 3.],
571
+ [3., 1.]]
572
+
573
+ indices = line_intersect(triangles, line)
574
+ assert num.allclose([1, 2, 3, 5], indices)
575
+
576
+ def test_not_line_intersect(self):
577
+ #rectangular polygon, 2 triangles overlap
578
+ line = [[3.,3.],[4.,3.]]
579
+ triangles = [[7.,10.],#does not overlap
580
+ [8.,12.],
581
+ [9.,10.],
582
+ [3., 2.],#intersect
583
+ [4., 5.],
584
+ [5., 3.],
585
+ [3., 2.],#intersect
586
+ [4., 5.],
587
+ [5., 2.],
588
+ [0., 1.],#polygon inside triangle
589
+ [5., 50.],
590
+ [10., 1.],
591
+ [3.5, 3.25],#no overlap
592
+ [4., 3.75],
593
+ [4.5, 3.25],
594
+ [2., 3.],#overlap
595
+ [5., 3.],
596
+ [3., 1.]]
597
+
598
+ indices = not_line_intersect(triangles, line)
599
+ assert num.allclose([4, 0], indices)
600
+
601
+ def test_is_inside_triangle(self):
602
+ # Simplest case:
603
+ triangle = [[0, 0], [1, 0], [0.5, 1]]
604
+
605
+ assert is_inside_triangle((0.5, 0.5), triangle)
606
+ assert is_inside_triangle((0.9, 0.1), triangle)
607
+ assert not is_inside_triangle((0.5, 1.5), triangle)
608
+ assert not is_inside_triangle((0.5, -0.5), triangle)
609
+ assert not is_inside_triangle((-0.5, 0.5), triangle)
610
+ assert not is_inside_triangle((1.5, 0.5), triangle)
611
+
612
+ # Try point on borders
613
+ assert is_inside_triangle((0.5, 0), triangle, closed=True)
614
+ assert is_inside_triangle((1, 0), triangle, closed=True)
615
+
616
+ assert not is_inside_triangle((0.5, 0), triangle, closed=False)
617
+ assert not is_inside_triangle((1, 0), triangle, closed=False)
618
+
619
+ # Try vertices
620
+ for P in triangle:
621
+ assert is_inside_triangle(P, triangle, closed=True)
622
+ assert not is_inside_triangle(P, triangle, closed=False)
623
+
624
+ # Slightly different
625
+ triangle = [[0, 0.1], [1, -0.2], [0.5, 1]]
626
+ assert is_inside_triangle((0.5, 0.5), triangle)
627
+ assert is_inside_triangle((0.4, 0.1), triangle)
628
+ assert not is_inside_triangle((1, 1), triangle)
629
+
630
+ # Try vertices
631
+ for P in triangle:
632
+ assert is_inside_triangle(P, triangle, closed=True)
633
+ assert not is_inside_triangle(P, triangle, closed=False)
634
+
635
+
636
+ def test_populate_polygon(self):
637
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
638
+ points = populate_polygon(polygon, 5)
639
+
640
+ assert len(points) == 5
641
+ for point in points:
642
+ assert is_inside_polygon(point, polygon)
643
+
644
+ assert is_inside_polygon(point, polygon)
645
+
646
+
647
+ # Very convoluted polygon
648
+ polygon = [[0,0], [10,10], [15,5], [20, 10], [25,0], [30,10], [40,-10]]
649
+ points = populate_polygon(polygon, 5)
650
+ assert len(points) == 5
651
+ for point in points:
652
+ assert is_inside_polygon(point, polygon)
653
+ assert is_inside_polygon(point, polygon)
654
+
655
+
656
+ def test_populate_polygon_with_exclude(self):
657
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
658
+ ex_poly = [[0,0], [0.5,0], [0.5, 0.5], [0,0.5]] # SW quarter
659
+ points = populate_polygon(polygon, 5, exclude=[ex_poly])
660
+
661
+ assert len(points) == 5
662
+ for point in points:
663
+ assert is_inside_polygon(point, polygon)
664
+ assert not is_inside_polygon(point, ex_poly)
665
+
666
+ # overlap
667
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
668
+ ex_poly = [[-1,-1], [0.5,0], [0.5, 0.5], [-1,0.5]]
669
+ points = populate_polygon(polygon, 5, exclude=[ex_poly])
670
+
671
+ assert len(points) == 5
672
+ for point in points:
673
+ assert is_inside_polygon(point, polygon)
674
+ assert not is_inside_polygon(point, ex_poly)
675
+
676
+ # Multiple
677
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
678
+ ex_poly1 = [[0,0], [0.5,0], [0.5, 0.5], [0,0.5]] # SW quarter
679
+ ex_poly2 = [[0.5,0.5], [0.5,1], [1, 1], [1,0.5]] # NE quarter
680
+
681
+ points = populate_polygon(polygon, 20, exclude=[ex_poly1, ex_poly2])
682
+
683
+ assert len(points) == 20
684
+ for point in points:
685
+ assert is_inside_polygon(point, polygon)
686
+ assert not is_inside_polygon(point, ex_poly1)
687
+ assert not is_inside_polygon(point, ex_poly2)
688
+
689
+ # Very convoluted polygon
690
+ polygon = [[0,0], [10,10], [15,5], [20, 10], [25,0], [30,10], [40,-10]]
691
+ ex_poly = [[-1,-1], [5,0], [5, 5], [-1,5]]
692
+ points = populate_polygon(polygon, 20, exclude=[ex_poly])
693
+
694
+ assert len(points) == 20
695
+ for point in points:
696
+ assert is_inside_polygon(point, polygon)
697
+ assert not is_inside_polygon(point, ex_poly), '%s' % str(point)
698
+
699
+ def test_populate_polygon_with_exclude2(self):
700
+ min_outer = 0
701
+ max_outer = 1000
702
+ polygon_outer = [[min_outer,min_outer], [max_outer,min_outer],
703
+ [max_outer,max_outer], [min_outer,max_outer]]
704
+
705
+ delta = 10
706
+ min_inner1 = min_outer + delta
707
+ max_inner1 = max_outer - delta
708
+ inner1_polygon = [[min_inner1,min_inner1], [max_inner1,min_inner1],
709
+ [max_inner1,max_inner1], [min_inner1,max_inner1]]
710
+
711
+ density_inner2 = 1000
712
+ min_inner2 = min_outer + 2*delta
713
+ max_inner2 = max_outer - 2*delta
714
+ inner2_polygon = [[min_inner2,min_inner2], [max_inner2,min_inner2],
715
+ [max_inner2,max_inner2], [min_inner2,max_inner2]]
716
+
717
+ points = populate_polygon(polygon_outer, 20,
718
+ exclude=[inner1_polygon, inner2_polygon])
719
+
720
+ assert len(points) == 20
721
+ for point in points:
722
+ assert is_inside_polygon(point, polygon_outer)
723
+ assert not is_inside_polygon(point, inner1_polygon)
724
+ assert not is_inside_polygon(point, inner2_polygon)
725
+
726
+ # Very convoluted polygon
727
+ polygon = [[0,0], [10,10], [15,5], [20, 10], [25,0], [30,10], [40,-10]]
728
+ ex_poly = [[-1,-1], [5,0], [5, 5], [-1,5]]
729
+ points = populate_polygon(polygon, 20, exclude=[ex_poly])
730
+
731
+ assert len(points) == 20
732
+ for point in points:
733
+ assert is_inside_polygon(point, polygon)
734
+ assert not is_inside_polygon(point, ex_poly), '%s' % str(point)
735
+
736
+ def test_point_in_polygon(self):
737
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
738
+ point = point_in_polygon(polygon)
739
+ assert is_inside_polygon(point, polygon)
740
+
741
+ # this may get into a vicious loop
742
+ # polygon = [[1e32,1e54], [1,0], [1,1], [0,1]]
743
+
744
+ polygon = [[1e15,1e7], [1,0], [1,1], [0,1]]
745
+ point = point_in_polygon(polygon)
746
+ assert is_inside_polygon(point, polygon)
747
+
748
+ polygon = [[0,0], [1,0], [1,1], [1e8,1e8]]
749
+ point = point_in_polygon(polygon)
750
+ assert is_inside_polygon(point, polygon)
751
+
752
+ polygon = [[1e32,1e54], [-1e32,1e54], [1e32,-1e54]]
753
+ point = point_in_polygon(polygon)
754
+ assert is_inside_polygon(point, polygon)
755
+
756
+ polygon = [[1e18,1e15], [1,0], [0,1]]
757
+ point = point_in_polygon(polygon)
758
+ assert is_inside_polygon(point, polygon)
759
+
760
+ def test_in_and_outside_polygon_main(self):
761
+ # Simplest case: Polygon is the unit square
762
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
763
+
764
+ inside, outside = in_and_outside_polygon((0.5, 0.5), polygon)
765
+ assert inside[0] == 0
766
+ assert len(outside) == 0
767
+
768
+ inside, outside = in_and_outside_polygon((1., 0.5), polygon,
769
+ closed=True)
770
+ assert inside[0] == 0
771
+ assert len(outside) == 0
772
+
773
+ inside, outside = in_and_outside_polygon((1., 0.5), polygon,
774
+ closed=False)
775
+ assert len(inside) == 0
776
+ assert outside[0] == 0
777
+
778
+ points = [(1., 0.25),(1., 0.75)]
779
+ inside, outside = in_and_outside_polygon(points, polygon, closed=True)
780
+ assert num.alltrue(inside == [0,1])
781
+ assert len(outside) == 0
782
+
783
+ inside, outside = in_and_outside_polygon(points, polygon, closed=False)
784
+ assert len(inside) == 0
785
+ assert num.alltrue(outside == [0,1])
786
+
787
+ points = [(100., 0.25), (0.5, 0.5) ]
788
+ inside, outside = in_and_outside_polygon(points, polygon)
789
+ assert num.alltrue(inside == [1])
790
+ assert outside[0] == 0
791
+
792
+ points = [(100., 0.25),(0.5, 0.5), (39,20), (0.6,0.7),(56,43),(67,90)]
793
+ inside, outside = in_and_outside_polygon(points, polygon)
794
+ assert num.alltrue(inside == [1, 3])
795
+ assert num.alltrue(outside == [0, 2, 4, 5])
796
+
797
+ def test_intersection1(self):
798
+ line0 = [[-1,0], [1,0]]
799
+ line1 = [[0,-1], [0,1]]
800
+
801
+ status, value = intersection(line0, line1)
802
+ assert status == 1
803
+ assert num.allclose(value, [0.0, 0.0])
804
+
805
+ def test_intersection2(self):
806
+ line0 = [[0,0], [24,12]]
807
+ line1 = [[0,12], [24,0]]
808
+
809
+ status, value = intersection(line0, line1)
810
+ assert status == 1
811
+ assert num.allclose(value, [12.0, 6.0])
812
+
813
+ # Swap direction of one line
814
+ line1 = [[24,0], [0,12]]
815
+
816
+ status, value = intersection(line0, line1)
817
+ assert status == 1
818
+ assert num.allclose(value, [12.0, 6.0])
819
+
820
+ # Swap order of lines
821
+ status, value = intersection(line1, line0)
822
+ assert status == 1
823
+ assert num.allclose(value, [12.0, 6.0])
824
+
825
+ def test_intersection3(self):
826
+ line0 = [[0,0], [24,12]]
827
+ line1 = [[0,17], [24,0]]
828
+
829
+ status, value = intersection(line0, line1)
830
+ assert status == 1
831
+ assert num.allclose(value, [14.068965517, 7.0344827586])
832
+
833
+ # Swap direction of one line
834
+ line1 = [[24,0], [0,17]]
835
+
836
+ status, value = intersection(line0, line1)
837
+ assert status == 1
838
+ assert num.allclose(value, [14.068965517, 7.0344827586])
839
+
840
+ # Swap order of lines
841
+ status, value = intersection(line1, line0)
842
+ assert status == 1
843
+ assert num.allclose(value, [14.068965517, 7.0344827586])
844
+
845
+ def test_intersection_endpoints(self):
846
+ """test_intersection_endpoints(self):
847
+
848
+ Test that coinciding endpoints are picked up
849
+ """
850
+
851
+ line0 = [[0,0], [1,1]]
852
+ line1 = [[1,1], [2,1]]
853
+
854
+ status, value = intersection(line0, line1)
855
+ assert status == 1
856
+ assert num.allclose(value, [1.0, 1.0])
857
+
858
+ line0 = [[1,1], [2,0]]
859
+ line1 = [[1,1], [2,1]]
860
+
861
+ status, value = intersection(line0, line1)
862
+ assert status == 1
863
+ assert num.allclose(value, [1.0, 1.0])
864
+
865
+ # This function is a helper function for
866
+ # the test_intersection_bug_20081110_?() set of tests.
867
+ # This function tests all parallel line cases for 4 collinear points.
868
+ # This function should never be run directly by the unittest code.
869
+ def helper_parallel_intersection_code(self, P1, P2, P3, P4):
870
+ # lines in same direction, no overlap
871
+ # 0: ---->----
872
+ # 1: --------->-----------
873
+ line0 = [P1, P2]
874
+ line1 = [P3, P4]
875
+ status, value = intersection(line0, line1)
876
+ self.failIf(status!=3, 'Expected status 3, got status=%s, value=%s' %
877
+ (str(status), str(value)))
878
+ self.assertTrue(value is None, 'Expected value of None, got %s' %
879
+ str(value))
880
+
881
+ # lines in same direction, no overlap
882
+ # 0: ----<----
883
+ # 1: ---------<-----------
884
+ line0 = [P2, P1]
885
+ line1 = [P4, P3]
886
+ status, value = intersection(line0, line1)
887
+ self.failIf(status!=3, 'Expected status 3, got status=%s, value=%s' %
888
+ (str(status), str(value)))
889
+ self.assertTrue(value is None, 'Expected value of None, got %s' %
890
+ str(value))
891
+
892
+ # lines in opposite direction, no overlap
893
+ # 0: ----<----
894
+ # 1: --------->-----------
895
+ line0 = [P2, P1]
896
+ line1 = [P3, P4]
897
+ status, value = intersection(line0, line1)
898
+ self.failIf(status!=3, 'Expected status 3, got status=%s, value=%s' %
899
+ (str(status), str(value)))
900
+ self.assertTrue(value is None, 'Expected value of None, got %s' %
901
+ str(value))
902
+
903
+ # lines in opposite direction, no overlap
904
+ # 0: ---->----
905
+ # 1: ---------<-----------
906
+ line0 = [P1, P2]
907
+ line1 = [P4, P3]
908
+ status, value = intersection(line0, line1)
909
+ self.failIf(status!=3, 'Expected status 3, got status=%s, value=%s' %
910
+ (str(status), str(value)))
911
+ self.assertTrue(value is None, 'Expected value of None, got %s' %
912
+ str(value))
913
+
914
+ # ----------------------------------------------------------------------
915
+
916
+ # line0 fully within line1, same direction
917
+ # 0: ---->----
918
+ # 1: --------->-----------
919
+ # value should be line0:
920
+ # ---->----
921
+ line0 = [P2, P3]
922
+ line1 = [P1, P4]
923
+ status, value = intersection(line0, line1)
924
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
925
+ (str(status), str(value)))
926
+ self.assertTrue(num.allclose(value, line0))
927
+
928
+ # line0 fully within line1, same direction
929
+ # 0: ----<----
930
+ # 1: ---------<-----------
931
+ # value should be line0:
932
+ # ----<----
933
+ line0 = [P3, P2]
934
+ line1 = [P4, P1]
935
+ status, value = intersection(line0, line1)
936
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
937
+ (str(status), str(value)))
938
+ self.assertTrue(num.allclose(value, line0))
939
+
940
+ # line0 fully within line1, opposite direction
941
+ # 0: ----<----
942
+ # 1: --------->-----------
943
+ # value should be line0:
944
+ # ----<----
945
+ line0 = [P3, P2]
946
+ line1 = [P1, P4]
947
+ status, value = intersection(line0, line1)
948
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
949
+ (str(status), str(value)))
950
+ self.assertTrue(num.allclose(value, line0))
951
+
952
+ # line0 fully within line1, opposite direction
953
+ # 0: ---->----
954
+ # 1: ---------<-----------
955
+ # value should be line0:
956
+ # ---->----
957
+ line0 = [P2, P3]
958
+ line1 = [P4, P1]
959
+ status, value = intersection(line0, line1)
960
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
961
+ (str(status), str(value)))
962
+ self.assertTrue(num.allclose(value, line0))
963
+
964
+ # ----------------------------------------------------------------------
965
+
966
+ # line1 fully within line0, same direction
967
+ # 0: --------->-----------
968
+ # 1: ---->----
969
+ # value should be line1:
970
+ # ---->----
971
+ line0 = [P1, P4]
972
+ line1 = [P2, P3]
973
+ status, value = intersection(line0, line1)
974
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
975
+ (str(status), str(value)))
976
+ self.assertTrue(num.allclose(value, line1))
977
+
978
+ # line1 fully within line0, same direction
979
+ # 0: ---------<-----------
980
+ # 1: ----<----
981
+ # value should be line1:
982
+ # ----<----
983
+ line0 = [P4, P1]
984
+ line1 = [P3, P2]
985
+ status, value = intersection(line0, line1)
986
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
987
+ (str(status), str(value)))
988
+ self.assertTrue(num.allclose(value, line1))
989
+
990
+ # line1 fully within line0, opposite direction
991
+ # 0: ---------<-----------
992
+ # 1: ---->----
993
+ # value should be line1:
994
+ # ---->----
995
+ line0 = [P4, P1]
996
+ line1 = [P2, P3]
997
+ status, value = intersection(line0, line1)
998
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
999
+ (str(status), str(value)))
1000
+ self.assertTrue(num.allclose(value, line1))
1001
+
1002
+ # line1 fully within line0, opposite direction
1003
+ # 0: --------->-----------
1004
+ # 1: ----<----
1005
+ # value should be line1:
1006
+ # ----<----
1007
+ line0 = [P1, P4]
1008
+ line1 = [P3, P2]
1009
+ status, value = intersection(line0, line1)
1010
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1011
+ (str(status), str(value)))
1012
+ self.assertTrue(num.allclose(value, line1))
1013
+
1014
+ # ----------------------------------------------------------------------
1015
+
1016
+ # line in same direction, partial overlap
1017
+ # 0: ----->-----
1018
+ # 1: ------->--------
1019
+ # value should be segment line1_start->line0_end:
1020
+ # --->----
1021
+ line0 = [P1, P3]
1022
+ line1 = [P2, P4]
1023
+ status, value = intersection(line0, line1)
1024
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1025
+ (str(status), str(value)))
1026
+ self.assertTrue(num.allclose(value, [line1[0],line0[1]]))
1027
+
1028
+ # line in same direction, partial overlap
1029
+ # 0: -----<-----
1030
+ # 1: -------<--------
1031
+ # value should be segment line0_start->line1_end:
1032
+ # ---<----
1033
+ line0 = [P3, P1]
1034
+ line1 = [P4, P2]
1035
+ status, value = intersection(line0, line1)
1036
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1037
+ (str(status), str(value)))
1038
+ self.assertTrue(num.allclose(value, [line0[0],line1[1]]))
1039
+
1040
+ # line in opposite direction, partial overlap
1041
+ # 0: -----<-----
1042
+ # 1: ------->--------
1043
+ # value should be segment line0_start->line1_start:
1044
+ # ---<----
1045
+ line0 = [P3, P1]
1046
+ line1 = [P2, P4]
1047
+ status, value = intersection(line0, line1)
1048
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1049
+ (str(status), str(value)))
1050
+ self.assertTrue(num.allclose(value, [line0[0],line1[0]]))
1051
+
1052
+ # line in opposite direction, partial overlap
1053
+ # 0: ----->-----
1054
+ # 1: -------<--------
1055
+ # value should be segment line1_end->line0_end:
1056
+ # --->----
1057
+ line0 = [P1, P3]
1058
+ line1 = [P4, P2]
1059
+ status, value = intersection(line0, line1)
1060
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1061
+ (str(status), str(value)))
1062
+ self.assertTrue(num.allclose(value, [line1[1],line0[1]]))
1063
+
1064
+ # ----------------------------------------------------------------------
1065
+
1066
+ # line in same direction, partial overlap
1067
+ # 0: ------>------
1068
+ # 1: ------>------
1069
+ # value should be segment line0_start->line1_end:
1070
+ # --->----
1071
+ line0 = [P2, P4]
1072
+ line1 = [P1, P3]
1073
+ status, value = intersection(line0, line1)
1074
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1075
+ (str(status), str(value)))
1076
+ self.assertTrue(num.allclose(value, [line0[0],line1[1]]))
1077
+
1078
+ # line in same direction, partial overlap
1079
+ # 0: ------<------
1080
+ # 1: ------<------
1081
+ # value should be segment line1_start->line0_end:
1082
+ # ----<-----
1083
+ line0 = [P4, P2]
1084
+ line1 = [P3, P1]
1085
+ status, value = intersection(line0, line1)
1086
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1087
+ (str(status), str(value)))
1088
+ self.assertTrue(num.allclose(value, [line1[0],line0[1]]))
1089
+
1090
+ # line in opposite direction, partial overlap
1091
+ # 0: ------<------
1092
+ # 1: ----->------
1093
+ # value should be segment line1_end->line0_end:
1094
+ # --->----
1095
+ line0 = [P4, P2]
1096
+ line1 = [P1, P3]
1097
+ status, value = intersection(line0, line1)
1098
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1099
+ (str(status), str(value)))
1100
+ self.assertTrue(num.allclose(value, [line1[1],line0[1]]))
1101
+
1102
+ # line in opposite direction, partial overlap
1103
+ # 0: ------>------
1104
+ # 1: -----<------
1105
+ # value should be segment line0_start->line1_start:
1106
+ # ---<----
1107
+ line0 = [P2, P4]
1108
+ line1 = [P3, P1]
1109
+ status, value = intersection(line0, line1)
1110
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1111
+ (str(status), str(value)))
1112
+ self.assertTrue(num.allclose(value, [line0[0],line1[0]]))
1113
+
1114
+ # ----------------------------------------------------------------------
1115
+
1116
+ # line in same direction, same left point, line1 longer
1117
+ # 0: ----->------
1118
+ # 1: ------->--------
1119
+ # value should be line0:
1120
+ # ----->------
1121
+ line0 = [P1, P3]
1122
+ line1 = [P1, P4]
1123
+ status, value = intersection(line0, line1)
1124
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1125
+ (str(status), str(value)))
1126
+ self.assertTrue(num.allclose(value, line0))
1127
+
1128
+ # line in same direction, same left point, line1 longer
1129
+ # 0: -----<------
1130
+ # 1: -------<--------
1131
+ # value should be line0:
1132
+ # -----<------
1133
+ line0 = [P3, P1]
1134
+ line1 = [P4, P1]
1135
+ status, value = intersection(line0, line1)
1136
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1137
+ (str(status), str(value)))
1138
+ self.assertTrue(num.allclose(value, line0))
1139
+
1140
+ # line in opposite direction, same left point, line1 longer
1141
+ # 0: ----->------
1142
+ # 1: -------<--------
1143
+ # value should be line0:
1144
+ # ----->------
1145
+ line0 = [P1, P3]
1146
+ line1 = [P4, P1]
1147
+ status, value = intersection(line0, line1)
1148
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1149
+ (str(status), str(value)))
1150
+ self.assertTrue(num.allclose(value, line0))
1151
+
1152
+ # line in opposite direction, same start point, line1 longer
1153
+ # 0: -----<------
1154
+ # 1: ------->--------
1155
+ # value should be line0:
1156
+ # -----<------
1157
+ line0 = [P3, P1]
1158
+ line1 = [P1, P4]
1159
+ status, value = intersection(line0, line1)
1160
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1161
+ (str(status), str(value)))
1162
+ self.assertTrue(num.allclose(value, line0))
1163
+
1164
+ # ----------------------------------------------------------------------
1165
+
1166
+ # line in same direction, same left point, same right point
1167
+ # 0: ------->--------
1168
+ # 1: ------->--------
1169
+ # value should be line0 or line1:
1170
+ # ------->--------
1171
+ line0 = [P1, P3]
1172
+ line1 = [P1, P3]
1173
+ status, value = intersection(line0, line1)
1174
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1175
+ (str(status), str(value)))
1176
+ self.assertTrue(num.allclose(value, line0))
1177
+
1178
+ # line in same direction, same left point, same right point
1179
+ # 0: -------<--------
1180
+ # 1: -------<--------
1181
+ # value should be line0 (or line1):
1182
+ # -------<--------
1183
+ line0 = [P3, P1]
1184
+ line1 = [P3, P1]
1185
+ status, value = intersection(line0, line1)
1186
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1187
+ (str(status), str(value)))
1188
+ self.assertTrue(num.allclose(value, line0))
1189
+
1190
+ # line in opposite direction, same left point, same right point
1191
+ # 0: ------->--------
1192
+ # 1: -------<--------
1193
+ # value should be line0:
1194
+ # ------->--------
1195
+ line0 = [P1, P3]
1196
+ line1 = [P3, P1]
1197
+ status, value = intersection(line0, line1)
1198
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1199
+ (str(status), str(value)))
1200
+ self.assertTrue(num.allclose(value, line0))
1201
+
1202
+ # line in opposite direction, same left point, same right point
1203
+ # 0: -------<--------
1204
+ # 1: ------->--------
1205
+ # value should be line0:
1206
+ # -------<--------
1207
+ line0 = [P3, P1]
1208
+ line1 = [P1, P3]
1209
+ status, value = intersection(line0, line1)
1210
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1211
+ (str(status), str(value)))
1212
+ self.assertTrue(num.allclose(value, line0))
1213
+
1214
+ # ----------------------------------------------------------------------
1215
+
1216
+ # line in same direction, same right point, line1 longer
1217
+ # 0: ----->------
1218
+ # 1: ------->--------
1219
+ # value should be line0:
1220
+ # ----->------
1221
+ line0 = [P2, P4]
1222
+ line1 = [P1, P4]
1223
+ status, value = intersection(line0, line1)
1224
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1225
+ (str(status), str(value)))
1226
+ self.assertTrue(num.allclose(value, line0))
1227
+
1228
+ # line in same direction, same right point, line1 longer
1229
+ # 0: -----<------
1230
+ # 1: -------<--------
1231
+ # value should be line0:
1232
+ # -----<------
1233
+ line0 = [P4, P2]
1234
+ line1 = [P4, P1]
1235
+ status, value = intersection(line0, line1)
1236
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1237
+ (str(status), str(value)))
1238
+ self.assertTrue(num.allclose(value, line0))
1239
+
1240
+ # line in opposite direction, same right point, line1 longer
1241
+ # 0: ----->------
1242
+ # 1: -------<--------
1243
+ # value should be line0:
1244
+ # ----->------
1245
+ line0 = [P2, P4]
1246
+ line1 = [P4, P1]
1247
+ status, value = intersection(line0, line1)
1248
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1249
+ (str(status), str(value)))
1250
+ self.assertTrue(num.allclose(value, line0))
1251
+
1252
+ # line in opposite direction, same right point, line1 longer
1253
+ # 0: -----<------
1254
+ # 1: ------->--------
1255
+ # value should be line0:
1256
+ # -----<------
1257
+ line0 = [P4, P2]
1258
+ line1 = [P1, P4]
1259
+ status, value = intersection(line0, line1)
1260
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1261
+ (str(status), str(value)))
1262
+ self.assertTrue(num.allclose(value, line0))
1263
+
1264
+ # ----------------------------------------------------------------------
1265
+
1266
+ # line in same direction, same left point, line0 longer
1267
+ # 0: ------->--------
1268
+ # 1: ----->------
1269
+ # value should be line1:
1270
+ # ----->------
1271
+ line0 = [P1, P4]
1272
+ line1 = [P1, P3]
1273
+ status, value = intersection(line0, line1)
1274
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1275
+ (str(status), str(value)))
1276
+ self.assertTrue(num.allclose(value, line1))
1277
+
1278
+ # line in same direction, same left point, line0 longer
1279
+ # 0: -------<--------
1280
+ # 1: -----<------
1281
+ # value should be line1:
1282
+ # -----<------
1283
+ line0 = [P4, P1]
1284
+ line1 = [P3, P1]
1285
+ status, value = intersection(line0, line1)
1286
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1287
+ (str(status), str(value)))
1288
+ self.assertTrue(num.allclose(value, line1))
1289
+
1290
+ # line in opposite direction, same left point, line0 longer
1291
+ # 0: ------->--------
1292
+ # 1: -----<------
1293
+ # value should be line1:
1294
+ # -----<------
1295
+ line0 = [P1, P4]
1296
+ line1 = [P3, P1]
1297
+ status, value = intersection(line0, line1)
1298
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1299
+ (str(status), str(value)))
1300
+ self.assertTrue(num.allclose(value, line1))
1301
+
1302
+ # line in opposite direction, same left point, line0 longer
1303
+ # 0: -------<--------
1304
+ # 1: ----->------
1305
+ # value should be line1:
1306
+ # ----->------
1307
+ line0 = [P4, P1]
1308
+ line1 = [P1, P3]
1309
+ status, value = intersection(line0, line1)
1310
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1311
+ (str(status), str(value)))
1312
+ self.assertTrue(num.allclose(value, line1))
1313
+
1314
+ # ----------------------------------------------------------------------
1315
+
1316
+ # line in same direction, same right point, line0 longer
1317
+ # 0: ------->--------
1318
+ # 1: ----->------
1319
+ # value should be line1:
1320
+ # ----->------
1321
+ line0 = [P1, P4]
1322
+ line1 = [P2, P4]
1323
+ status, value = intersection(line0, line1)
1324
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1325
+ (str(status), str(value)))
1326
+ self.assertTrue(num.allclose(value, line1))
1327
+
1328
+ # line in same direction, same right point, line0 longer
1329
+ # 0: -------<--------
1330
+ # 1: -----<------
1331
+ # value should be line1:
1332
+ # -----<------
1333
+ line0 = [P4, P1]
1334
+ line1 = [P4, P2]
1335
+ status, value = intersection(line0, line1)
1336
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1337
+ (str(status), str(value)))
1338
+ self.assertTrue(num.allclose(value, line1))
1339
+
1340
+ # line in opposite direction, same right point, line0 longer
1341
+ # 0: ------->--------
1342
+ # 1: -----<------
1343
+ # value should be line1:
1344
+ # -----<------
1345
+ line0 = [P1, P4]
1346
+ line1 = [P4, P2]
1347
+ status, value = intersection(line0, line1)
1348
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1349
+ (str(status), str(value)))
1350
+ self.assertTrue(num.allclose(value, line1))
1351
+
1352
+ # line in opposite direction, same right point, line0 longer
1353
+ # 0: -------<--------
1354
+ # 1: ----->------
1355
+ # value should be line1:
1356
+ # ----->------
1357
+ line0 = [P4, P1]
1358
+ line1 = [P2, P4]
1359
+ status, value = intersection(line0, line1)
1360
+ self.failIf(status!=2, 'Expected status 2, got status=%s, value=%s' %
1361
+ (str(status), str(value)))
1362
+ self.assertTrue(num.allclose(value, line1))
1363
+
1364
+
1365
+ def test_intersection_bug_20081110_TR(self):
1366
+ """test_intersection_bug_20081110(self)
1367
+
1368
+ Test all cases in top-right quadrant
1369
+ """
1370
+
1371
+ # define 4 collinear points in top-right quadrant
1372
+ # P1---P2---P3---P4
1373
+ P1 = [1.0, 1.0]
1374
+ P2 = [2.0, 2.0]
1375
+ P3 = [3.0, 3.0]
1376
+ P4 = [4.0, 4.0]
1377
+
1378
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1379
+ P1 = [1.0, 1.0+1.0e-9]
1380
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1381
+ P1 = [1.0, 1.0]
1382
+ P2 = [2.0, 2.0+1.0e-9]
1383
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1384
+ P2 = [2.0, 2.0]
1385
+ P3 = [3.0, 3.0+1.0e-9]
1386
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1387
+ P3 = [3.0, 3.0]
1388
+ P4 = [4.0, 4.0+1.0e-9]
1389
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1390
+
1391
+ def test_intersection_bug_20081110_TL(self):
1392
+ """test_intersection_bug_20081110(self)
1393
+
1394
+ Test all cases in top-left quadrant
1395
+ """
1396
+
1397
+ # define 4 collinear points in top-left quadrant
1398
+ # P1---P2---P3---P4
1399
+ P1 = [-1.0, 1.0]
1400
+ P2 = [-2.0, 2.0]
1401
+ P3 = [-3.0, 3.0]
1402
+ P4 = [-4.0, 4.0]
1403
+
1404
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1405
+ P1 = [-1.0, 1.0+1.0e-9]
1406
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1407
+ P1 = [-1.0, 1.0]
1408
+ P2 = [-2.0, 2.0+1.0e-9]
1409
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1410
+ P2 = [-2.0, 2.0]
1411
+ P3 = [-3.0, 3.0+1.0e-9]
1412
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1413
+ P3 = [-3.0, 3.0]
1414
+ P4 = [-4.0, 4.0+1.0e-9]
1415
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1416
+
1417
+ def test_intersection_bug_20081110_BL(self):
1418
+ """test_intersection_bug_20081110(self)
1419
+
1420
+ Test all cases in bottom-left quadrant
1421
+ """
1422
+
1423
+ # define 4 collinear points in bottom-left quadrant
1424
+ # P1---P2---P3---P4
1425
+ P1 = [-1.0, -1.0]
1426
+ P2 = [-2.0, -2.0]
1427
+ P3 = [-3.0, -3.0]
1428
+ P4 = [-4.0, -4.0]
1429
+
1430
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1431
+ P1 = [-1.0, -1.0+1.0e-9]
1432
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1433
+ P1 = [-1.0, -1.0]
1434
+ P2 = [-2.0, -2.0+1.0e-9]
1435
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1436
+ P2 = [-2.0, -2.0]
1437
+ P3 = [-3.0, -3.0+1.0e-9]
1438
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1439
+ P3 = [-3.0, -3.0]
1440
+ P4 = [-4.0, -4.0+1.0e-9]
1441
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1442
+
1443
+ def test_intersection_bug_20081110_BR(self):
1444
+ """test_intersection_bug_20081110(self)
1445
+
1446
+ Test all cases in bottom-right quadrant
1447
+ """
1448
+
1449
+ # define 4 collinear points in bottom-right quadrant
1450
+ # P1---P2---P3---P4
1451
+ P1 = [1.0, -1.0]
1452
+ P2 = [2.0, -2.0]
1453
+ P3 = [3.0, -3.0]
1454
+ P4 = [4.0, -4.0]
1455
+
1456
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1457
+ P1 = [1.0, -1.0+1.0e-9]
1458
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1459
+ P1 = [1.0, -1.0]
1460
+ P2 = [2.0, -2.0+1.0e-9]
1461
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1462
+ P2 = [2.0, -2.0]
1463
+ P3 = [3.0, -3.0+1.0e-9]
1464
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1465
+ P3 = [3.0, -3.0]
1466
+ P4 = [4.0, -4.0+1.0e-9]
1467
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1468
+
1469
+ def test_intersection_bug_20081110_TR_TL(self):
1470
+ """test_intersection_bug_20081110(self)
1471
+
1472
+ Test all cases in top-right & top-left quadrant
1473
+ """
1474
+
1475
+ # define 4 collinear points, 1 in TL, 3 in TR
1476
+ # P1-+-P2---P3---P4
1477
+ P1 = [-3.0, 1.0]
1478
+ P2 = [ 1.0, 5.0]
1479
+ P3 = [ 2.0, 6.0]
1480
+ P4 = [ 3.0, 7.0]
1481
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1482
+
1483
+ # define 4 collinear points, 2 in TL, 2 in TR
1484
+ # P1---P2-+-P3---P4
1485
+ P1 = [-3.0, 1.0]
1486
+ P2 = [-2.0, 2.0]
1487
+ P3 = [ 2.0, 6.0]
1488
+ P4 = [ 3.0, 7.0]
1489
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1490
+
1491
+ # define 4 collinear points, 3 in TL, 1 in TR
1492
+ # P1---P2---P3-+-P4
1493
+ P1 = [-3.0, 1.0]
1494
+ P2 = [-2.0, 2.0]
1495
+ P3 = [-1.0, 3.0]
1496
+ P4 = [ 3.0, 7.0]
1497
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1498
+
1499
+ def test_intersection_bug_20081110_TR_BL(self):
1500
+ """test_intersection_bug_20081110(self)
1501
+
1502
+ Test all cases in top-right & bottom-left quadrant
1503
+ """
1504
+
1505
+ # define 4 collinear points, 1 in BL, 3 in TR
1506
+ # P1-+-P2---P3---P4
1507
+ P1 = [-4.0, -3.0]
1508
+ P2 = [ 1.0, 2.0]
1509
+ P3 = [ 2.0, 3.0]
1510
+ P4 = [ 3.0, 4.0]
1511
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1512
+
1513
+ # define 4 collinear points, 2 in TL, 2 in TR
1514
+ # P1---P2-+-P3---P4
1515
+ P1 = [-4.0, -3.0]
1516
+ P2 = [-3.0, -2.0]
1517
+ P3 = [ 2.0, 3.0]
1518
+ P4 = [ 3.0, 4.0]
1519
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1520
+
1521
+ # define 4 collinear points, 3 in TL, 1 in TR
1522
+ # P1---P2---P3-+-P4
1523
+ P1 = [-4.0, -3.0]
1524
+ P2 = [-3.0, -2.0]
1525
+ P3 = [-2.0, -1.0]
1526
+ P4 = [ 3.0, 4.0]
1527
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1528
+
1529
+ def test_intersection_bug_20081110_TR_BR(self):
1530
+ """test_intersection_bug_20081110(self)
1531
+
1532
+ Test all cases in top-right & bottom-right quadrant
1533
+ """
1534
+
1535
+ # define 4 collinear points, 1 in BR, 3 in TR
1536
+ # P1-+-P2---P3---P4
1537
+ P1 = [ 1.0, -3.0]
1538
+ P2 = [ 5.0, 1.0]
1539
+ P3 = [ 6.0, 2.0]
1540
+ P4 = [ 7.0, 3.0]
1541
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1542
+
1543
+ # define 4 collinear points, 2 in BR, 2 in TR
1544
+ # P1---P2-+-P3---P4
1545
+ P1 = [ 1.0, -3.0]
1546
+ P2 = [ 2.0, -2.0]
1547
+ P3 = [ 6.0, 2.0]
1548
+ P4 = [ 7.0, 3.0]
1549
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1550
+
1551
+ # define 4 collinear points, 3 in BR, 1 in TR
1552
+ # P1---P2---P3-+-P4
1553
+ P1 = [ 1.0, -3.0]
1554
+ P2 = [ 2.0, -2.0]
1555
+ P3 = [ 3.0, -1.0]
1556
+ P4 = [ 7.0, 3.0]
1557
+ self.helper_parallel_intersection_code(P1, P2, P3, P4)
1558
+
1559
+
1560
+ def test_intersection_direction_invariance(self):
1561
+ """This runs through a number of examples and checks that
1562
+ direction of lines don't matter.
1563
+ """
1564
+
1565
+ line0 = [[0,0], [100,100]]
1566
+
1567
+ common_end_point = [20, 150]
1568
+
1569
+ for i in range(100):
1570
+ x = 20 + i * 1.0/100
1571
+
1572
+ line1 = [[x,0], common_end_point]
1573
+ status, p1 = intersection(line0, line1)
1574
+ assert status == 1
1575
+
1576
+ # Swap direction of line1
1577
+ line1 = [common_end_point, [x,0]]
1578
+ status, p2 = intersection(line0, line1)
1579
+ assert status == 1
1580
+
1581
+ msg = ('Orientation of line should not matter.\n'
1582
+ 'However, segment [%f,%f], [%f, %f]' %
1583
+ (x, 0, common_end_point[0], common_end_point[1]))
1584
+ msg += ' gave %s, \nbut when reversed we got %s' % (p1, p2)
1585
+ assert num.allclose(p1, p2), msg
1586
+
1587
+ # Swap order of lines
1588
+ status, p3 = intersection(line1, line0)
1589
+ assert status == 1
1590
+ msg = 'Order of lines gave different results'
1591
+ assert num.allclose(p1, p3), msg
1592
+
1593
+ def test_no_intersection(self):
1594
+ """ Test 2 non-touching lines don't intersect. """
1595
+ line0 = [[-1,1], [1,1]]
1596
+ line1 = [[0,-1], [0,0]]
1597
+
1598
+ status, value = intersection(line0, line1)
1599
+ assert status == 0
1600
+ assert value is None
1601
+
1602
+ def test_intersection_parallel(self):
1603
+ line0 = [[-1,1], [1,1]]
1604
+ line1 = [[-1,0], [5,0]]
1605
+
1606
+ status, value = intersection(line0, line1)
1607
+ assert status == 4
1608
+ assert value is None
1609
+
1610
+ line0 = [[0,0], [10,100]]
1611
+ line1 = [[-10,5], [0,105]]
1612
+
1613
+ status, value = intersection(line0, line1)
1614
+ assert status == 4
1615
+ assert value is None
1616
+
1617
+ def test_intersection_coincide(self):
1618
+ """Test what happens when two lines partly coincide"""
1619
+
1620
+ # Overlap 1
1621
+ line0 = [[0,0], [5,0]]
1622
+ line1 = [[-3,0], [3,0]]
1623
+
1624
+ status, value = intersection(line0, line1)
1625
+ assert status == 2
1626
+ assert num.allclose(value, [[0,0], [3,0]])
1627
+
1628
+ # Overlap 2
1629
+ line0 = [[-10,0], [5,0]]
1630
+ line1 = [[-3,0], [10,0]]
1631
+
1632
+ status, value = intersection(line0, line1)
1633
+ assert status == 2
1634
+ assert num.allclose(value, [[-3, 0], [5,0]])
1635
+
1636
+ # Inclusion 1
1637
+ line0 = [[0,0], [5,0]]
1638
+ line1 = [[2,0], [3,0]]
1639
+
1640
+ status, value = intersection(line0, line1)
1641
+ assert status == 2
1642
+ assert num.allclose(value, line1)
1643
+
1644
+ # Inclusion 2
1645
+ line0 = [[1,0], [5,0]]
1646
+ line1 = [[-10,0], [15,0]]
1647
+
1648
+ status, value = intersection(line0, line1)
1649
+ assert status == 2
1650
+ assert num.allclose(value, line0)
1651
+
1652
+ # Exclusion (no intersection)
1653
+ line0 = [[-10,0], [1,0]]
1654
+ line1 = [[3,0], [15,0]]
1655
+
1656
+ status, value = intersection(line0, line1)
1657
+ assert status == 3
1658
+ assert value is None
1659
+
1660
+ # Try examples with some slope (y=2*x+5)
1661
+
1662
+ # Overlap
1663
+ line0 = [[0, 5], [7, 19]]
1664
+ line1 = [[1, 7], [10, 25]]
1665
+ status, value = intersection(line0, line1)
1666
+ assert status == 2
1667
+ assert num.allclose(value, [[1, 7], [7, 19]])
1668
+
1669
+ status, value = intersection(line1, line0)
1670
+ assert status == 2
1671
+ assert num.allclose(value, [[1, 7], [7, 19]])
1672
+
1673
+ # Swap direction
1674
+ line0 = [[7,19], [0,5]]
1675
+ line1 = [[1,7], [10,25]]
1676
+ status, value = intersection(line0, line1)
1677
+ assert status == 2
1678
+ assert num.allclose(value, [[7, 19], [1, 7]])
1679
+
1680
+ line0 = [[0,5], [7,19]]
1681
+ line1 = [[10,25], [1,7]]
1682
+ status, value = intersection(line0, line1)
1683
+ assert status == 2
1684
+ assert num.allclose(value, [[1, 7], [7, 19]])
1685
+
1686
+ # Inclusion
1687
+ line0 = [[1,7], [7,19]]
1688
+ line1 = [[0,5], [10,25]]
1689
+ status, value = intersection(line0, line1)
1690
+ assert status == 2
1691
+ assert num.allclose(value, [[1,7], [7, 19]])
1692
+
1693
+ line0 = [[0,5], [10,25]]
1694
+ line1 = [[1,7], [7,19]]
1695
+ status, value = intersection(line0, line1)
1696
+ assert status == 2
1697
+ assert num.allclose(value, [[1,7], [7, 19]])
1698
+
1699
+ line0 = [[0,5], [10,25]]
1700
+ line1 = [[7,19], [1,7]]
1701
+ status, value = intersection(line0, line1)
1702
+ assert status == 2
1703
+ assert num.allclose(value, [[7, 19], [1, 7]])
1704
+
1705
+
1706
+ def test_inside_polygon_main(self):
1707
+ # From real example (that failed)
1708
+ polygon = [[20,20], [40,20], [40,40], [20,40]]
1709
+ points = [[40, 50]]
1710
+ res = inside_polygon(points, polygon)
1711
+ assert len(res) == 0
1712
+
1713
+ polygon = [[20,20], [40,20], [40,40], [20,40]]
1714
+ points = [[25, 25], [30, 20], [40, 50], [90, 20], [40, 90]]
1715
+ res = inside_polygon(points, polygon)
1716
+ assert len(res) == 2
1717
+ assert num.allclose(res, [0,1])
1718
+
1719
+ def test_polygon_area(self):
1720
+ """ Test getting the area of a polygon. """
1721
+ # Simplest case: Polygon is the unit square
1722
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
1723
+ assert polygon_area(polygon) == 1
1724
+
1725
+ # Simple case: Polygon is a rectangle
1726
+ polygon = [[0,0], [1,0], [1,4], [0,4]]
1727
+ assert polygon_area(polygon) == 4
1728
+
1729
+ # Simple case: Polygon is a unit triangle
1730
+ polygon = [[0,0], [1,0], [0,1]]
1731
+ assert polygon_area(polygon) == 0.5
1732
+
1733
+ # Simple case: Polygon is a diamond
1734
+ polygon = [[0,0], [1,1], [2,0], [1, -1]]
1735
+ assert polygon_area(polygon) == 2.0
1736
+
1737
+ # Complex case where numerical errors might occur
1738
+ polygon = [[314037.58727982, 6224952.2960092],
1739
+ [314038.58727982, 6224952.2960092],
1740
+ [314038.58727982, 6224953.2960092],
1741
+ [314037.58727982, 6224953.2960092]]
1742
+ assert polygon_area(polygon) == 1.0
1743
+
1744
+ def test_poly_xy(self):
1745
+ # Simplest case: Polygon is the unit square
1746
+ polygon = [[0,0], [1,0], [1,1], [0,1]]
1747
+ x, y = _poly_xy(polygon)
1748
+ assert len(x) == len(polygon)+1
1749
+ assert len(y) == len(polygon)+1
1750
+ assert x[0] == 0
1751
+ assert x[1] == 1
1752
+ assert x[2] == 1
1753
+ assert x[3] == 0
1754
+ assert y[0] == 0
1755
+ assert y[1] == 0
1756
+ assert y[2] == 1
1757
+ assert y[3] == 1
1758
+
1759
+ # Arbitrary polygon
1760
+ polygon = [[1,5], [1,1], [100,10], [1,10], [3,6]]
1761
+ x, y = _poly_xy(polygon)
1762
+ assert len(x) == len(polygon)+1
1763
+ assert len(y) == len(polygon)+1
1764
+ assert x[0] == 1
1765
+ assert x[1] == 1
1766
+ assert x[2] == 100
1767
+ assert x[3] == 1
1768
+ assert x[4] == 3
1769
+ assert y[0] == 5
1770
+ assert y[1] == 1
1771
+ assert y[2] == 10
1772
+ assert y[3] == 10
1773
+ assert y[4] == 6
1774
+
1775
+
1776
+ def test_plot_polygons(self):
1777
+ import os
1778
+
1779
+ # Simplest case: Polygon is the unit square
1780
+ polygon1 = [[0,0], [1,0], [1,1], [0,1]]
1781
+ polygon2 = [[1,1], [2,1], [3,2], [2,2]]
1782
+ plot_polygons([polygon1, polygon2], figname='test1')
1783
+
1784
+
1785
+
1786
+ # Another case
1787
+ polygon3 = [[1,5], [10,1], [100,10], [50,9], [3,6]]
1788
+ plot_polygons([polygon2, polygon3], figname='test2')
1789
+
1790
+ #plt.close('all')
1791
+
1792
+ for plotfile in ['test1.png', 'test2.png']:
1793
+ assert os.access(plotfile, os.R_OK)
1794
+ os.remove(plotfile)
1795
+
1796
+
1797
+ def test_inside_polygon_geospatial(self):
1798
+ """ Test geospatial coords inside poly. """
1799
+ #Simplest case: Polygon is the unit square
1800
+ polygon_absolute = [[0, 0], [1, 0], [1, 1], [0, 1]]
1801
+ poly_geo_ref = Geo_reference(57, 100, 100)
1802
+ polygon = poly_geo_ref.change_points_geo_ref(polygon_absolute)
1803
+ poly_spatial = Geospatial_data(polygon, geo_reference=poly_geo_ref)
1804
+
1805
+ points_absolute = (0.5, 0.5)
1806
+ points_geo_ref = Geo_reference(57, 78, -56)
1807
+ points = points_geo_ref.change_points_geo_ref(points_absolute)
1808
+ points_spatial = Geospatial_data(points, geo_reference=points_geo_ref)
1809
+
1810
+ assert is_inside_polygon(points_absolute, polygon_absolute)
1811
+ assert is_inside_polygon(ensure_numeric(points_absolute),
1812
+ ensure_numeric(polygon_absolute))
1813
+ assert is_inside_polygon(points_absolute, poly_spatial)
1814
+ assert is_inside_polygon(points_spatial, poly_spatial)
1815
+ assert is_inside_polygon(points_spatial, polygon_absolute)
1816
+
1817
+ assert is_inside_polygon(points_absolute, polygon_absolute)
1818
+
1819
+ def test_decimate_polygon(self):
1820
+ from anuga.geometry.polygon import decimate_polygon
1821
+ polygon = [[0,0], [10,10], [15,5], [20, 10],
1822
+ [25,0], [30,10], [40,-10], [35, -5]]
1823
+
1824
+ dpoly = decimate_polygon(polygon, factor=2)
1825
+
1826
+ assert len(dpoly)*2==len(polygon)
1827
+
1828
+
1829
+ def test_interpolate_polyline(self):
1830
+ """test_interpolate_polyline(self):
1831
+
1832
+ This test is added under the assumption that the function
1833
+ interpolate_polyline implemented by John Jakeman works.
1834
+ It has been exercised somewhat by tests of sts boundary,
1835
+ but never before separately.
1836
+ """
1837
+
1838
+ f = num.array([58.06150614, 58.06150614, 58.06150614])
1839
+ vertex_coordinates = num.array([[0., 0., ],
1840
+ [4.04092634, 1106.11074699],
1841
+ [8.08836552, 2212.16910609]])
1842
+ gauge_neighbour_id = [1, 2, -1]
1843
+ point_coordinates = num.array([[2.21870766e+03, 1.09802864e+03],
1844
+ [1.62739645e+03, 2.20626983e+03],
1845
+ [5.20084967e+02, 2.21030386e+03],
1846
+ [6.06464546e+00, 1.65913993e+03],
1847
+ [1.61934862e+03, -5.88143836e+00],
1848
+ [5.11996623e+02, -1.85956061e+00],
1849
+ [2.02046270e+00, 5.53055373e+02]])
1850
+
1851
+ z_ref = [0., 0., 0., 58.06150614, 0., 0., 58.06150614]
1852
+
1853
+ z = interpolate_polyline(f, vertex_coordinates,
1854
+ gauge_neighbour_id, point_coordinates)
1855
+ assert num.allclose(z, z_ref)
1856
+
1857
+ # Another f
1858
+ f = num.array([58.06150614, 158.06150614, 258.06150614])
1859
+ z_ref = [0., 0., 0., 208.06150645, 0., 0., 108.0615061]
1860
+ z = interpolate_polyline(f, vertex_coordinates,
1861
+ gauge_neighbour_id, point_coordinates)
1862
+ assert num.allclose(z, z_ref)
1863
+
1864
+ # Other and simpler numbers
1865
+ f = num.array([1, 5, 13])
1866
+ vertex_coordinates = num.array([[0., 0., ],
1867
+ [4., 4.],
1868
+ [8., 8.]])
1869
+ point_coordinates = num.array([[0.1, 0.1],
1870
+ [3.5, 3.5],
1871
+ [4.0, 4.0],
1872
+ [5.2, 5.2],
1873
+ [7.0, 7.0],
1874
+ [8.3, 8.3]])
1875
+ gauge_neighbour_id = [1, 2, -1]
1876
+
1877
+ z = interpolate_polyline(f, vertex_coordinates,
1878
+ gauge_neighbour_id, point_coordinates)
1879
+ z_ref = [1.1, 4.5, 5., 7.4, 11., 0.]
1880
+ assert num.allclose(z, z_ref)
1881
+
1882
+ # Test exception thrown for one point
1883
+ f = num.array([5])
1884
+ vertex_coordinates = num.array([[4., 4.]])
1885
+ try:
1886
+ z = interpolate_polyline(f, vertex_coordinates,
1887
+ gauge_neighbour_id, point_coordinates)
1888
+ except Exception:
1889
+ pass
1890
+ else:
1891
+ raise Exception, 'One point should have raised exception'
1892
+
1893
+ # More polyline nodes
1894
+ data = num.array([1, 5, 13, 12, 6, 29])
1895
+ polyline_nodes = num.array([[0., 0.],
1896
+ [4., 4.],
1897
+ [8., 8.],
1898
+ [10., 10.],
1899
+ [10., 5.],
1900
+ [10., 0.]])
1901
+ point_coordinates = num.array([[0.1, 0.1],
1902
+ [3.5, 3.5],
1903
+ [4.0, 4.0],
1904
+ [5.2, 5.2],
1905
+ [7.0, 7.0],
1906
+ [8.3, 8.3],
1907
+ [10., 10.],
1908
+ [10., 9.],
1909
+ [10., 7.1],
1910
+ [10., 4.3],
1911
+ [10., 1.0]])
1912
+ gauge_neighbour_id = [1, 2, 3, 4, 5, -1]
1913
+ z = interpolate_polyline(data, polyline_nodes,
1914
+ gauge_neighbour_id, point_coordinates)
1915
+ z_ref = [1.1, 4.5, 5., 7.4, 11., 12.85, 12., 10.8, 8.52, 9.22, 24.4]
1916
+ assert num.allclose(z, z_ref)
1917
+
1918
+
1919
+ def test_is_inside_triangle_more(self):
1920
+ """ Test if points inside triangles are detected correctly. """
1921
+ res = is_inside_triangle([0.5, 0.5], [[ 0.5, 0. ],
1922
+ [ 0.5, 0.5],
1923
+ [ 0., 0. ]])
1924
+ assert res is True
1925
+
1926
+ res = is_inside_triangle([0.59999999999999998, 0.29999999999999999],
1927
+ [[ 0.5, 0. ], [ 0.5, 0.5], [0., 0.]])
1928
+ assert res is False
1929
+
1930
+ res = is_inside_triangle([0.59999999999999998, 0.29999999999999999],
1931
+ [[1., 0.], [1., 0.5], [0.5, 0.]])
1932
+ assert res is False
1933
+
1934
+
1935
+ res = is_inside_triangle([0.59999999999999998, 0.29999999999999999],
1936
+ [[0.5, 0.5], [0.5, 0.], [1., 0.5]])
1937
+ assert res is True
1938
+
1939
+
1940
+ res = is_inside_triangle([0.10000000000000001, 0.20000000000000001],
1941
+ [[0.5, 0.], [0.5, 0.5], [0., 0.]])
1942
+ assert res is False
1943
+
1944
+
1945
+ res = is_inside_triangle([0.10000000000000001, 0.20000000000000001],
1946
+ [[0., 0.5], [0., 0.], [0.5, 0.5]])
1947
+ assert res is True
1948
+
1949
+ res = is_inside_triangle([0.69999999999999996, 0.69999999999999996],
1950
+ [[0.5, 0.], [0.5, 0.5], [0., 0.]])
1951
+ assert res is False
1952
+
1953
+ res = is_inside_triangle([0.59999999999999998, 0.29999999999999999],
1954
+ [[0.25, 0.5], [0.25, 0.25], [0.5, 0.5]])
1955
+ assert res is False
1956
+
1957
+
1958
+ res = is_inside_triangle([10, 3],
1959
+ [[0.1, 0.],
1960
+ [0.1, 0.08333333],
1961
+ [0., 0.]])
1962
+ assert res is False
1963
+
1964
+
1965
+ def test_is_polygon_complex(self):
1966
+ """ Test a concave and a complex poly with is_complex, to make
1967
+ sure it can detect self-intersection.
1968
+ """
1969
+ concave_poly = [[0, 0], [10, 0], [5, 5], [10, 10], [0, 10]]
1970
+ complex_poly = [[0, 0], [10, 0], [5, 5], [4, 15], [5, 7], [10, 10], \
1971
+ [0, 10]]
1972
+
1973
+ assert not is_complex(concave_poly)
1974
+ assert is_complex(complex_poly)
1975
+
1976
+ def test_is_polygon_complex2(self):
1977
+ """ Test a concave and a complex poly with is_complex, to make sure it
1978
+ can detect self-intersection. This test uses more complicated
1979
+ polygons.
1980
+ """
1981
+ concave_poly = [[0, 0], [10, 0], [11,0], [5, 5], [7, 6], [10, 10], \
1982
+ [1, 5], [0, 10]]
1983
+ complex_poly = [[0, 0], [12, 12], [10, 0], [5, 5], [3,18], [4, 15], \
1984
+ [5, 7], [10, 10], [0, 10], [16, 12]]
1985
+
1986
+ assert not is_complex(concave_poly)
1987
+ assert is_complex(complex_poly)
1988
+
1989
+ ################################################################################
1990
+
1991
+ if __name__ == "__main__":
1992
+ suite = unittest.makeSuite(Test_Polygon,'test')
1993
+ runner = unittest.TextTestRunner()
1994
+ runner.run(suite)