Created
April 25, 2014 09:45
-
-
Save cpelley/11283916 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "", | |
"signature": "sha256:96de4f5cb98aaf951599e9cf1190219cb9bfd07aecafb8b796930e99ab94aeb4" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "heading", | |
"level": 3, | |
"metadata": {}, | |
"source": [ | |
"Comparing readability of merge and concatenation failure reporting" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import numpy as np\n", | |
"\n", | |
"import iris\n", | |
"import iris.tests.stock as stock" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 4, | |
"metadata": {}, | |
"source": [ | |
"Load a stock cube and create a scalar coord so that we can merge more than one together" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"cube = stock.lat_lon_cube()\n", | |
"cube.rename('stock cube')\n", | |
"cube.add_aux_coord(iris.coords.AuxCoord(1, long_name='scalar_coord'), None)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 4, | |
"metadata": {}, | |
"source": [ | |
"Create a duplicate cube where the dimension coordinates differ by the coordinate system (cannot then merge)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"cube2 = cube.copy()\n", | |
"cube2.remove_coord('latitude')\n", | |
"new_lat = cube.coord('latitude').copy()\n", | |
"new_lat.coord_system = iris.coord_systems.GeogCS(6371230.0)\n", | |
"cube2.add_dim_coord(new_lat, 0)\n", | |
"\n", | |
"cube2.coord('scalar_coord').points = 2" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print cube, 2*'\\n', cube2, 2*'\\n'\n", | |
"\n", | |
"print cube.coord('latitude')\n", | |
"print cube2.coord('latitude')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"stock cube / (unknown) (latitude: 3; longitude: 4)\n", | |
" Dimension coordinates:\n", | |
" latitude x -\n", | |
" longitude - x\n", | |
" Scalar coordinates:\n", | |
" scalar_coord: 1 \n", | |
"\n", | |
"stock cube / (unknown) (latitude: 3; longitude: 4)\n", | |
" Dimension coordinates:\n", | |
" latitude x -\n", | |
" longitude - x\n", | |
" Scalar coordinates:\n", | |
" scalar_coord: 2 \n", | |
"\n", | |
"\n", | |
"DimCoord(array([-1, 0, 1], dtype=int32), standard_name='latitude', units=Unit('degrees'), coord_system=GeogCS(6371229.0))\n", | |
"DimCoord(array([-1, 0, 1], dtype=int32), standard_name='latitude', units=Unit('degrees'), coord_system=GeogCS(6371230.0))\n" | |
] | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 4, | |
"metadata": {}, | |
"source": [ | |
"Lets take a look at the failed merge message that is returned" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print iris.cube.CubeList([cube, cube2]).merge_cube()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "MergeError", | |
"evalue": "failed to merge into a single cube.\n Coordinates in cube.dim_coords differ: latitude.", | |
"output_type": "pyerr", | |
"traceback": [ | |
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mMergeError\u001b[0m Traceback (most recent call last)", | |
"\u001b[1;32m<ipython-input-5-37c1b4c97f19>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0miris\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mCubeList\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcube2\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmerge_cube\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[1;32m/home/h05/cpelley/git/iris/lib/iris/cube.pyc\u001b[0m in \u001b[0;36mmerge_cube\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 340\u001b[0m \u001b[0mproto_cube\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0miris\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_merge\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mProtoCube\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 341\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mcube\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 342\u001b[1;33m \u001b[0mproto_cube\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mregister\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merror_on_mismatch\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 343\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 344\u001b[0m \u001b[1;31m# Extract the merged cube from the ProtoCube.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32m/home/h05/cpelley/git/iris/lib/iris/_merge.pyc\u001b[0m in \u001b[0;36mregister\u001b[1;34m(self, cube, error_on_mismatch)\u001b[0m\n\u001b[0;32m 1226\u001b[0m \u001b[0mcoord_payload\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_extract_coord_payload\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1227\u001b[0m match = coord_payload.match_signature(self._coord_signature,\n\u001b[1;32m-> 1228\u001b[1;33m error_on_mismatch)\n\u001b[0m\u001b[0;32m 1229\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mmatch\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1230\u001b[0m \u001b[1;31m# Register the cube as a source-cube for this ProtoCube.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32m/home/h05/cpelley/git/iris/lib/iris/_merge.pyc\u001b[0m in \u001b[0;36mmatch_signature\u001b[1;34m(self, signature, error_on_mismatch)\u001b[0m\n\u001b[0;32m 257\u001b[0m \u001b[0mmatch\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mbool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsgs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 258\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0merror_on_mismatch\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mmatch\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 259\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0miris\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexceptions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mMergeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsgs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 260\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mmatch\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 261\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;31mMergeError\u001b[0m: failed to merge into a single cube.\n Coordinates in cube.dim_coords differ: latitude." | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 4, | |
"metadata": {}, | |
"source": [ | |
"Now lets take a look at the concatenate message reporting" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Let us just check that these can merge (before introducing artificial differences)\n", | |
"cube3 = cube.copy()\n", | |
"cube3.remove_coord('latitude')\n", | |
"new_lat = cube.coord('latitude').copy(np.array([2, 3, 4], dtype=np.int32))\n", | |
"cube3.add_dim_coord(new_lat, 0)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print iris.cube.CubeList([cube, cube3]).concatenate_cube()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"stock cube / (unknown) (latitude: 6; longitude: 4)\n", | |
" Dimension coordinates:\n", | |
" latitude x -\n", | |
" longitude - x\n", | |
" Scalar coordinates:\n", | |
" scalar_coord: 1\n" | |
] | |
} | |
], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"# Again, modify the coordinate system of the coordinate\n", | |
"new_lat.coord_system = iris.coord_systems.GeogCS(6371230.0)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"print iris.cube.CubeList([cube, cube3]).concatenate_cube()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "ConcatenateError", | |
"evalue": "failed to concatenate into a single cube.\n Dimensions metadata differs: [CoordMetaData(defn=CoordDefn(standard_name='latitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371229.0)), dims=(0,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False}), CoordMetaData(defn=CoordDefn(standard_name='longitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371229.0)), dims=(1,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False})] != [CoordMetaData(defn=CoordDefn(standard_name='latitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371230.0)), dims=(0,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False}), CoordMetaData(defn=CoordDefn(standard_name='longitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371229.0)), dims=(1,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False})]", | |
"output_type": "pyerr", | |
"traceback": [ | |
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mConcatenateError\u001b[0m Traceback (most recent call last)", | |
"\u001b[1;32m<ipython-input-9-66d60292bda2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mprint\u001b[0m \u001b[0miris\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mCubeList\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcube3\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconcatenate_cube\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[1;32m/home/h05/cpelley/git/iris/lib/iris/cube.pyc\u001b[0m in \u001b[0;36mconcatenate_cube\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 440\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 441\u001b[0m \"\"\"\n\u001b[1;32m--> 442\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0miris\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_concatenate\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconcatenate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merror_on_mismatch\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 443\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 444\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mconcatenate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32m/home/h05/cpelley/git/iris/lib/iris/_concatenate.pyc\u001b[0m in \u001b[0;36mconcatenate\u001b[1;34m(cubes, error_on_mismatch)\u001b[0m\n\u001b[0;32m 237\u001b[0m \u001b[1;31m# Register cube with an existing proto-cube.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 238\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mproto_cube\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mproto_cubes\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 239\u001b[1;33m \u001b[0mregistered\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mproto_cube\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mregister\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merror_on_mismatch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 240\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mregistered\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 241\u001b[0m \u001b[0maxis\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mproto_cube\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maxis\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32m/home/h05/cpelley/git/iris/lib/iris/_concatenate.pyc\u001b[0m in \u001b[0;36mregister\u001b[1;34m(self, cube, axis, error_on_mismatch)\u001b[0m\n\u001b[0;32m 628\u001b[0m \u001b[1;31m# Check for compatible cube signatures.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 629\u001b[0m \u001b[0mcube_signature\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_CubeSignature\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcube\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 630\u001b[1;33m \u001b[0mmatch\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_cube_signature\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmatch\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcube_signature\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merror_on_mismatch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 631\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 632\u001b[0m \u001b[1;31m# Check for compatible coordinate signatures.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;32m/home/h05/cpelley/git/iris/lib/iris/_concatenate.pyc\u001b[0m in \u001b[0;36mmatch\u001b[1;34m(self, other, error_on_mismatch)\u001b[0m\n\u001b[0;32m 372\u001b[0m \u001b[0mmatch\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mbool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsgs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 373\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0merror_on_mismatch\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mmatch\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 374\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0miris\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexceptions\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mConcatenateError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmsgs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 375\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mmatch\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 376\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", | |
"\u001b[1;31mConcatenateError\u001b[0m: failed to concatenate into a single cube.\n Dimensions metadata differs: [CoordMetaData(defn=CoordDefn(standard_name='latitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371229.0)), dims=(0,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False}), CoordMetaData(defn=CoordDefn(standard_name='longitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371229.0)), dims=(1,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False})] != [CoordMetaData(defn=CoordDefn(standard_name='latitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371230.0)), dims=(0,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False}), CoordMetaData(defn=CoordDefn(standard_name='longitude', long_name=None, var_name=None, units=Unit('degrees'), attributes={}, coord_system=GeogCS(6371229.0)), dims=(1,), points_dtype=dtype('int32'), bounds_dtype=None, kwargs={'order': 1, 'circular': False})]" | |
] | |
} | |
], | |
"prompt_number": 9 | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment