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,2531 @@
1
+ # =============================================================================
2
+ # caching.py - Supervised caching of function results.
3
+ # Copyright (C) 1999, 2000, 2001, 2002 Ole Moller Nielsen
4
+ # Australian National University (1999-2003)
5
+ # Geoscience Australia (2003-present)
6
+ #
7
+ # This program is free software; you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation; either version 2 of the License, or
10
+ # (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License (http://www.gnu.org/copyleft/gpl.html)
16
+ # for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21
+ #
22
+ #
23
+ # Contact address: Ole.Nielsen@ga.gov.au
24
+ #
25
+ # Version 1.5.6 February 2002
26
+ # =============================================================================
27
+
28
+ """Module caching.py - Supervised caching of function results.
29
+
30
+ Public functions:
31
+
32
+ cache(my_F,args) -- Cache values returned from callable object my_F given args.
33
+ cachestat() -- Reports statistics about cache hits and time saved.
34
+ test() -- Conducts a basic test of the caching functionality.
35
+
36
+ See doc strings of individual functions for detailed documentation.
37
+ """
38
+
39
+ # -----------------------------------------------------------------------------
40
+ # Initialisation code
41
+
42
+ # Determine platform
43
+ #
44
+ from os import getenv
45
+ import types
46
+ import time
47
+
48
+ import os
49
+ if os.name in ['nt', 'dos', 'win32', 'what else?']:
50
+ unix = False
51
+ else:
52
+ unix = True
53
+
54
+ import anuga.utilities.log as log
55
+
56
+ import numpy as num
57
+
58
+ #from future
59
+
60
+ cache_dir = '.python_cache'
61
+
62
+ # Make default caching directory name
63
+ # We are changing the 'data directory' environment variable from
64
+ # INUNDATIONHOME to ANUGADATA - this gives a changeover.
65
+ if unix:
66
+ homedir = getenv('ANUGADATA')
67
+ if not homedir:
68
+ homedir = getenv('INUNDATIONHOME')
69
+
70
+ if not homedir:
71
+ homedir = '~'
72
+ else:
73
+ # Since homedir will be a group area, individually label the caches
74
+ user = getenv('LOGNAME')
75
+ if not user:
76
+ cache_dir += '_' + user
77
+
78
+ CR = '\n'
79
+ else:
80
+ homedir = 'c:'
81
+ CR = '\r\n' #FIXME: Not tested under windows
82
+
83
+ cachedir = os.path.join(homedir, cache_dir)
84
+
85
+ # -----------------------------------------------------------------------------
86
+ # Options directory with default values - to be set by user
87
+ #
88
+
89
+ options = {
90
+ 'cachedir': cachedir, # Default cache directory
91
+ 'maxfiles': 1000000, # Maximum number of cached files
92
+ 'savestat': True, # Log caching info to stats file
93
+ 'verbose': True, # Write messages to standard output
94
+ 'bin': True, # Use binary format (more efficient)
95
+ 'compression': True, # Use zlib compression
96
+ 'bytecode': True, # Recompute if bytecode has changed
97
+ 'expire': False # Automatically remove files that have been accessed
98
+ # least recently
99
+ }
100
+
101
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
102
+
103
+ def set_option(key, value):
104
+ """Function to set values in the options directory.
105
+
106
+ USAGE:
107
+ set_option(key, value)
108
+
109
+ ARGUMENTS:
110
+ key -- Key in options dictionary. (Required)
111
+ value -- New value for key. (Required)
112
+
113
+ DESCRIPTION:
114
+ Function to set values in the options directory.
115
+ Raises an exception if key is not in options.
116
+ """
117
+
118
+ if key in options:
119
+ options[key] = value
120
+ else:
121
+ raise KeyError(key) # Key not found, raise an exception
122
+
123
+ # -----------------------------------------------------------------------------
124
+ # Function cache - the main routine
125
+
126
+ def cache(my_F,
127
+ args=(),
128
+ kwargs={},
129
+ dependencies=None,
130
+ cachedir=None,
131
+ verbose=None,
132
+ compression=None,
133
+ evaluate=False,
134
+ test=False,
135
+ clear=False,
136
+ return_filename=False):
137
+ """Supervised caching of function results. Also known as memoization.
138
+
139
+ USAGE:
140
+ result = cache(my_F, args, kwargs, dependencies, cachedir, verbose,
141
+ compression, evaluate, test, return_filename)
142
+
143
+ ARGUMENTS:
144
+ my_F -- Callable object (Required)
145
+ args -- Arguments to my_F (Default: ())
146
+ kwargs -- Keyword arguments to my_F (Default: {})
147
+ dependencies -- Filenames that my_F depends on (Default: None)
148
+ cachedir -- Directory for cache files (Default: options['cachedir'])
149
+ verbose -- Flag verbose output to stdout
150
+ (Default: options['verbose'])
151
+ compression -- Flag zlib compression (Default: options['compression'])
152
+ evaluate -- Flag forced evaluation of my_F (Default: False)
153
+ test -- Flag test for cached results (Default: False)
154
+ clear -- Flag delete cached results (Default: False)
155
+ return_filename -- Flag return of cache filename (Default: False)
156
+
157
+ DESCRIPTION:
158
+ A Python function call of the form
159
+
160
+ result = my_F(arg1,...,argn)
161
+
162
+ can be replaced by
163
+
164
+ from caching import cache
165
+ result = cache(my_F,(arg1,...,argn))
166
+
167
+ The latter form returns the same output as the former but reuses cached
168
+ results if the function has been computed previously in the same context.
169
+ 'result' and the arguments can be simple types, tuples, list, dictionaries or
170
+ objects, but not unhashable types such as functions or open file objects.
171
+ The function 'my_F' may be a member function of an object or a module.
172
+
173
+ This type of caching is particularly useful for computationally intensive
174
+ functions with few frequently used combinations of input arguments. Note that
175
+ if the inputs or output are very large caching might not save time because
176
+ disc access may dominate the execution time.
177
+
178
+ If the function definition changes after a result has been cached it will be
179
+ detected by examining the functions bytecode (co_code, co_consts,
180
+ func_defaults, co_argcount) and it will be recomputed.
181
+
182
+ LIMITATIONS:
183
+ 1 Caching uses function(*args, **kwargs) to evaluate and will work
184
+ with anything that can be pickled, so any limitation in function(,)
185
+ or pickle extends to caching.
186
+ 2 A function to be cached should not depend on global variables
187
+ as wrong results may occur if globals are changed after a result has
188
+ been cached.
189
+
190
+ -----------------------------------------------------------------------------
191
+ Additional functionality:
192
+
193
+ Keyword args
194
+ Keyword arguments (kwargs) can be added as a dictionary of keyword: value
195
+ pairs, following Python's 'extended call syntax'.
196
+
197
+ A Python function call of the form
198
+
199
+ result = my_F(arg1,...,argn, kwarg1=val1,...,kwargm=valm)
200
+
201
+ is then cached as follows
202
+
203
+ from caching import cache
204
+ result = cache(my_F,(arg1,...,argn), {kwarg1:val1,...,kwargm:valm})
205
+
206
+ The default value of kwargs is {}
207
+
208
+ Explicit dependencies:
209
+ The call
210
+ cache(my_F,(arg1,...,argn), dependencies = <list of filenames>)
211
+ Checks the size, creation time and modification time of each listed file.
212
+ If any file has changed the function is recomputed and the results stored
213
+ again.
214
+
215
+ Specify caching directory:
216
+ The call
217
+ cache(my_F,(arg1,...,argn), cachedir = <cachedir>)
218
+ designates <cachedir> where cached data are stored. Use ~ to indicate users
219
+ home directory - not $HOME. The default is ~/.python_cache on a UNIX
220
+ platform and c:/.python_cache on a Win platform.
221
+
222
+ Silent operation:
223
+ The call
224
+ cache(my_F,(arg1,...,argn), verbose=False)
225
+ suppresses messages to standard output.
226
+
227
+ Compression:
228
+ The call
229
+ cache(my_F,(arg1,...,argn), compression=False)
230
+ disables compression. (Default: compression=True). If the requested compressed
231
+ or uncompressed file is not there, it'll try the other version.
232
+
233
+ Forced evaluation:
234
+ The call
235
+ cache(my_F,(arg1,...,argn), evaluate=True)
236
+ forces the function to evaluate even though cached data may exist.
237
+
238
+ Testing for presence of cached result:
239
+ The call
240
+ cache(my_F,(arg1,...,argn), test=True)
241
+ retrieves cached result if it exists, otherwise None. The function will not
242
+ be evaluated. If both evaluate and test are switched on, evaluate takes
243
+ precedence.
244
+ ??NOTE: In case of hash collisions, this may return the wrong result as
245
+ ??it only checks if *a* cached result is present.
246
+ # I think this was due to the bytecode option being False for some reason. (23/1/2009).
247
+
248
+ Obtain cache filenames:
249
+ The call
250
+ cache(my_F,(arg1,...,argn), return_filename=True)
251
+ returns the hashed base filename under which this function and its
252
+ arguments would be cached
253
+
254
+ Clearing cached results:
255
+ The call
256
+ cache(my_F,'clear')
257
+ clears all cached data for 'my_F' and
258
+ cache('clear')
259
+ clears all cached data.
260
+
261
+ NOTE: The string 'clear' can be passed an *argument* to my_F using
262
+ cache(my_F,('clear',)) or cache(my_F,tuple(['clear'])).
263
+
264
+ New form of clear:
265
+ cache(my_F,(arg1,...,argn), clear=True)
266
+ clears cached data for particular combination my_F and args
267
+
268
+ """
269
+
270
+ # Imports and input checks
271
+ #
272
+ import time, string
273
+
274
+ if not cachedir:
275
+ cachedir = options['cachedir']
276
+
277
+ if verbose == None: # Do NOT write 'if not verbose:', it could be zero.
278
+ verbose = options['verbose']
279
+
280
+ if compression == None: # Do NOT write 'if not compression:',
281
+ # it could be zero.
282
+ compression = options['compression']
283
+
284
+ # Create cache directory if needed
285
+ CD = checkdir(cachedir,verbose)
286
+
287
+ # Handle the case cache('clear')
288
+ if isinstance(my_F, basestring):
289
+ if string.lower(my_F) == 'clear':
290
+ clear_cache(CD,verbose=verbose)
291
+ return
292
+
293
+ # Handle the case cache(my_F, 'clear')
294
+ if isinstance(args, basestring):
295
+ if string.lower(args) == 'clear':
296
+ clear_cache(CD,my_F,verbose=verbose)
297
+ return
298
+
299
+ # Force singleton arg into a tuple
300
+ if not isinstance(args, tuple):
301
+ args = tuple([args])
302
+
303
+ # Check that kwargs is a dictionary
304
+ if not isinstance(kwargs, dict):
305
+ raise TypeError
306
+
307
+ # Hash arguments (and keyword args) to integer
308
+ arghash = myhash((args, kwargs))
309
+
310
+ # Get sizes and timestamps for files listed in dependencies.
311
+ # Force singletons into a tuple.
312
+ if dependencies and not isinstance(dependencies, (tuple, list)):
313
+ dependencies = tuple([dependencies])
314
+ deps = get_depstats(dependencies)
315
+
316
+ # Extract function name from my_F object
317
+ funcname = get_funcname(my_F)
318
+
319
+ # Create cache filename
320
+ FN = funcname+'['+`arghash`+']' # The symbol '(' does not work under unix
321
+
322
+ if return_filename:
323
+ return(FN)
324
+
325
+ if clear:
326
+ for file_type in file_types:
327
+ file_name = CD+FN+'_'+file_type
328
+ for fn in [file_name, file_name + '.z']:
329
+ if os.access(fn, os.F_OK):
330
+ if unix:
331
+ os.remove(fn)
332
+ else:
333
+ # FIXME: os.remove doesn't work under windows
334
+ os.system('del '+fn)
335
+ if verbose is True:
336
+ log.critical('MESSAGE (caching): File %s deleted' % fn)
337
+ ##else:
338
+ ## log.critical('%s was not accessed' % fn)
339
+ return None
340
+
341
+
342
+ #-------------------------------------------------------------------
343
+
344
+ # Check if previous computation has been cached
345
+ if evaluate is True:
346
+ Retrieved = None # Force evaluation of my_F regardless of caching status.
347
+ reason = 5
348
+ else:
349
+ T, FN, Retrieved, reason, comptime, loadtime, compressed = \
350
+ CacheLookup(CD, FN, my_F,
351
+ args, kwargs,
352
+ deps,
353
+ verbose,
354
+ compression,
355
+ dependencies)
356
+
357
+ if not Retrieved:
358
+ if test: # Do not attempt to evaluate function
359
+ T = None
360
+ else: # Evaluate function and save to cache
361
+ if verbose is True:
362
+
363
+ msg1(funcname, args, kwargs,reason)
364
+
365
+ # Remove expired files automatically
366
+ if options['expire']:
367
+ DeleteOldFiles(CD,verbose)
368
+
369
+ # Save args before function is evaluated in case
370
+ # they are modified by function
371
+ save_args_to_cache(CD,FN,args,kwargs,compression)
372
+
373
+ # Execute and time function with supplied arguments
374
+ t0 = time.time()
375
+
376
+ T = my_F(*args, **kwargs) # Built-in 'apply' deprecated in Py3K
377
+
378
+ #comptime = round(time.time()-t0)
379
+ comptime = time.time()-t0
380
+
381
+ if verbose is True:
382
+ msg2(funcname,args,kwargs,comptime,reason)
383
+
384
+ # Save results and estimated loading time to cache
385
+ loadtime = save_results_to_cache(T, CD, FN, my_F, deps, comptime, \
386
+ funcname, dependencies, compression)
387
+ if verbose is True:
388
+ msg3(loadtime, CD, FN, deps, compression)
389
+ compressed = compression
390
+
391
+ if options['savestat'] and (not test or Retrieved):
392
+ ##if options['savestat']:
393
+ addstatsline(CD,funcname,FN,Retrieved,reason,comptime,loadtime,compressed)
394
+ return(T) # Return results in all cases
395
+
396
+ # -----------------------------------------------------------------------------
397
+
398
+ def cachestat(sortidx=4, period=-1, showuser=None, cachedir=None):
399
+ """Generate statistics of caching efficiency.
400
+
401
+ USAGE:
402
+ cachestat(sortidx, period, showuser, cachedir)
403
+
404
+ ARGUMENTS:
405
+ sortidx -- Index of field by which lists are (default: 4)
406
+ Legal values are
407
+ 0: 'Name'
408
+ 1: 'Hits'
409
+ 2: 'CPU'
410
+ 3: 'Time Saved'
411
+ 4: 'Gain(%)'
412
+ 5: 'Size'
413
+ period -- If set to -1 all available caching history is used.
414
+ If set 0 only the current month is used (default -1).
415
+ showuser -- Flag for additional table showing user statistics
416
+ (default: None).
417
+ cachedir -- Directory for cache files (default: options['cachedir']).
418
+
419
+ DESCRIPTION:
420
+ Logged caching statistics is converted into summaries of the form
421
+ --------------------------------------------------------------------------
422
+ Function Name Hits Exec(s) Cache(s) Saved(s) Gain(%) Size
423
+ --------------------------------------------------------------------------
424
+ """
425
+
426
+ __cachestat(sortidx, period, showuser, cachedir)
427
+ return
428
+
429
+ # -----------------------------------------------------------------------------
430
+
431
+ # Has mostly been moved to proper unit test.
432
+ # What remains here includes example of the
433
+ # cache statistics form.
434
+ def test(cachedir=None, verbose=False, compression=None):
435
+ """Test the functionality of caching.
436
+
437
+ USAGE:
438
+ test(verbose)
439
+
440
+ ARGUMENTS:
441
+ verbose -- Flag whether caching will output its statistics (default=False)
442
+ cachedir -- Directory for cache files (Default: options['cachedir'])
443
+ compression -- Flag zlib compression (Default: options['compression'])
444
+ """
445
+
446
+ import string, time
447
+
448
+ # Initialise
449
+ #
450
+ #import caching
451
+ #reload(caching)
452
+
453
+ if not cachedir:
454
+ cachedir = options['cachedir']
455
+
456
+ if verbose is None: # Do NOT write 'if not verbose:', it could be zero.
457
+ verbose = options['verbose']
458
+
459
+ if compression == None: # Do NOT write 'if not compression:',
460
+ # it could be zero.
461
+ compression = options['compression']
462
+ else:
463
+ try:
464
+ set_option('compression', compression)
465
+ except:
466
+ logtesterror('Set option failed')
467
+
468
+ try:
469
+ import zlib
470
+ except:
471
+ log.critical()
472
+ log.critical('*** Could not find zlib, default to no-compression ***')
473
+ log.critical('*** Installing zlib will improve performance of caching ***')
474
+ log.critical()
475
+ compression = 0
476
+ set_option('compression', compression)
477
+
478
+ log.critical('\nTesting caching module - please stand by\n')
479
+
480
+ # Define a test function to be cached
481
+ #
482
+ def f(a,b,c,N,x=0,y='abcdefg'):
483
+ """f(a,b,c,N)
484
+ Do something time consuming and produce a complex result.
485
+ """
486
+
487
+ import string
488
+
489
+ B = []
490
+ for n in range(N):
491
+ s = str(n+2.0/(n + 4.0))+'.a'*10
492
+ B.append((a,b,c,s,n,x,y))
493
+ return(B)
494
+
495
+ # Check that default cachedir is OK
496
+ #
497
+ CD = checkdir(cachedir,verbose)
498
+
499
+
500
+ # Make a dependency file
501
+ #
502
+ try:
503
+ DepFN = CD + 'testfile.tmp'
504
+ DepFN_wildcard = CD + 'test*.tmp'
505
+ Depfile = open(DepFN,'w')
506
+ Depfile.write('We are the knights who say NI!')
507
+ Depfile.close()
508
+ logtestOK('Wrote file %s' %DepFN)
509
+ except:
510
+ logtesterror('Could not open file %s for writing - check your environment' \
511
+ % DepFN)
512
+
513
+ # Check set_option (and switch stats off
514
+ #
515
+ try:
516
+ set_option('savestat',0)
517
+ assert(options['savestat'] == 0)
518
+ logtestOK('Set option')
519
+ except:
520
+ logtesterror('Set option failed')
521
+
522
+ # Make some test input arguments
523
+ #
524
+ N = 5000 #Make N fairly small here
525
+
526
+ a = [1,2]
527
+ b = ('Thou shalt count the number three',4)
528
+ c = {'Five is right out': 6, (7,8): 9}
529
+ x = 3
530
+ y = 'holy hand granate'
531
+
532
+ # Test caching
533
+ #
534
+ if compression:
535
+ comprange = 2
536
+ else:
537
+ comprange = 1
538
+
539
+ for comp in range(comprange):
540
+
541
+ # Evaluate and store
542
+ #
543
+ try:
544
+ T1 = cache(f,(a,b,c,N), {'x':x, 'y':y}, evaluate=1, \
545
+ verbose=verbose, compression=comp)
546
+ if comp:
547
+ logtestOK('Caching evaluation with compression')
548
+ else:
549
+ logtestOK('Caching evaluation without compression')
550
+ except:
551
+ if comp:
552
+ logtesterror('Caching evaluation with compression failed - try caching.test(compression=0)')
553
+ else:
554
+ logtesterror('Caching evaluation failed - try caching.test(verbose=1)')
555
+
556
+ # Retrieve
557
+ #
558
+ try:
559
+ T2 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
560
+ compression=comp)
561
+
562
+ if comp:
563
+ logtestOK('Caching retrieval with compression')
564
+ else:
565
+ logtestOK('Caching retrieval without compression')
566
+ except:
567
+ if comp:
568
+ logtesterror('Caching retrieval with compression failed - try caching.test(compression=0)')
569
+ else:
570
+ logtesterror('Caching retrieval failed - try caching.test(verbose=1)')
571
+
572
+ # Reference result
573
+ #
574
+ T3 = f(a,b,c,N,x=x,y=y) # Compute without caching
575
+
576
+ if T1 == T2 and T2 == T3:
577
+ if comp:
578
+ logtestOK('Basic caching functionality (with compression)')
579
+ else:
580
+ logtestOK('Basic caching functionality (without compression)')
581
+ else:
582
+ logtesterror('Cached result does not match computed result')
583
+
584
+
585
+ # Test return_filename
586
+ #
587
+ try:
588
+ FN = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
589
+ return_filename=1)
590
+ assert(FN[:2] == 'f[')
591
+ logtestOK('Return of cache filename')
592
+ except:
593
+ logtesterror('Return of cache filename failed')
594
+
595
+ # Test existence of cachefiles
596
+ #
597
+ try:
598
+ (datafile,compressed0) = myopen(CD+FN+'_'+file_types[0],"rb",compression)
599
+ (argsfile,compressed1) = myopen(CD+FN+'_'+file_types[1],"rb",compression)
600
+ (admfile,compressed2) = myopen(CD+FN+'_'+file_types[2],"rb",compression)
601
+ logtestOK('Presence of cache files')
602
+ datafile.close()
603
+ argsfile.close()
604
+ admfile.close()
605
+ except:
606
+ logtesterror('Expected cache files did not exist')
607
+
608
+ # Test 'test' function when cache is present
609
+ #
610
+ try:
611
+ #T1 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
612
+ # evaluate=1)
613
+ T4 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, test=1)
614
+ assert(T1 == T4)
615
+
616
+ logtestOK("Option 'test' when cache file present")
617
+ except:
618
+ logtesterror("Option 'test' when cache file present failed")
619
+
620
+ # Test that 'clear' works
621
+ #
622
+ #try:
623
+ # cache(f,'clear',verbose=verbose)
624
+ # logtestOK('Clearing of cache files')
625
+ #except:
626
+ # logtesterror('Clear does not work')
627
+ try:
628
+ cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, clear=1)
629
+ logtestOK('Clearing of cache files')
630
+ except:
631
+ logtesterror('Clear does not work')
632
+
633
+
634
+
635
+ # Test 'test' function when cache is absent
636
+ #
637
+ try:
638
+ T4 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, test=1)
639
+ assert(T4 is None)
640
+ logtestOK("Option 'test' when cache absent")
641
+ except:
642
+ logtesterror("Option 'test' when cache absent failed")
643
+
644
+ # Test dependencies
645
+ #
646
+ T1 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
647
+ dependencies=DepFN)
648
+ T2 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
649
+ dependencies=DepFN)
650
+
651
+ if T1 == T2:
652
+ logtestOK('Basic dependencies functionality')
653
+ else:
654
+ logtesterror('Dependencies do not work')
655
+
656
+ # Test basic wildcard dependency
657
+ #
658
+ T3 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
659
+ dependencies=DepFN_wildcard)
660
+
661
+ if T1 == T3:
662
+ logtestOK('Basic dependencies with wildcard functionality')
663
+ else:
664
+ logtesterror('Dependencies with wildcards do not work')
665
+
666
+
667
+ # Test that changed timestamp in dependencies triggers recomputation
668
+
669
+ # Modify dependency file
670
+ Depfile = open(DepFN,'a')
671
+ Depfile.write('You must cut down the mightiest tree in the forest with a Herring')
672
+ Depfile.close()
673
+
674
+ T3 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
675
+ dependencies=DepFN, test = 1)
676
+
677
+ if T3 is None:
678
+ logtestOK('Changed dependencies recognised')
679
+ else:
680
+ logtesterror('Changed dependencies not recognised')
681
+
682
+ # Test recomputation when dependencies have changed
683
+ #
684
+ T3 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose, \
685
+ dependencies=DepFN)
686
+ if T1 == T3:
687
+ logtestOK('Recomputed value with changed dependencies')
688
+ else:
689
+ logtesterror('Recomputed value with changed dependencies failed')
690
+
691
+ # Performance test (with statistics)
692
+ # Don't really rely on this as it will depend on specific computer.
693
+ #
694
+
695
+ set_option('savestat',1)
696
+
697
+ N = 20*N #Should be large on fast computers...
698
+ tt = time.time()
699
+ T1 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose)
700
+ t1 = time.time() - tt
701
+
702
+ tt = time.time()
703
+ T2 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=verbose)
704
+ t2 = time.time() - tt
705
+
706
+ if T1 == T2:
707
+ if t1 > t2:
708
+ logtestOK('Performance test: relative time saved = %s pct' \
709
+ %str(round((t1-t2)*100/t1,2)))
710
+ else:
711
+ logtesterror('Basic caching failed for new problem')
712
+
713
+ # Test presence of statistics file
714
+ #
715
+ try:
716
+ DIRLIST = os.listdir(CD)
717
+ SF = []
718
+ for FN in DIRLIST:
719
+ if string.find(FN,statsfile) >= 0:
720
+ fid = open(CD+FN,'r')
721
+ fid.close()
722
+ logtestOK('Statistics files present')
723
+ except:
724
+ logtestOK('Statistics files cannot be opened')
725
+
726
+ print_header_box('Show sample output of the caching function:')
727
+
728
+ T2 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=0)
729
+ T2 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=0)
730
+ T2 = cache(f,(a,b,c,N), {'x':x, 'y':y}, verbose=1)
731
+
732
+ print_header_box('Show sample output of cachestat():')
733
+ if unix:
734
+ cachestat()
735
+ else:
736
+ try:
737
+ import time
738
+ t = time.strptime('2030','%Y')
739
+ cachestat()
740
+ except:
741
+ log.critical('cachestat() does not work here, because it relies on '
742
+ 'time.strptime() which is unavailable in Windows')
743
+
744
+ logtestOK('Caching self test completed')
745
+
746
+
747
+ # Test setoption (not yet implemented)
748
+ #
749
+
750
+
751
+ #==============================================================================
752
+ # Auxiliary functions
753
+ #==============================================================================
754
+
755
+ # Import pickler
756
+ # cPickle is used by functions mysave, myload, and compare
757
+ #
758
+ import cPickle # 10 to 100 times faster than pickle
759
+ pickler = cPickle
760
+
761
+ # Local immutable constants
762
+ #
763
+ comp_level = 1 # Compression level for zlib.
764
+ # comp_level = 1 works well.
765
+ textwidth1 = 16 # Text width of key fields in report forms.
766
+ #textwidth2 = 132 # Maximal width of textual representation of
767
+ textwidth2 = 300 # Maximal width of textual representation of
768
+ # arguments.
769
+ textwidth3 = 16 # Initial width of separation lines. Is modified.
770
+ textwidth4 = 50 # Text width in logtestOK()
771
+ statsfile = '.cache_stat' # Basefilename for cached statistics.
772
+ # It will reside in the chosen cache directory.
773
+
774
+ file_types = ['Result', # File name extension for cached function results.
775
+ 'Args', # File name extension for stored function args.
776
+ 'Admin'] # File name extension for administrative info.
777
+
778
+ Reason_msg = ['OK', # Verbose reasons for recomputation
779
+ 'No cached result',
780
+ 'Dependencies have changed',
781
+ 'Arguments have changed',
782
+ 'Bytecode has changed',
783
+ 'Recomputation was requested by caller',
784
+ 'Cached file was unreadable']
785
+
786
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
787
+
788
+ def CacheLookup(CD, FN, my_F, args, kwargs, deps, verbose, compression,
789
+ dependencies):
790
+ """Determine whether cached result exists and return info.
791
+
792
+ USAGE:
793
+ (T, FN, Retrieved, reason, comptime, loadtime, compressed) = \
794
+ CacheLookup(CD, FN, my_F, args, kwargs, deps, verbose, compression, \
795
+ dependencies)
796
+
797
+ INPUT ARGUMENTS:
798
+ CD -- Cache Directory
799
+ FN -- Suggested cache file name
800
+ my_F -- Callable object
801
+ args -- Tuple of arguments
802
+ kwargs -- Dictionary of keyword arguments
803
+ deps -- Dependencies time stamps
804
+ verbose -- Flag text output
805
+ compression -- Flag zlib compression
806
+ dependencies -- Given list of dependencies
807
+
808
+ OUTPUT ARGUMENTS:
809
+ T -- Cached result if present otherwise None
810
+ FN -- File name under which new results must be saved
811
+ Retrieved -- True if a valid cached result was found
812
+ reason -- 0: OK (if Retrieved),
813
+ 1: No cached result,
814
+ 2: Dependencies have changed,
815
+ 3: Arguments have changed
816
+ 4: Bytecode has changed
817
+ 5: Recomputation was forced
818
+ 6: Unreadable file
819
+ comptime -- Number of seconds it took to computed cachged result
820
+ loadtime -- Number of seconds it took to load cached result
821
+ compressed -- Flag (0,1) if cached results were compressed or not
822
+
823
+ DESCRIPTION:
824
+ Determine if cached result exists as follows:
825
+ Load in saved arguments and bytecode stored under hashed filename.
826
+ If they are identical to current arguments and bytecode and if dependencies
827
+ have not changed their time stamp, then return cached result.
828
+
829
+ Otherwise return filename under which new results should be cached.
830
+ Hash collisions are handled recursively by calling CacheLookup again with a
831
+ modified filename.
832
+ """
833
+
834
+ import time, string
835
+
836
+ # Assess whether cached result exists - compressed or not.
837
+ #
838
+ if verbose:
839
+ log.critical('Caching: looking for cached files %s_{%s,%s,%s}.z'
840
+ % (CD+FN, file_types[0], file_types[1], file_types[2]))
841
+ (datafile,compressed0) = myopen(CD+FN+'_'+file_types[0],"rb",compression)
842
+ (argsfile,compressed1) = myopen(CD+FN+'_'+file_types[1],"rb",compression)
843
+ (admfile,compressed2) = myopen(CD+FN+'_'+file_types[2],"rb",compression)
844
+
845
+ if verbose is True and deps is not None:
846
+ log.critical('Caching: Dependencies are %s' % deps.keys())
847
+
848
+ if not (argsfile and datafile and admfile) or \
849
+ not (compressed0 == compressed1 and compressed0 == compressed2):
850
+ # Cached result does not exist or files were compressed differently
851
+ #
852
+ # This will ensure that evaluation will take place unless all files are
853
+ # present.
854
+
855
+ reason = 1
856
+ return(None,FN,None,reason,None,None,None) #Recompute using same filename
857
+
858
+ compressed = compressed0 # Remember if compressed files were actually used
859
+ datafile.close()
860
+
861
+ # Retrieve arguments and adm. info
862
+ #
863
+ R, reason = myload(argsfile, compressed) # The original arguments
864
+ argsfile.close()
865
+
866
+ if reason > 0:
867
+ # Recompute using same filename
868
+ return(None, FN, None, reason, None, None, None)
869
+ else:
870
+ (argsref, kwargsref) = R
871
+
872
+ R, reason = myload(admfile, compressed)
873
+ admfile.close()
874
+
875
+ if reason > 0:
876
+ return(None,FN,None,reason,None,None,None) #Recompute using same filename
877
+
878
+
879
+ depsref = R[0] # Dependency statistics
880
+ comptime = R[1] # The computation time
881
+ coderef = R[2] # The byte code
882
+ funcname = R[3] # The function name
883
+
884
+ # Check if dependencies have changed
885
+ #
886
+ if dependencies and not compare(depsref, deps):
887
+ if verbose:
888
+ log.critical('Dependencies %s have changed - recomputing' % dependencies)
889
+
890
+ # Don't use cached file - recompute
891
+ reason = 2
892
+ return(None, FN, None, reason, None, None, None)
893
+
894
+ # Get bytecode from my_F
895
+ #
896
+ bytecode = get_bytecode(my_F)
897
+
898
+ # Check if arguments or bytecode have changed
899
+ if compare(argsref, args) and compare(kwargsref, kwargs) and \
900
+ (not options['bytecode'] or compare(bytecode, coderef)):
901
+
902
+ # Arguments and dependencies match. Get cached results
903
+ T, loadtime, compressed, reason = load_from_cache(CD, FN, compressed)
904
+ if reason > 0:
905
+ # Recompute using same FN
906
+ return(None, FN, None, reason, None, None, None)
907
+
908
+ Retrieved = 1
909
+ reason = 0
910
+
911
+ if verbose:
912
+ msg4(funcname,args,kwargs,deps,comptime,loadtime,CD,FN,compressed)
913
+
914
+ if loadtime >= comptime:
915
+ log.critical('Caching did not yield any gain.')
916
+ log.critical('Consider executing function %s without caching.'
917
+ % funcname)
918
+ else:
919
+
920
+ # Non matching arguments or bytecodes signify a hash-collision.
921
+ # This is resolved by recursive search of cache filenames
922
+ # until either a matching or an unused filename is found.
923
+ #
924
+ (T, FN, Retrieved, reason, comptime, loadtime, compressed) = \
925
+ CacheLookup(CD, FN+'x', my_F, args, kwargs, deps,
926
+ verbose, compression, dependencies)
927
+
928
+ # The real reason is that args or bytecodes have changed.
929
+ # Not that the recursive seach has found an unused filename
930
+ if not Retrieved:
931
+ if not compare(bytecode, coderef):
932
+ reason = 4 # Bytecode has changed
933
+ else:
934
+ reason = 3 # Arguments have changed
935
+
936
+ # PADARN NOTE 17/12/12: Adding a special case to handle the existence of a
937
+ # FitInterpolate object. C Structures are serialised so they can be pickled.
938
+ #---------------------------------------------------------------------------
939
+ from anuga.fit_interpolate.general_fit_interpolate import FitInterpolate
940
+
941
+ # Setup for quad_tree extension
942
+ #from anuga.utilities import compile
943
+ #if compile.can_use_C_extension('quad_tree_ext.c'):
944
+ #import quad_tree_ext
945
+ #else:
946
+ # msg = "C implementation of quad tree extension not avaliable"
947
+ # raise Exception(msg)
948
+
949
+ # Setup for sparse_matrix extension
950
+ #from anuga.utilities import compile
951
+ #if compile.can_use_C_extension('sparse_matrix_ext.c'):
952
+
953
+ #else:
954
+ # msg = "C implementation of sparse_matrix extension not avaliable"
955
+ # raise Exception(msg)
956
+
957
+ import anuga.utilities.sparse_matrix_ext as sparse_matrix_ext
958
+ import anuga.utilities.quad_tree_ext as quad_tree_ext
959
+ from anuga.geometry.aabb import AABB
960
+
961
+ if isinstance(T, FitInterpolate):
962
+ if hasattr(T,"D"):
963
+ T.D=sparse_matrix_ext.deserialise_dok(T.D)
964
+ if hasattr(T,"AtA"):
965
+ T.AtA=sparse_matrix_ext.deserialise_dok(T.AtA)
966
+ if hasattr(T,"root"):
967
+ T.build_quad_tree(verbose=verbose)
968
+ #---------------------------------------------------------------------------
969
+
970
+ return((T, FN, Retrieved, reason, comptime, loadtime, compressed))
971
+
972
+ # -----------------------------------------------------------------------------
973
+
974
+ def clear_cache(CD, my_F=None, verbose=None):
975
+ """Clear cache for my_F.
976
+
977
+ USAGE:
978
+ clear(CD, my_F, verbose)
979
+
980
+ ARGUMENTS:
981
+ CD -- Caching directory (required)
982
+ my_F -- Function object (default: None)
983
+ verbose -- Flag verbose output (default: None)
984
+
985
+ DESCRIPTION:
986
+
987
+ If my_F == None, clear everything,
988
+ otherwise clear only files pertaining to my_F.
989
+ """
990
+
991
+ import os, re
992
+
993
+ if CD[-1] != os.sep:
994
+ CD = CD+os.sep
995
+
996
+ if verbose == None:
997
+ verbose = options['verbose']
998
+
999
+ # FIXME: Windows version needs to be tested
1000
+
1001
+ if my_F:
1002
+ funcname = get_funcname(my_F)
1003
+ if verbose:
1004
+ log.critical('Clearing %s' % CD+funcname+'*')
1005
+
1006
+ file_names = os.listdir(CD)
1007
+ for file_name in file_names:
1008
+ #RE = re.search('^' + funcname,file_name) #Inefficient
1009
+ #if RE:
1010
+ if file_name[:len(funcname)] == funcname:
1011
+ if unix:
1012
+ os.remove(CD+file_name)
1013
+ else:
1014
+ os.system('del '+CD+file_name)
1015
+ # FIXME: os.remove doesn't work under windows
1016
+ else:
1017
+ file_names = os.listdir(CD)
1018
+ if len(file_names) > 0:
1019
+ if verbose:
1020
+ log.critical('Remove the following files:')
1021
+ for file_name in file_names:
1022
+ log.critical(' ' + file_name)
1023
+
1024
+ A = raw_input('Delete (Y/N)[N] ?')
1025
+ else:
1026
+ A = 'Y'
1027
+
1028
+ if A == 'Y' or A == 'y':
1029
+ for file_name in file_names:
1030
+ if unix:
1031
+ os.remove(CD+file_name)
1032
+ else:
1033
+ os.system('del '+CD+file_name)
1034
+ # FIXME: os.remove doesn't work under windows
1035
+ #exitcode=os.system('/bin/rm '+CD+'* 2> /dev/null')
1036
+
1037
+ # -----------------------------------------------------------------------------
1038
+
1039
+ def DeleteOldFiles(CD,verbose=None):
1040
+ """Remove expired files
1041
+
1042
+ USAGE:
1043
+ DeleteOldFiles(CD,verbose=None)
1044
+ """
1045
+
1046
+ if verbose == None:
1047
+ verbose = options['verbose']
1048
+
1049
+ maxfiles = options['maxfiles']
1050
+
1051
+ # FIXME: Windows version
1052
+
1053
+ import os
1054
+ block = 1000 # How many files to delete per invokation
1055
+ Files = os.listdir(CD)
1056
+ numfiles = len(Files)
1057
+ if not unix: return # FIXME: Windows case ?
1058
+
1059
+ if numfiles > maxfiles:
1060
+ delfiles = numfiles-maxfiles+block
1061
+ if verbose:
1062
+ log.critical('Deleting %d expired files:' % delfiles)
1063
+ os.system('ls -lur '+CD+'* | head -' + `delfiles`) # List them
1064
+ os.system('ls -ur '+CD+'* | head -' + `delfiles` + ' | xargs /bin/rm')
1065
+ # Delete them
1066
+ # FIXME: Replace this with os.listdir and os.remove
1067
+
1068
+ # -----------------------------------------------------------------------------
1069
+
1070
+ def save_args_to_cache(CD, FN, args, kwargs, compression):
1071
+ """Save arguments to cache
1072
+
1073
+ USAGE:
1074
+ save_args_to_cache(CD,FN,args,kwargs,compression)
1075
+ """
1076
+
1077
+ import time, os, sys
1078
+
1079
+ (argsfile, compressed) = myopen(CD+FN+'_'+file_types[1], 'wb', compression)
1080
+ if argsfile is None:
1081
+ msg = 'ERROR (caching): Could not open argsfile for writing: %s' %FN
1082
+ raise IOError(msg)
1083
+
1084
+ mysave((args,kwargs),argsfile,compression) # Save args and kwargs to cache
1085
+ argsfile.close()
1086
+
1087
+ # Change access rights if possible
1088
+ #
1089
+ #if unix:
1090
+ # try:
1091
+ # exitcode=os.system('chmod 666 '+argsfile.name)
1092
+ # except:
1093
+ # pass
1094
+ #else:
1095
+ # pass # FIXME: Take care of access rights under Windows
1096
+
1097
+ return
1098
+
1099
+ # -----------------------------------------------------------------------------
1100
+
1101
+ def save_results_to_cache(T, CD, FN, my_F, deps, comptime, funcname,
1102
+ dependencies, compression):
1103
+ """Save computed results T and admin info to cache
1104
+
1105
+ USAGE:
1106
+ save_results_to_cache(T, CD, FN, my_F, deps, comptime, funcname,
1107
+ dependencies, compression)
1108
+ """
1109
+
1110
+ import time, os, sys
1111
+ verbose = False
1112
+
1113
+ # PADARN NOTE 17/12/12: Adding a special case to handle the existence of a
1114
+ # FitInterpolate object. C Structures are serialised so they can be pickled.
1115
+ #---------------------------------------------------------------------------
1116
+ from anuga.fit_interpolate.general_fit_interpolate import FitInterpolate
1117
+
1118
+ import anuga.utilities.quad_tree_ext as quad_tree_ext
1119
+ import anuga.utilities.sparse_matrix_ext as sparse_matrix_ext
1120
+ from anuga.geometry.aabb import AABB
1121
+
1122
+ if isinstance(T, FitInterpolate):
1123
+ if hasattr(T,"D"):
1124
+ T.D=sparse_matrix_ext.serialise_dok(T.D)
1125
+ if hasattr(T,"AtA"):
1126
+ T.AtA=sparse_matrix_ext.serialise_dok(T.AtA)
1127
+ if hasattr(T,"root"):
1128
+ T.root.root=None
1129
+
1130
+
1131
+ #---------------------------------------------------------------------------
1132
+
1133
+ (datafile, compressed1) = myopen(CD+FN+'_'+file_types[0],'wb',compression)
1134
+ (admfile, compressed2) = myopen(CD+FN+'_'+file_types[2],'wb',compression)
1135
+
1136
+ if not datafile:
1137
+ if verbose:
1138
+ log.critical('ERROR: Could not open %s' % datafile.name)
1139
+ raise IOError
1140
+
1141
+ if not admfile:
1142
+ if verbose:
1143
+ log.critical('ERROR: Could not open %s' % admfile.name)
1144
+ raise IOError
1145
+
1146
+ t0 = time.time()
1147
+
1148
+ mysave(T,datafile,compression) # Save data to cache
1149
+ datafile.close()
1150
+ #savetime = round(time.time()-t0,2)
1151
+ savetime = time.time()-t0
1152
+
1153
+ bytecode = get_bytecode(my_F) # Get bytecode from function object
1154
+ admtup = (deps, comptime, bytecode, funcname) # Gather admin info
1155
+
1156
+ mysave(admtup,admfile,compression) # Save admin info to cache
1157
+ admfile.close()
1158
+
1159
+ # Change access rights if possible
1160
+ #
1161
+ #if unix:
1162
+ # try:
1163
+ # exitcode=os.system('chmod 666 '+datafile.name)
1164
+ # exitcode=os.system('chmod 666 '+admfile.name)
1165
+ # except:
1166
+ # pass
1167
+ #else:
1168
+ # pass # FIXME: Take care of access rights under Windows
1169
+
1170
+ return(savetime)
1171
+
1172
+ # -----------------------------------------------------------------------------
1173
+
1174
+ def load_from_cache(CD, FN, compression):
1175
+ """Load previously cached data from file FN
1176
+
1177
+ USAGE:
1178
+ load_from_cache(CD,FN,compression)
1179
+ """
1180
+
1181
+ import time
1182
+
1183
+ (datafile, compressed) = myopen(CD+FN+'_'+file_types[0],"rb",compression)
1184
+ t0 = time.time()
1185
+ T, reason = myload(datafile,compressed)
1186
+
1187
+ loadtime = time.time()-t0
1188
+ datafile.close()
1189
+
1190
+ return T, loadtime, compressed, reason
1191
+
1192
+ # -----------------------------------------------------------------------------
1193
+
1194
+ def myopen(FN, mode, compression=True):
1195
+ """Open file FN using given mode
1196
+
1197
+ USAGE:
1198
+ myopen(FN, mode, compression=True)
1199
+
1200
+ ARGUMENTS:
1201
+ FN -- File name to be opened
1202
+ mode -- Open mode (as in open)
1203
+ compression -- Flag zlib compression
1204
+
1205
+ DESCRIPTION:
1206
+ if compression
1207
+ Attempt first to open FN + '.z'
1208
+ If this fails try to open FN
1209
+ else do the opposite
1210
+ Return file handle plus info about whether it was compressed or not.
1211
+ """
1212
+
1213
+ import string
1214
+
1215
+ # Determine if file exists already (if writing was requested)
1216
+ # This info is only used to determine if access modes should be set
1217
+ #
1218
+ if 'w' in mode or 'a' in mode:
1219
+ try:
1220
+ file = open(FN+'.z','r')
1221
+ file.close()
1222
+ new_file = 0
1223
+ except:
1224
+ try:
1225
+ file = open(FN,'r')
1226
+ file.close()
1227
+ new_file = 0
1228
+ except:
1229
+ new_file = 1
1230
+ else:
1231
+ new_file = 0 #Assume it exists if mode was not 'w'
1232
+
1233
+
1234
+ compressed = 0
1235
+ if compression:
1236
+ try:
1237
+ file = open(FN+'.z',mode)
1238
+ compressed = 1
1239
+ except:
1240
+ try:
1241
+ file = open(FN,mode)
1242
+ except:
1243
+ file = None
1244
+ else:
1245
+ try:
1246
+ file = open(FN,mode)
1247
+ except:
1248
+ try:
1249
+ file = open(FN+'.z',mode)
1250
+ compressed = 1
1251
+ except:
1252
+ file = None
1253
+
1254
+ # Now set access rights if it is a new file
1255
+ #
1256
+ if file and new_file:
1257
+ if unix:
1258
+ exitcode=os.system('chmod 666 '+file.name)
1259
+ else:
1260
+ pass # FIXME: Take care of access rights under Windows
1261
+
1262
+ return(file,compressed)
1263
+
1264
+ # -----------------------------------------------------------------------------
1265
+
1266
+ def myload(file, compressed):
1267
+ """Load data from file
1268
+
1269
+ USAGE:
1270
+ myload(file, compressed)
1271
+ """
1272
+
1273
+ reason = 0
1274
+ try:
1275
+ if compressed:
1276
+ import zlib
1277
+
1278
+ RsC = file.read()
1279
+ try:
1280
+ Rs = zlib.decompress(RsC)
1281
+ except:
1282
+ # File "./caching.py", line 1032, in load_from_cache
1283
+ # T = myload(datafile,compressed)
1284
+ # File "./caching.py", line 1124, in myload
1285
+ # Rs = zlib.decompress(RsC)
1286
+ # zlib.error: Error -5 while decompressing data
1287
+ #raise Exception
1288
+ reason = 6 # Unreadable file
1289
+ return None, reason
1290
+
1291
+
1292
+ del RsC # Free up some space
1293
+ R = pickler.loads(Rs)
1294
+ else:
1295
+ try:
1296
+ R = pickler.load(file)
1297
+ #except EOFError, e:
1298
+ except:
1299
+ #Catch e.g., file with 0 length or corrupted
1300
+ reason = 6 # Unreadable file
1301
+ return None, reason
1302
+
1303
+ except MemoryError:
1304
+ import sys
1305
+ if options['verbose']:
1306
+ log.critical('ERROR: Out of memory while loading %s, aborting'
1307
+ % file.name)
1308
+
1309
+ # Raise the error again for now
1310
+ #
1311
+ raise MemoryError
1312
+
1313
+ return R, reason
1314
+
1315
+ # -----------------------------------------------------------------------------
1316
+
1317
+ def mysave(T, file, compression):
1318
+ """Save data T to file
1319
+
1320
+ USAGE:
1321
+ mysave(T, file, compression)
1322
+
1323
+ """
1324
+
1325
+ bin = options['bin']
1326
+
1327
+ if compression:
1328
+ try:
1329
+ import zlib
1330
+ except:
1331
+ log.critical()
1332
+ log.critical('*** Could not find zlib ***')
1333
+ log.critical('*** Try to run caching with compression off ***')
1334
+ log.critical("*** caching.set_option('compression', 0) ***")
1335
+ raise Exception
1336
+
1337
+
1338
+ try:
1339
+ Ts = pickler.dumps(T, bin)
1340
+ except MemoryError:
1341
+ msg = '****WARNING (caching.py): Could not pickle data for compression.'
1342
+ msg += ' Try using compression = False'
1343
+ raise MemoryError(msg)
1344
+ else:
1345
+ # Compressed pickling
1346
+ TsC = zlib.compress(Ts, comp_level)
1347
+ file.write(TsC)
1348
+ else:
1349
+ # Uncompressed pickling
1350
+ pickler.dump(T, file, bin)
1351
+
1352
+ # FIXME: This may not work on Windoze network drives.
1353
+ # The error msg is IOError: [Errno 22] Invalid argument
1354
+ # Testing with small files was OK, though.
1355
+ # I think this is an OS problem.
1356
+
1357
+ # Excerpt from http://www.ultraseek.com/support/faqs/4173.html
1358
+
1359
+ # The error is caused when there is a problem with server disk access (I/0). This happens at the OS level, and there is no controlling these errors through the Ultraseek application.
1360
+ #
1361
+ #Ultraseek contains an embedded Python interpreter. The exception "exceptions.IOError: [Errno 22] Invalid argument" is generated by the Python interpreter. The exception is thrown when a disk access operation fails due to an I/O-related reason.
1362
+ #
1363
+ #The following extract is taken from the site http://www.python.org:
1364
+ #
1365
+ #---------------------------------------------------------------------------------------------
1366
+ #exception IOError
1367
+ #Raised when an I/O operation (such as a print statement, the built-in open() function or a method of a file object) fails for an I/O-related reason, e.g., ``file not found'' or ``disk full''.
1368
+ #This class is derived from EnvironmentError. See the discussion above for more information on exception instance attributes.
1369
+ #---------------------------------------------------------------------------------------------
1370
+ #
1371
+ #The error code(s) that accompany exceptions are described at:
1372
+ #http://www.python.org/dev/doc/devel//lib/module-errno.html
1373
+ #
1374
+ #You can view several postings on this error message by going to http://www.python.org, and typing the below into the search box:
1375
+ #
1376
+ #exceptions.IOError invalid argument Errno 22
1377
+
1378
+ #try:
1379
+ # pickler.dump(T,file,bin)
1380
+ #except IOError, e:
1381
+ # print e
1382
+ # msg = 'Could not store to %s, bin=%s' %(file, bin)
1383
+ # raise Exception(msg)
1384
+
1385
+
1386
+ # -----------------------------------------------------------------------------
1387
+
1388
+
1389
+ def myhash(T, ids=None):
1390
+ """Compute hashed integer from a range of inputs.
1391
+ If T is not hashable being e.g. a tuple T, myhash will recursively
1392
+ hash the values individually
1393
+
1394
+ USAGE:
1395
+ myhash(T)
1396
+
1397
+ ARGUMENTS:
1398
+ T -- Anything
1399
+ """
1400
+
1401
+ from types import TupleType, ListType, DictType, InstanceType
1402
+
1403
+ if type(T) in [TupleType, ListType, DictType, InstanceType]:
1404
+ # Keep track of unique id's to protect against infinite recursion
1405
+ if ids is None: ids = []
1406
+
1407
+ # Check if T has already been encountered
1408
+ i = id(T)
1409
+
1410
+ if i in ids:
1411
+ return 0 # T has been hashed already
1412
+ else:
1413
+ ids.append(i)
1414
+
1415
+
1416
+
1417
+ # Start hashing
1418
+
1419
+ # On some architectures None, False and True gets different hash values
1420
+ if T is None:
1421
+ return(-1)
1422
+ if T is False:
1423
+ return(0)
1424
+ if T is True:
1425
+ return(1)
1426
+
1427
+ # Get hash values for hashable entries
1428
+ if type(T) in [TupleType, ListType]:
1429
+ hvals = []
1430
+ for t in T:
1431
+ h = myhash(t, ids)
1432
+ hvals.append(h)
1433
+ val = hash(tuple(hvals))
1434
+ elif type(T) == DictType:
1435
+ # Make dictionary ordering unique
1436
+
1437
+ # FIXME(Ole): Need new way of doing this in Python 3.0
1438
+ I = T.items()
1439
+ I.sort()
1440
+ val = myhash(I, ids)
1441
+ elif isinstance(T, num.ndarray):
1442
+ T = num.array(T) # Ensure array is contiguous
1443
+
1444
+ # Use mean value for efficiency
1445
+ val = hash(num.average(T.flat))
1446
+ elif type(T) == InstanceType:
1447
+ # Use the attribute values
1448
+ val = myhash(T.__dict__, ids)
1449
+ else:
1450
+ try:
1451
+ val = hash(T)
1452
+ except:
1453
+ val = 1
1454
+
1455
+ return(val)
1456
+
1457
+
1458
+
1459
+ def compare(A, B, ids=None):
1460
+ """Safe comparison of general objects
1461
+
1462
+ USAGE:
1463
+ compare(A,B)
1464
+
1465
+ DESCRIPTION:
1466
+ Return 1 if A and B they are identical, 0 otherwise
1467
+ """
1468
+
1469
+ # Keep track of unique id's to protect against infinite recursion
1470
+ if ids is None: ids = {}
1471
+
1472
+ # Check if T has already been encountered
1473
+ iA = id(A)
1474
+ iB = id(B)
1475
+
1476
+ if (iA, iB) in ids:
1477
+ # A and B have been compared already
1478
+ return ids[(iA, iB)]
1479
+ else:
1480
+ ids[(iA, iB)] = True
1481
+
1482
+
1483
+ # Check if arguments are of same type
1484
+ if type(A) != type(B):
1485
+ return False
1486
+
1487
+
1488
+ # Compare recursively based on argument type
1489
+ if isinstance(A, (tuple, list)):
1490
+ N = len(A)
1491
+ if len(B) != N:
1492
+ identical = False
1493
+ else:
1494
+ identical = True
1495
+ for i in range(N):
1496
+ if not compare(A[i], B[i], ids):
1497
+ identical = False; break
1498
+
1499
+ elif isinstance(A, dict):
1500
+ if len(A) != len(B):
1501
+ identical = False
1502
+ else:
1503
+ # Make dictionary ordering unique
1504
+ a = A.items(); a.sort()
1505
+ b = B.items(); b.sort()
1506
+
1507
+ identical = compare(a, b, ids)
1508
+
1509
+ elif isinstance(A, num.ndarray):
1510
+ # Use element by element comparison
1511
+ identical = num.alltrue(A==B)
1512
+
1513
+ elif type(A) == types.InstanceType:
1514
+ # Take care of special case where elements are instances
1515
+ # Base comparison on attributes
1516
+ identical = compare(A.__dict__,
1517
+ B.__dict__,
1518
+ ids)
1519
+ else:
1520
+ # Fall back to general code
1521
+ try:
1522
+ identical = (A == B)
1523
+ except:
1524
+ import pickle
1525
+ # Use pickle to compare data
1526
+ # The native pickler must be used
1527
+ # since the faster cPickle does not
1528
+ # guarantee a unique translation
1529
+ try:
1530
+ identical = (pickle.dumps(A,0) == pickle.dumps(B,0))
1531
+ except:
1532
+ identical = False
1533
+
1534
+ # Record result of comparison and return
1535
+ ids[(iA, iB)] = identical
1536
+
1537
+ return(identical)
1538
+
1539
+
1540
+ # -----------------------------------------------------------------------------
1541
+
1542
+ def nospace(s):
1543
+ """Replace spaces in string s with underscores
1544
+
1545
+ USAGE:
1546
+ nospace(s)
1547
+
1548
+ ARGUMENTS:
1549
+ s -- string
1550
+ """
1551
+
1552
+ import string
1553
+
1554
+ newstr = ''
1555
+ for i in range(len(s)):
1556
+ if s[i] == ' ':
1557
+ newstr = newstr+'_'
1558
+ else:
1559
+ newstr = newstr+s[i]
1560
+
1561
+ return(newstr)
1562
+
1563
+ # -----------------------------------------------------------------------------
1564
+
1565
+ def get_funcname(my_F):
1566
+ """Retrieve name of function object func (depending on its type)
1567
+
1568
+ USAGE:
1569
+ get_funcname(my_F)
1570
+ """
1571
+
1572
+ import string
1573
+
1574
+ if type(my_F) == types.FunctionType:
1575
+ funcname = my_F.func_name
1576
+ elif type(my_F) == types.BuiltinFunctionType:
1577
+ funcname = my_F.__name__
1578
+ else:
1579
+ tab = string.maketrans("<>'"," ")
1580
+ tmp = string.translate(repr(my_F), tab)
1581
+ tmp = string.split(tmp)
1582
+ funcname = string.join(tmp)
1583
+
1584
+ # Truncate memory address as in
1585
+ # class __main__.Dummy at 0x00A915D0
1586
+ index = funcname.find('at 0x')
1587
+ if index >= 0:
1588
+ funcname = funcname[:index+5] # Keep info that there is an address
1589
+
1590
+ funcname = nospace(funcname)
1591
+ return(funcname)
1592
+
1593
+ # -----------------------------------------------------------------------------
1594
+
1595
+ def get_bytecode(my_F):
1596
+ """ Get bytecode from function object.
1597
+
1598
+ USAGE:
1599
+ get_bytecode(my_F)
1600
+ """
1601
+
1602
+ if type(my_F) == types.FunctionType:
1603
+ return get_func_code_details(my_F)
1604
+ elif type(my_F) == types.MethodType:
1605
+ return get_func_code_details(my_F.im_func)
1606
+ elif type(my_F) == types.InstanceType:
1607
+ if hasattr(my_F, '__call__'):
1608
+ # Get bytecode from __call__ method
1609
+ bytecode = get_func_code_details(my_F.__call__.im_func)
1610
+
1611
+ # Add hash value of object to detect attribute changes
1612
+ return bytecode + (myhash(my_F),)
1613
+ else:
1614
+ msg = 'Instance %s was passed into caching in the role of a function ' % str(my_F)
1615
+ msg = ' but it was not callable.'
1616
+ raise Exception(msg)
1617
+ elif type(my_F) in [types.BuiltinFunctionType, types.BuiltinMethodType]:
1618
+ # Built-in functions are assumed not to change
1619
+ return None, 0, 0, 0
1620
+ elif type(my_F) == types.ClassType:
1621
+ # Get bytecode from __init__ method
1622
+ bytecode = get_func_code_details(my_F.__init__.im_func)
1623
+ return bytecode
1624
+ else:
1625
+ msg = 'Unknown function type: %s' % type(my_F)
1626
+ raise Exception(msg)
1627
+
1628
+
1629
+
1630
+
1631
+ def get_func_code_details(my_F):
1632
+ """Extract co_code, co_consts, co_argcount, func_defaults
1633
+ """
1634
+
1635
+ bytecode = my_F.func_code.co_code
1636
+ consts = my_F.func_code.co_consts
1637
+ argcount = my_F.func_code.co_argcount
1638
+ defaults = my_F.func_defaults
1639
+
1640
+ return bytecode, consts, argcount, defaults
1641
+
1642
+ # -----------------------------------------------------------------------------
1643
+
1644
+ def get_depstats(dependencies):
1645
+ """ Build dictionary of dependency files and their size, mod. time and ctime.
1646
+
1647
+ USAGE:
1648
+ get_depstats(dependencies):
1649
+ """
1650
+
1651
+ d = {}
1652
+ if dependencies:
1653
+
1654
+ #Expand any wildcards
1655
+ import glob
1656
+ expanded_dependencies = []
1657
+ for FN in dependencies:
1658
+ expanded_FN = glob.glob(FN)
1659
+
1660
+ if expanded_FN == []:
1661
+ errmsg = 'ERROR (caching.py): Dependency '+FN+' does not exist.'
1662
+ raise Exception(errmsg)
1663
+
1664
+ expanded_dependencies += expanded_FN
1665
+
1666
+
1667
+ for FN in expanded_dependencies:
1668
+ if not isinstance(FN, basestring):
1669
+ errmsg = 'ERROR (caching.py): Dependency must be a string.\n'
1670
+ errmsg += ' Dependency given: %s' %FN
1671
+ raise Exception(errmsg)
1672
+ if not os.access(FN,os.F_OK):
1673
+ errmsg = 'ERROR (caching.py): Dependency '+FN+' does not exist.'
1674
+ raise Exception(errmsg)
1675
+ (size,atime,mtime,ctime) = filestat(FN)
1676
+
1677
+ # We don't use atime because that would cause recomputation every time.
1678
+ # We don't use ctime because that is irrelevant and confusing for users.
1679
+ d.update({FN : (size,mtime)})
1680
+
1681
+ return(d)
1682
+
1683
+ # -----------------------------------------------------------------------------
1684
+
1685
+ def filestat(FN):
1686
+ """A safe wrapper using os.stat to get basic file statistics
1687
+ The built-in os.stat breaks down if file sizes are too large (> 2GB ?)
1688
+
1689
+ USAGE:
1690
+ filestat(FN)
1691
+
1692
+ DESCRIPTION:
1693
+ Must compile Python with
1694
+ CFLAGS="`getconf LFS_CFLAGS`" OPT="-g -O2 $CFLAGS" \
1695
+ configure
1696
+ as given in section 8.1.1 Large File Support in the Libray Reference
1697
+ """
1698
+
1699
+ import os, time
1700
+
1701
+ try:
1702
+ stats = os.stat(FN)
1703
+ size = stats[6]
1704
+ atime = stats[7]
1705
+ mtime = stats[8]
1706
+ ctime = stats[9]
1707
+ except:
1708
+
1709
+ # Hack to get the results anyway (works only on Unix at the moment)
1710
+ #
1711
+ log.critical('Hack to get os.stat when files are too large')
1712
+
1713
+ if unix:
1714
+ tmp = '/tmp/cach.tmp.'+`time.time()`+`os.getpid()`
1715
+ # Unique filename, FIXME: Use random number
1716
+
1717
+ # Get size and access time (atime)
1718
+ #
1719
+ exitcode=os.system('ls -l --full-time --time=atime '+FN+' > '+tmp)
1720
+ (size,atime) = get_lsline(tmp)
1721
+
1722
+ # Get size and modification time (mtime)
1723
+ #
1724
+ exitcode=os.system('ls -l --full-time '+FN+' > '+tmp)
1725
+ (size,mtime) = get_lsline(tmp)
1726
+
1727
+ # Get size and ctime
1728
+ #
1729
+ exitcode=os.system('ls -l --full-time --time=ctime '+FN+' > '+tmp)
1730
+ (size,ctime) = get_lsline(tmp)
1731
+
1732
+ try:
1733
+ exitcode=os.system('rm '+tmp)
1734
+ # FIXME: Gives error if file doesn't exist
1735
+ except:
1736
+ pass
1737
+ else:
1738
+ pass
1739
+ raise Exception # FIXME: Windows case
1740
+
1741
+ return(long(size),atime,mtime,ctime)
1742
+
1743
+ # -----------------------------------------------------------------------------
1744
+
1745
+ def get_lsline(FN):
1746
+ """get size and time for filename
1747
+
1748
+ USAGE:
1749
+ get_lsline(file_name)
1750
+
1751
+ DESCRIPTION:
1752
+ Read in one line 'ls -la' item from file (generated by filestat) and
1753
+ convert time to seconds since epoch. Return file size and time.
1754
+ """
1755
+
1756
+ import string, time
1757
+
1758
+ f = open(FN,'r')
1759
+ info = f.read()
1760
+ info = string.split(info)
1761
+
1762
+ size = info[4]
1763
+ week = info[5]
1764
+ mon = info[6]
1765
+ day = info[7]
1766
+ hour = info[8]
1767
+ year = info[9]
1768
+
1769
+ str = week+' '+mon+' '+day+' '+hour+' '+year
1770
+ timetup = time.strptime(str)
1771
+ t = time.mktime(timetup)
1772
+ return(size, t)
1773
+
1774
+ # -----------------------------------------------------------------------------
1775
+
1776
+ def checkdir(CD, verbose=None, warn=False):
1777
+ """Check or create caching directory
1778
+
1779
+ USAGE:
1780
+ checkdir(CD,verbose):
1781
+
1782
+ ARGUMENTS:
1783
+ CD -- Directory
1784
+ verbose -- Flag verbose output (default: None)
1785
+
1786
+ DESCRIPTION:
1787
+ If CD does not exist it will be created if possible
1788
+ """
1789
+
1790
+ import os
1791
+ import os.path
1792
+
1793
+ if CD[-1] != os.sep:
1794
+ CD = CD + os.sep # Add separator for directories
1795
+
1796
+ CD = os.path.expanduser(CD) # Expand ~ or ~user in pathname
1797
+ if not (os.access(CD,os.R_OK and os.W_OK) or CD == ''):
1798
+ try:
1799
+ exitcode=os.mkdir(CD)
1800
+
1801
+ # Change access rights if possible
1802
+ #
1803
+ if unix:
1804
+ exitcode=os.system('chmod 777 '+CD)
1805
+ else:
1806
+ pass # FIXME: What about acces rights under Windows?
1807
+ if verbose: log.critical('MESSAGE: Directory %s created.' % CD)
1808
+ except:
1809
+ if warn is True:
1810
+ log.critical('WARNING: Directory %s could not be created.' % CD)
1811
+ if unix:
1812
+ CD = '/tmp/'
1813
+ else:
1814
+ CD = 'C:'
1815
+ if warn is True:
1816
+ log.critical('Using directory %s instead' % CD)
1817
+
1818
+ return(CD)
1819
+
1820
+ checkdir(cachedir, warn=True)
1821
+
1822
+ #==============================================================================
1823
+ # Statistics
1824
+ #==============================================================================
1825
+
1826
+ def addstatsline(CD, funcname, FN, Retrieved, reason, comptime, loadtime,
1827
+ compression):
1828
+ """Add stats entry
1829
+
1830
+ USAGE:
1831
+ addstatsline(CD,funcname,FN,Retrieved,reason,comptime,loadtime,compression)
1832
+
1833
+ DESCRIPTION:
1834
+ Make one entry in the stats file about one cache hit recording time saved
1835
+ and other statistics. The data are used by the function cachestat.
1836
+ """
1837
+
1838
+ import os, time
1839
+
1840
+ try:
1841
+ TimeTuple = time.localtime(time.time())
1842
+ extension = time.strftime('%b%Y',TimeTuple)
1843
+ SFN = CD+statsfile+'.'+extension
1844
+ #statfile = open(SFN,'a')
1845
+ (statfile, dummy) = myopen(SFN,'a',compression=0)
1846
+
1847
+ # Change access rights if possible
1848
+ #
1849
+ #if unix:
1850
+ # try:
1851
+ # exitcode=os.system('chmod 666 '+SFN)
1852
+ # except:
1853
+ # pass
1854
+ except:
1855
+ log.critical('Warning: Stat file could not be opened')
1856
+
1857
+ try:
1858
+ if os.environ.has_key('USER'):
1859
+ user = os.environ['USER']
1860
+ else:
1861
+ user = 'Nobody'
1862
+
1863
+ date = time.asctime(TimeTuple)
1864
+
1865
+ if Retrieved:
1866
+ hit = '1'
1867
+ else:
1868
+ hit = '0'
1869
+
1870
+ # Get size of result file
1871
+ #
1872
+ if compression:
1873
+ stats = os.stat(CD+FN+'_'+file_types[0]+'.z')
1874
+ else:
1875
+ stats = os.stat(CD+FN+'_'+file_types[0])
1876
+
1877
+ if stats:
1878
+ size = stats[6]
1879
+ else:
1880
+ size = -1 # Error condition, but don't crash. This is just statistics
1881
+
1882
+ # Build entry
1883
+ #
1884
+ entry = date + ',' +\
1885
+ user + ',' +\
1886
+ FN + ',' +\
1887
+ str(int(size)) + ',' +\
1888
+ str(compression) + ',' +\
1889
+ hit + ',' +\
1890
+ str(reason) + ',' +\
1891
+ str(round(comptime,4)) + ',' +\
1892
+ str(round(loadtime,4)) +\
1893
+ CR
1894
+
1895
+ statfile.write(entry)
1896
+ statfile.close()
1897
+ except:
1898
+ log.critical('Warning: Writing of stat file failed')
1899
+
1900
+ # -----------------------------------------------------------------------------
1901
+
1902
+ # FIXME: should take cachedir as an optional arg
1903
+ #
1904
+ def __cachestat(sortidx=4, period=-1, showuser=None, cachedir=None):
1905
+ """ List caching statistics.
1906
+
1907
+ USAGE:
1908
+ __cachestat(sortidx=4,period=-1,showuser=None,cachedir=None):
1909
+
1910
+ Generate statistics of caching efficiency.
1911
+ The parameter sortidx determines by what field lists are sorted.
1912
+ If the optional keyword period is set to -1,
1913
+ all available caching history is used.
1914
+ If it is 0 only the current month is used.
1915
+ Future versions will include more than one month....
1916
+ OMN 20/8/2000
1917
+ """
1918
+
1919
+ import os
1920
+ import os.path
1921
+ from string import split, rstrip, find
1922
+ from time import strptime, localtime, strftime, mktime, ctime
1923
+
1924
+ # sortidx = 4 # Index into Fields[1:]. What to sort by.
1925
+
1926
+ Fields = ['Name', 'Hits', 'Exec(s)', \
1927
+ 'Cache(s)', 'Saved(s)', 'Gain(%)', 'Size']
1928
+ Widths = [25,7,9,9,9,9,13]
1929
+ #Types = ['s','d','d','d','d','.2f','d']
1930
+ Types = ['s','d','.2f','.2f','.2f','.2f','d']
1931
+
1932
+ Dictnames = ['Function', 'User']
1933
+
1934
+ if not cachedir:
1935
+ cachedir = checkdir(options['cachedir'])
1936
+
1937
+ SD = os.path.expanduser(cachedir) # Expand ~ or ~user in pathname
1938
+
1939
+ if period == -1: # Take all available stats
1940
+ SFILENAME = statsfile
1941
+ else: # Only stats from current month
1942
+ # MAKE THIS MORE GENERAL SO period > 0 counts several months backwards!
1943
+ TimeTuple = localtime(time())
1944
+ extension = strftime('%b%Y',TimeTuple)
1945
+ SFILENAME = statsfile+'.'+extension
1946
+
1947
+ DIRLIST = os.listdir(SD)
1948
+ SF = []
1949
+ for FN in DIRLIST:
1950
+ if find(FN,SFILENAME) >= 0:
1951
+ SF.append(FN)
1952
+
1953
+ blocksize = 15000000
1954
+ total_read = 0
1955
+ total_hits = 0
1956
+ total_discarded = 0
1957
+ firstday = mktime(strptime('2030','%Y'))
1958
+ # FIXME: strptime don't exist in WINDOWS ?
1959
+ lastday = 0
1960
+
1961
+ FuncDict = {}
1962
+ UserDict = {}
1963
+ for FN in SF:
1964
+ input = open(SD+FN,'r')
1965
+ log.critical('Reading file %s' % SD+FN)
1966
+
1967
+ while True:
1968
+ A = input.readlines(blocksize)
1969
+ if len(A) == 0: break
1970
+ total_read = total_read + len(A)
1971
+ for record in A:
1972
+ record = tuple(split(rstrip(record),','))
1973
+
1974
+ if len(record) == 9:
1975
+ timestamp = record[0]
1976
+
1977
+ try:
1978
+ t = mktime(strptime(timestamp))
1979
+ except:
1980
+ total_discarded = total_discarded + 1
1981
+ continue
1982
+
1983
+ if t > lastday:
1984
+ lastday = t
1985
+ if t < firstday:
1986
+ firstday = t
1987
+
1988
+ user = record[1]
1989
+ my_F = record[2]
1990
+
1991
+ # Strip hash-stamp off
1992
+ #
1993
+ i = find(my_F,'[')
1994
+ my_F = my_F[:i]
1995
+
1996
+ size = float(record[3])
1997
+
1998
+ # Compression kepword can be Boolean
1999
+ if record[4] in ['True', '1']:
2000
+ compression = 1
2001
+ elif record[4] in ['False', '0']:
2002
+ compression = 0
2003
+ else:
2004
+ log.critical('Unknown value of compression %s' % str(record[4]))
2005
+ log.critical(str(record))
2006
+ total_discarded = total_discarded + 1
2007
+ continue
2008
+
2009
+ #compression = int(record[4]) # Can be Boolean
2010
+ hit = int(record[5])
2011
+ reason = int(record[6]) # Not used here
2012
+ cputime = float(record[7])
2013
+ loadtime = float(record[8])
2014
+
2015
+ if hit:
2016
+ total_hits = total_hits + 1
2017
+ saving = cputime-loadtime
2018
+
2019
+ if cputime != 0:
2020
+ rel_saving = round(100.0*saving/cputime,2)
2021
+ else:
2022
+ #rel_saving = round(1.0*saving,2)
2023
+ rel_saving = 100.0 - round(1.0*saving,2) # A bit of a hack
2024
+
2025
+ info = [1,cputime,loadtime,saving,rel_saving,size]
2026
+
2027
+ UpdateDict(UserDict,user,info)
2028
+ UpdateDict(FuncDict,my_F,info)
2029
+ else:
2030
+ pass #Stats on recomputations and their reasons could go in here
2031
+
2032
+ else:
2033
+ total_discarded = total_discarded + 1
2034
+
2035
+ input.close()
2036
+
2037
+ # Compute averages of all sums and write list
2038
+ #
2039
+
2040
+ if total_read == 0:
2041
+ printline(Widths,'=')
2042
+ log.critical('CACHING STATISTICS: No valid records read')
2043
+ printline(Widths,'=')
2044
+ return
2045
+
2046
+ log.critical()
2047
+ printline(Widths,'=')
2048
+ log.critical('CACHING STATISTICS: '+ctime(firstday)+' to '+ctime(lastday))
2049
+ printline(Widths,'=')
2050
+ log.critical(' Total number of valid records %d' % total_read)
2051
+ log.critical(' Total number of discarded records %d' % total_discarded)
2052
+ log.critical(' Total number of hits %d' % total_hits)
2053
+ log.critical()
2054
+
2055
+ log.critical(' Fields %s are averaged over number of hits' % Fields[2:])
2056
+ log.critical(' Time is measured in seconds and size in bytes')
2057
+ log.critical(' Tables are sorted by %s' % Fields[1:][sortidx])
2058
+
2059
+ if showuser:
2060
+ Dictionaries = [FuncDict, UserDict]
2061
+ else:
2062
+ Dictionaries = [FuncDict]
2063
+
2064
+ i = 0
2065
+ for Dict in Dictionaries:
2066
+ for key in Dict.keys():
2067
+ rec = Dict[key]
2068
+ for n in range(len(rec)):
2069
+ if n > 0:
2070
+ rec[n] = round(1.0*rec[n]/rec[0],2)
2071
+ Dict[key] = rec
2072
+
2073
+ # Sort and output
2074
+ #
2075
+ keylist = SortDict(Dict,sortidx)
2076
+
2077
+ # Write Header
2078
+ #
2079
+ log.critical()
2080
+ printline(Widths,'-')
2081
+ n = 0
2082
+ for s in Fields:
2083
+ if s == Fields[0]: # Left justify
2084
+ s = Dictnames[i] + ' ' + s; i=i+1
2085
+ #exec "print '%-" + str(Widths[n]) + "s'%s,"; n=n+1
2086
+ log.critical('%-*s' % (Widths[n], s))
2087
+ n += 1
2088
+ else:
2089
+ #exec "print '%" + str(Widths[n]) + "s'%s,"; n=n+1
2090
+ log.critical('%*s' % (Widths[n], s))
2091
+ n += 1
2092
+ log.critical()
2093
+ printline(Widths,'-')
2094
+
2095
+ # Output Values
2096
+ #
2097
+ for key in keylist:
2098
+ rec = Dict[key]
2099
+ n = 0
2100
+ if len(key) > Widths[n]: key = key[:Widths[n]-3] + '...'
2101
+ #exec "print '%-" + str(Widths[n]) + Types[n]+"'%key,";n=n+1
2102
+ log.critical('%-*s' % (Widths[n], str(key)))
2103
+ n += 1
2104
+ for val in rec:
2105
+ #exec "print '%" + str(Widths[n]) + Types[n]+"'%val,"; n=n+1
2106
+ log.critical('%*s' % (Widths[n], str(key)))
2107
+ n += 1
2108
+ log.critical()
2109
+ log.critical()
2110
+
2111
+ #==============================================================================
2112
+ # Auxiliary stats functions
2113
+ #==============================================================================
2114
+
2115
+ def UpdateDict(Dict, key, info):
2116
+ """Update dictionary by adding new values to existing.
2117
+
2118
+ USAGE:
2119
+ UpdateDict(Dict,key,info)
2120
+ """
2121
+
2122
+ if Dict.has_key(key):
2123
+ dinfo = Dict[key]
2124
+ for n in range(len(dinfo)):
2125
+ dinfo[n] = info[n] + dinfo[n]
2126
+ else:
2127
+ dinfo = info[:] # Make a copy of info list
2128
+
2129
+ Dict[key] = dinfo
2130
+ return Dict
2131
+
2132
+ # -----------------------------------------------------------------------------
2133
+
2134
+ def SortDict(Dict, sortidx=0):
2135
+ """Sort dictionary
2136
+
2137
+ USAGE:
2138
+ SortDict(Dict,sortidx):
2139
+
2140
+ DESCRIPTION:
2141
+ Sort dictionary of lists according field number 'sortidx'
2142
+ """
2143
+
2144
+ sortlist = []
2145
+ keylist = Dict.keys()
2146
+ for key in keylist:
2147
+ rec = Dict[key]
2148
+ if not isinstance(rec, (list, tuple)):
2149
+ rec = [rec]
2150
+
2151
+ if sortidx > len(rec)-1:
2152
+ msg = 'ERROR: Sorting index too large, sortidx = %s' % str(sortidx)
2153
+ raise IndexError(msg)
2154
+
2155
+ val = rec[sortidx]
2156
+ sortlist.append(val)
2157
+
2158
+ A = map(None,sortlist,keylist)
2159
+ A.sort()
2160
+ keylist = map(lambda x: x[1], A) # keylist sorted by sortidx
2161
+
2162
+ return(keylist)
2163
+
2164
+ # -----------------------------------------------------------------------------
2165
+
2166
+ def printline(Widths,char):
2167
+ """Print textline in fixed field.
2168
+
2169
+ USAGE:
2170
+ printline(Widths,char)
2171
+ """
2172
+
2173
+ s = ''
2174
+ for n in range(len(Widths)):
2175
+ s = s+Widths[n]*char
2176
+ if n > 0:
2177
+ s = s+char
2178
+
2179
+ log.critical(s)
2180
+
2181
+ #==============================================================================
2182
+ # Messages
2183
+ #==============================================================================
2184
+
2185
+ def msg1(funcname, args, kwargs, reason):
2186
+ """Message 1
2187
+
2188
+ USAGE:
2189
+ msg1(funcname, args, kwargs, reason):
2190
+ """
2191
+
2192
+ import string
2193
+
2194
+ print_header_box('Evaluating function %s' %funcname)
2195
+
2196
+ msg7(args, kwargs)
2197
+ msg8(reason)
2198
+
2199
+ print_footer()
2200
+
2201
+ # -----------------------------------------------------------------------------
2202
+
2203
+ def msg2(funcname, args, kwargs, comptime, reason):
2204
+ """Message 2
2205
+
2206
+ USAGE:
2207
+ msg2(funcname, args, kwargs, comptime, reason)
2208
+ """
2209
+
2210
+ import string
2211
+
2212
+ #try:
2213
+ # R = Reason_msg[reason]
2214
+ #except:
2215
+ # R = 'Unknown reason'
2216
+
2217
+ #print_header_box('Caching statistics (storing) - %s' %R)
2218
+ print_header_box('Caching statistics (storing)')
2219
+
2220
+ msg6(funcname,args,kwargs)
2221
+ msg8(reason)
2222
+
2223
+ log.critical(string.ljust('| CPU time:', textwidth1) +
2224
+ str(round(comptime,2)) + ' seconds')
2225
+
2226
+ # -----------------------------------------------------------------------------
2227
+
2228
+ def msg3(savetime, CD, FN, deps, compression):
2229
+ """Message 3
2230
+
2231
+ USAGE:
2232
+ msg3(savetime, CD, FN, deps, compression)
2233
+ """
2234
+
2235
+ import string
2236
+ log.critical(string.ljust('| Loading time:', textwidth1) +
2237
+ str(round(savetime,2)) + ' seconds (estimated)')
2238
+ msg5(CD,FN,deps,compression)
2239
+
2240
+ # -----------------------------------------------------------------------------
2241
+
2242
+ def msg4(funcname, args, kwargs, deps, comptime, loadtime, CD, FN, compression):
2243
+ """Message 4
2244
+
2245
+ USAGE:
2246
+ msg4(funcname, args, kwargs, deps, comptime, loadtime, CD, FN, compression)
2247
+ """
2248
+
2249
+ import string
2250
+
2251
+ print_header_box('Caching statistics (retrieving)')
2252
+
2253
+ msg6(funcname,args,kwargs)
2254
+ log.critical(string.ljust('| CPU time:', textwidth1) +
2255
+ str(round(comptime,2)) + ' seconds')
2256
+ log.critical(string.ljust('| Loading time:', textwidth1) +
2257
+ str(round(loadtime,2)) + ' seconds')
2258
+ log.critical(string.ljust('| Time saved:', textwidth1) +
2259
+ str(round(comptime-loadtime,2)) + ' seconds')
2260
+ msg5(CD,FN,deps,compression)
2261
+
2262
+ # -----------------------------------------------------------------------------
2263
+
2264
+ def msg5(CD, FN, deps, compression):
2265
+ """Message 5
2266
+
2267
+ USAGE:
2268
+ msg5(CD, FN, deps, compression)
2269
+
2270
+ DESCRIPTION:
2271
+ Print dependency stats. Used by msg3 and msg4
2272
+ """
2273
+
2274
+ import os, time, string
2275
+
2276
+ log.critical('|')
2277
+ log.critical(string.ljust('| Caching dir: ', textwidth1) + CD)
2278
+
2279
+ if compression:
2280
+ suffix = '.z'
2281
+ bytetext = 'bytes, compressed'
2282
+ else:
2283
+ suffix = ''
2284
+ bytetext = 'bytes'
2285
+
2286
+ for file_type in file_types:
2287
+ file_name = FN + '_' + file_type + suffix
2288
+ stats = os.stat(CD+file_name)
2289
+ log.critical(string.ljust('| ' + file_type + ' file: ', textwidth1) +
2290
+ file_name + '('+ str(stats[6]) + ' ' + bytetext + ')')
2291
+
2292
+ log.critical('|')
2293
+ if len(deps) > 0:
2294
+ log.critical('| Dependencies: ')
2295
+ dependencies = deps.keys()
2296
+ dlist = []; maxd = 0
2297
+ tlist = []; maxt = 0
2298
+ slist = []; maxs = 0
2299
+ for d in dependencies:
2300
+ stats = deps[d]
2301
+ t = time.ctime(stats[1])
2302
+ s = str(stats[0])
2303
+ #if s[-1] == 'L':
2304
+ # s = s[:-1] # Strip rightmost 'long integer' L off.
2305
+ # # FIXME: Unnecessary in versions later than 1.5.2
2306
+
2307
+ if len(d) > maxd: maxd = len(d)
2308
+ if len(t) > maxt: maxt = len(t)
2309
+ if len(s) > maxs: maxs = len(s)
2310
+ dlist.append(d)
2311
+ tlist.append(t)
2312
+ slist.append(s)
2313
+
2314
+ for n in range(len(dlist)):
2315
+ d = string.ljust(dlist[n]+':', maxd+1)
2316
+ t = string.ljust(tlist[n], maxt)
2317
+ s = string.rjust(slist[n], maxs)
2318
+
2319
+ log.critical('| %s %s %s bytes' % (d, t, s))
2320
+ else:
2321
+ log.critical('| No dependencies')
2322
+ print_footer()
2323
+
2324
+ # -----------------------------------------------------------------------------
2325
+
2326
+ def msg6(funcname, args, kwargs):
2327
+ """Message 6
2328
+
2329
+ USAGE:
2330
+ msg6(funcname, args, kwargs)
2331
+ """
2332
+
2333
+ import string
2334
+ log.critical(string.ljust('| Function:', textwidth1) + funcname)
2335
+
2336
+ msg7(args, kwargs)
2337
+
2338
+ # -----------------------------------------------------------------------------
2339
+
2340
+ def msg7(args, kwargs):
2341
+ """Message 7
2342
+
2343
+ USAGE:
2344
+ msg7(args, kwargs):
2345
+ """
2346
+
2347
+ import string
2348
+
2349
+ args_present = 0
2350
+ if args:
2351
+ if len(args) == 1:
2352
+ log.critical(string.ljust('| Argument:', textwidth1) +
2353
+ mkargstr(args[0], textwidth2))
2354
+ else:
2355
+ log.critical(string.ljust('| Arguments:', textwidth1) +
2356
+ mkargstr(args, textwidth2))
2357
+ args_present = 1
2358
+
2359
+ if kwargs:
2360
+ if len(kwargs) == 1:
2361
+ log.critical(string.ljust('| Keyword Arg:', textwidth1) +
2362
+ mkargstr(kwargs, textwidth2))
2363
+ else:
2364
+ log.critical(string.ljust('| Keyword Args:', textwidth1) +
2365
+ mkargstr(kwargs, textwidth2))
2366
+ args_present = 1
2367
+
2368
+ if not args_present:
2369
+ log.critical('| No arguments') # Default if no args or kwargs present
2370
+
2371
+ # -----------------------------------------------------------------------------
2372
+
2373
+ def msg8(reason):
2374
+ """Message 8
2375
+
2376
+ USAGE:
2377
+ msg8(reason):
2378
+ """
2379
+
2380
+ import string
2381
+
2382
+ try:
2383
+ R = Reason_msg[reason]
2384
+ except:
2385
+ R = 'Unknown'
2386
+
2387
+ log.critical(string.ljust('| Reason:', textwidth1) + R)
2388
+
2389
+ # -----------------------------------------------------------------------------
2390
+
2391
+ def print_header_box(line):
2392
+ """Print line in a nice box.
2393
+
2394
+ USAGE:
2395
+ print_header_box(line)
2396
+
2397
+ """
2398
+ global textwidth3
2399
+
2400
+ import time
2401
+
2402
+ time_stamp = time.ctime(time.time())
2403
+ line = time_stamp + '. ' + line
2404
+
2405
+ N = len(line) + 1
2406
+ s = '+' + '-'*N + CR
2407
+
2408
+ log.critical(s + '| ' + line + CR + s)
2409
+
2410
+ textwidth3 = N
2411
+
2412
+ # -----------------------------------------------------------------------------
2413
+
2414
+ def print_footer():
2415
+ """Print line same width as that of print_header_box.
2416
+ """
2417
+
2418
+ N = textwidth3
2419
+ s = '+' + '-'*N + CR
2420
+
2421
+ log.critical(s)
2422
+
2423
+ # -----------------------------------------------------------------------------
2424
+
2425
+ def mkargstr(args, textwidth, argstr = '', level=0):
2426
+ """ Generate a string containing first textwidth characters of arguments.
2427
+
2428
+ USAGE:
2429
+ mkargstr(args, textwidth, argstr = '', level=0)
2430
+
2431
+ DESCRIPTION:
2432
+ Exactly the same as str(args) possibly followed by truncation,
2433
+ but faster if args is huge.
2434
+ """
2435
+
2436
+ if level > 10:
2437
+ # Protect against circular structures
2438
+ return '...'
2439
+
2440
+ WasTruncated = 0
2441
+
2442
+ if not isinstance(args, (tuple, list, dict)):
2443
+ if isinstance(args, basestring):
2444
+ argstr = argstr + "'"+str(args)+"'"
2445
+ else:
2446
+ # Truncate large numeric arrays before using str()
2447
+ if isinstance(args, num.ndarray):
2448
+ # if len(args.flat) > textwidth:
2449
+ # Changed by Duncan and Nick 21/2/07 .flat has problems with
2450
+ # non-contigous arrays and ravel is equal to .flat except it
2451
+ # can work with non-contiguous arrays
2452
+ if len(num.ravel(args)) > textwidth:
2453
+ args = 'Array: ' + str(args.shape)
2454
+
2455
+ argstr = argstr + str(args)
2456
+ else:
2457
+ if isinstance(args, dict):
2458
+ argstr = argstr + "{"
2459
+ for key in args.keys():
2460
+ argstr = argstr + mkargstr(key, textwidth, level=level+1) + ": " + \
2461
+ mkargstr(args[key], textwidth, level=level+1) + ", "
2462
+ if len(argstr) > textwidth:
2463
+ WasTruncated = 1
2464
+ break
2465
+ argstr = argstr[:-2] # Strip off trailing comma
2466
+ argstr = argstr + "}"
2467
+
2468
+ else:
2469
+ if isinstance(args, tuple):
2470
+ lc = '('
2471
+ rc = ')'
2472
+ else:
2473
+ lc = '['
2474
+ rc = ']'
2475
+ argstr = argstr + lc
2476
+ for arg in args:
2477
+ argstr = argstr + mkargstr(arg, textwidth, level=level+1) + ', '
2478
+ if len(argstr) > textwidth:
2479
+ WasTruncated = 1
2480
+ break
2481
+
2482
+ # Strip off trailing comma and space unless singleton tuple
2483
+ #
2484
+ if isinstance(args, tuple) and len(args) == 1:
2485
+ argstr = argstr[:-1]
2486
+ else:
2487
+ argstr = argstr[:-2]
2488
+ argstr = argstr + rc
2489
+
2490
+ if len(argstr) > textwidth:
2491
+ WasTruncated = 1
2492
+
2493
+ if WasTruncated:
2494
+ argstr = argstr[:textwidth]+'...'
2495
+ return(argstr)
2496
+
2497
+ # -----------------------------------------------------------------------------
2498
+
2499
+ def logtestOK(msg):
2500
+ """Print OK msg if test is OK.
2501
+
2502
+ USAGE
2503
+ logtestOK(message)
2504
+ """
2505
+
2506
+ import string
2507
+
2508
+ log.critical(string.ljust(msg, textwidth4) + ' - OK' )
2509
+
2510
+ #raise StandardError
2511
+
2512
+ # -----------------------------------------------------------------------------
2513
+
2514
+ def logtesterror(msg):
2515
+ """Print error if test fails.
2516
+
2517
+ USAGE
2518
+ logtesterror(message)
2519
+ """
2520
+
2521
+ log.critical('ERROR (caching.test): %s' % msg)
2522
+ log.critical('Please send this code example and output to ')
2523
+ log.critical('Ole.Nielsen@anu.edu.au')
2524
+ log.critical()
2525
+ log.critical()
2526
+
2527
+ raise StandardError
2528
+
2529
+ #-------------------------------------------------------------
2530
+ if __name__ == "__main__":
2531
+ pass