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.
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__config__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.py +363 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.py +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/__metadata__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.py +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.py +251 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/ermapper_grids.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.py +483 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/file_function.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.py +1080 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/gauge.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.py +865 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/general_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.py +862 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_boundary_conditions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.py +2274 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/generic_domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.py +1011 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/mesh_factory_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.py +1488 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_mesh_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/neighbour_table_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.py +299 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/pmesh2domain_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.py +2162 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/quantity_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.py +321 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/region.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.py +48 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.py +167 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tag_region.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/show_balanced_limiters.py +87 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ermapper.py +189 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_gauge.py +539 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_general_mesh.py +517 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_boundary_conditions.py +439 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_generic_domain.py +907 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_ghost.py +52 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_neighbour_mesh.py +1854 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_pmesh2domain.py +219 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_quantity.py +2859 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_region.py +99 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_tag_region.py +258 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/tests/test_util.py +1632 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.py +928 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/abstract_2d_finite_volumes/util.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.py +12 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.py +298 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/advection_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/advection/tests/test_advection.py +183 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.py +654 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/alpha_shape.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/alpha_shape/tests/test_alpha_shape.py +402 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.py +46 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/anuga_exceptions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.py +18 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.py +2531 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/caching.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.py +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/dummy_classes_for_testing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/caching/tests/test_caching.py +895 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.py +82 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/compile_all.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.py +273 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/config.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.py +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.py +478 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/geo_reference.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.py +250 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/lat_long_UTM_conversion.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.py +128 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/point.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.py +233 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/redfearn.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.csv +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.csv +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z53.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.csv +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/projection_test_points_z54.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/data/redfearn.xls +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_geo_reference.py +716 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_lat_long_UTM_conversion.py +126 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_point.py +125 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/coordinate_transforms/tests/test_redfearn.py +508 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.py +1627 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_class.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.py +114 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_polygons.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.py +362 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/culvert_routines.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.py +1630 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/new_culvert_class.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/culvert_polygons_example.py +38 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.csv +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.csv +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/example_rating_curve2.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/data/unittests.xls +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/run_culvert_flat_water_lev.py +173 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_class.py +812 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_polygons.py +84 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines.py +586 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_10pct.py +342 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_box_1pct.py +342 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_10pct.py +338 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_culvert_routines_pipe_1pct.py +338 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/culvert_flows/tests/test_new_culvert_class.py +810 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.py +223 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/exposure.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.py +467 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/inundation_damage.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_exposure.py +325 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/damage_modelling/tests/test_inundation_damage.py +610 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.py +130 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/error_api.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.py +193 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/extras.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.py +54 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.py +399 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/csv_file.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.py +120 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/mux.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.py +266 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/netcdf.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.py +29 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.py +293 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.py +1552 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_csv.py +413 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_mux.py +1539 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_read_sww.py +350 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_sww.py +560 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_ungenerate.py +283 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/tests/test_urs.py +217 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.py +92 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/ungenerate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.py +323 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file/urs_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.py +20 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.py +213 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/asc2dem.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/calc_grid_values_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.py +165 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/csv2sts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.py +90 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2array.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.py +145 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2dem.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.py +357 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/dem2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.py +327 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/esri2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.py +436 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/ferret2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.py +367 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/file_conversion.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.py +122 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/grd2array.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.py +181 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sdf2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.py +29 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.py +141 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sts2sww_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.py +321 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2array.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.py +550 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.py +547 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2dem_new.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.py +175 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/sww2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_2pts.py +249 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_csv2sts.py +118 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2array.py +121 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2dem.py +220 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_dem2pts.py +411 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_file_conversion.py +953 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_grd2array.py +270 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_sww2dem.py +1882 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sts.py +2127 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/tests/test_urs2sww.py +628 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.py +202 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2nc.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.py +316 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.py +306 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.py +71 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/urs2txt.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.py +39 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/file_conversion/xya2pts.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.py +12 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.py +367 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/benchmark_least_squares.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.py +611 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fit.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/fitsmooth.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.py +127 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/general_fit_interpolate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.py +1144 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.py +305 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/interpolate2d.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.py +79 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/profile_long_benchmark.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.py +131 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/run_long_benchmark.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.py +37 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_fit.py +1150 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate.py +1952 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_interpolate2d.py +469 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/tests/test_search_functions.py +236 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.py +66 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/fit_interpolate/ticket178_benchmark.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.py +133 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/aabb.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.py +1138 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.py +133 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/polygon_function.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.py +190 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/quad.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_geometry.py +110 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geometry/tests/test_polygon.py +1994 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.py +1698 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/geospatial_data.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/geospatial_data/tests/test_geospatial_data.py +1853 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.py +136 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/add_csv_header.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.py +14 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/file_length.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.py +96 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/maxasc.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.py +109 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/order_boundary.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.py +22 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_250m_all.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/perthAll_stage_original.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.asc +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_bad_num_lines.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_header_differs.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test1_wrong_num_columns.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.expected.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test2.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.asc +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.expected.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test3.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_maxasc.py +150 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/lib/tests/test_order_boundary.py +397 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.py +1073 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/loadASCII.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.py +21 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/load_mesh/tests/test_loadASCII.py +544 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.py +9 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/compile.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.py +221 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/mesh_engine_c_layer.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.py +29 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/mesh_engine/tests/test_generate_mesh.py +470 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.py +125 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/base_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.py +79 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/boundary_flux_integral_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.py +240 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/change_friction_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.py +142 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_quantities_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.py +85 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/collect_max_stage_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.py +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/compile_all.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.py +495 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/elliptic_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.py +859 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/erosion_operators.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.py +563 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/kinematic_viscosity_operator_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.py +87 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/mannings_operator_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.py +431 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/rate_operators.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.py +290 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.py +148 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_elevation_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.py +159 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_friction_operators.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.py +172 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.py +158 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_quantity_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.py +131 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.py +135 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_stage_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.py +170 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/set_w_uh_vh_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.py +33 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_base_operator.py +51 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_boundary_flux_integral_operator.py +98 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_erosion_operators.py +344 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_kinematic_viscosity_operator.py +1366 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_rate_operators.py +888 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_elevation_operator.py +1034 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_quantity.py +511 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_stage_operator.py +491 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/operators/tests/test_set_w_uh_vh_operators.py +211 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.py +31 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.py +14 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/config.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.py +1682 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/distribute_mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.py +205 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_advection.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.py +467 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_api.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.py +332 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_box_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.py +283 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_boyd_pipe_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.py +207 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_generic_communications.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.py +605 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.py +228 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_enquiry.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.py +281 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_inlet_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.py +230 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_internal_boundary_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.py +445 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_meshes.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.py +959 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_operator_factory.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.py +282 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_shallow_water.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.py +1241 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_structure_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.py +281 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/parallel_weir_orifice_trapezoid_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.py +205 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/print_stats.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.py +528 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/pypar_ext.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.py +309 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/sequential_distribute.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.py +100 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/parallel/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.py +345 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/AppShell.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.py +9253 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/Pmw.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.py +671 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwBlt.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.py +389 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/PmwColor.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.py +80 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ProgressBar.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.py +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/compile.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/cursornames.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/exesetup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.py +1519 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/graphical_mesh_generator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/addVertex.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/autoSegGiveAlpha.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/default.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/edit.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/hole.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/joinVer.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/meshGen.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/no_see.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/pointer.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/region.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/see.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/segment.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/sep.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/vertex.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom0.5.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoom2.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.gif +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/icons/zoomToMesh.lic +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.py +2416 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.py +373 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_interface.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.py +130 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/mesh_quadtree.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.py +43 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/run_setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.py +22 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh.py +2129 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_mesh_interface.py +988 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/tests/test_meshquad.py +189 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.py +150 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/timing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.py +80 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/toolbarbutton.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.py +69 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/ungen_example.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.py +47 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/view_tsh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.py +302 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pmesh/visualmesh.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.py +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/metis_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.py +54 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/pymetis/tests/test_metis.py +141 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.py +49 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.py +12 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.py +1028 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/boundaries.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.py +118 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/checkpoint.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.py +1339 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/forcing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.py +101 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/most2nc.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.py +37 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.py +3114 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/shallow_water_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swDE1_domain_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.py +576 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/swb2_domain_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.py +652 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/sww_interrogate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/__init__.py +8 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.csv +46 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/polygon_values_example.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.csv +7855 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_large.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.csv +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/data/test_points_small.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_DE1_domain.py +111 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_data_manager.py +879 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_forcing.py +2271 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_loadsave.py +212 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_local_extrapolation_and_flux_updating.py +114 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_most2nc.py +52 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_shallow_water_domain.py +8670 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_swb2_domain.py +106 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_sww_interrogate.py +888 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/test_system.py +193 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-e-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-n-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.grd-z-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/1-z.lic +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-e-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-n-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.grd-z-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/2-z.lic +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-e-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-n-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.grd-z-mux2 +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/3-z.lic +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_1_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_2_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_3_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/e_combined_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_1_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_2_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_3_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/n_combined_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.lic +18 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/thinned_bound_order_test.txt +6 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_1_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_2_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_3_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_0.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_1.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_2.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_3.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.csv +252 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tests/urs_test_data/z_combined_4.lic +25 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.py +65 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/shallow_water/tsh2sww.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.py +5 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.py +380 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.py +245 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_box_operator_Amended3.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.py +305 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/boyd_pipe_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.py +289 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.py +146 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_enquiry.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.py +229 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/inlet_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.py +431 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_functions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.py +169 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/internal_boundary_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.py +738 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/riverwall.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.py +757 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/structure_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/hecras_bridge_table.csv +105 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test1.tms +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/inlet_operator_test2.tms +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/data/test_hydrograph.tms +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_box_operator.py +2623 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_boyd_pipe_operator.py +482 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_inlet_operator.py +311 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_internal_boundary_functions.py +96 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_riverwall_structure.py +619 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/tests/test_weir_orifice_trapezoid_operator.py +650 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.py +387 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/structures/weir_orifice_trapezoid_operator.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.py +282 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/test_all.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.py +13 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.py +147 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.py +559 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/eqf_v2.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.py +347 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/okada_tsunami.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.py +27 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.py +467 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/smf.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.lic +23 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_MS.txt +36 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.lic +23 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SP.txt +36 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.lic +23 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/data/fullokada_SS.txt +36 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/okada_tsunami_octave_95.txt +101 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_eq.py +67 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_okada_tsunami.py +439 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_smf.py +143 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tests/test_tsunami_okada.py +303 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.py +1885 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/tsunami_source/tsunami_okada.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.py +76 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/argparsing.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.py +327 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/cg_solve.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.py +497 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/compile.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.py +121 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/csv_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.py +404 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.py +52 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/data_audit_wrapper.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.py +308 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/file_utils.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.py +117 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/function_utils.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.py +318 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/interp.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.py +414 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.py +77 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/log_analyser.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.py +106 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/mem_time_equation.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.py +457 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/model_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.py +16 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/norms.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.py +397 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/numerical_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.py +67 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parallel_abstraction.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.py +26 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/parse.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.py +1237 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/plot_utils.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quad_tree_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.py +612 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quantity_setting_functions.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.py +164 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/quickPlots.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.py +70 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/run_anuga_script.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.py +39 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.py +398 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sparse_matrix_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.py +1394 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/spatialInputUtil.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.py +820 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/sww_merge.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.py +646 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/system_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.py +60 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/terminal_width.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.csv +4 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/complex_polygon.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/crc_test_file.png +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.csv +669 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/mainland_only.lic +33 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.csv +5 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/data/non_complex_polygon.lic +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_cg_solve.py +569 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_csv_tools.py +435 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_data_audit.py +393 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_file_utils.py +157 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_function_utils.py +65 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_log_analyser.py +89 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_mem_time_equation.py +47 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_numerical_tools.py +616 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_plot_utils.py +455 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_quantity_setting_functions.py +369 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_sparse.py +215 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_spatialInputUtil.py +418 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_system_tools.py +483 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/tests/test_xml_tools.py +316 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/util_ext.pyd +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.py +219 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/where_close.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.py +326 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/utilities/xml_tools.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.py +15 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/__init__.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.py +1429 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/fabricate.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.py +24 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/parameters.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.py +38 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/produce_report.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.py +51 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/run_validation.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.py +17 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/save_parameters_tex.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.py +22 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/setup.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.py +55 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/validation_utilities/typeset_report.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.py +11 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga/version.pyc +0 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/PKG-INFO +117 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/SOURCES.txt +1329 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/dependency_links.txt +1 -0
- Users/steve/Miniconda/envs/anuga/Lib/site-packages/anuga-1.3.5-py2.7.egg-info/not-zip-safe +1 -0
- 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
|