Skip to content

[FEA] remove color markup from notebook test tracebacks #741

Open
@jameslamb

Description

@jameslamb

Is your feature request related to a problem? Please describe.

CI in this repos runs a bunch of RAPIDS Jupyter notebooks.

When those fail, they render with what looks like ANSI A escape sequences for coloring output (see this nice summary in a Stack Overflow answer). That makes it really difficult to actually read the tracebacks, and to share them in bug repos like #740

For example, from https://github.com/rapidsai/docker/actions/runs/13685723579/job/38384546532?pr=738

Image
text of those logs (click me)
AttributeError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mAttributeError\x1b[0m                            Traceback (most recent call last)', "Cell \x1b[0;32mIn[3], line 3\x1b[0m\n\x1b[1;32m      1\x1b[0m \x1b[38;5;66;03m# Convert DataFrames to GeoSeries\x1b[39;00m\n\x1b[0;32m----> 3\x1b[0m pickups \x1b[38;5;241m=\x1b[39m \x1b[43mcuspatial\x1b[49m\x1b[38;5;241;43m.\x1b[39;49m\x1b[43mGeoSeries\x1b[49m\x1b[38;5;241;43m.\x1b[39;49m\x1b[43mfrom_points_xy\x1b[49m\x1b[43m(\x1b[49m\n\x1b[1;32m      4\x1b[0m \x1b[43m    \x1b[49m\x1b[43mcudf\x1b[49m\x1b[38;5;241;43m.\x1b[39;49m\x1b[43mDataFrame\x1b[49m\x1b[43m(\x1b[49m\x1b[43m{\x1b[49m\n\x1b[1;32m      5\x1b[0m \x1b[43m        \x1b[49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[38;5;124;43mx\x1b[39;49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[43m:\x1b[49m\x1b[43m \x1b[49m\x1b[43mtaxi2015\x1b[49m\x1b[43m[\x1b[49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[38;5;124;43mpickup_longitude\x1b[39;49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[43m]\x1b[49m\x1b[43m,\x1b[49m\n\x1b[1;32m      6\x1b[0m \x1b[43m        \x1b[49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[38;5;124;43my\x1b[39;49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[43m:\x1b[49m\x1b[43m \x1b[49m\x1b[43mtaxi2015\x1b[49m\x1b[43m[\x1b[49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[38;5;124;43mpickup_latitude\x1b[39;49m\x1b[38;5;124;43m'\x1b[39;49m\x1b[43m]\x1b[49m\x1b[43m,\x1b[49m\n\x1b[1;32m      7\x1b[0m \x1b[43m    \x1b[49m\x1b[43m}\x1b[49m\x1b[43m)\x1b[49m\x1b[38;5;241;43m.\x1b[39;49m\x1b[43minterleave_columns\x1b[49m\x1b[43m(\x1b[49m\x1b[43m)\x1b[49m\n\x1b[1;32m      8\x1b[0m \x1b[43m)\x1b[49m\n\x1b[1;32m      9\x1b[0m addresses \x1b[38;5;241m=\x1b[39m cuspatial\x1b[38;5;241m.\x1b[39mGeoSeries\x1b[38;5;241m.\x1b[39mfrom_points_xy(\n\x1b[1;32m     10\x1b[0m     cudf\x1b[38;5;241m.\x1b[39mDataFrame({\n\x1b[1;32m     11\x1b[0m         \x1b[38;5;124m'\x1b[39m\x1b[38;5;124mx\x1b[39m\x1b[38;5;124m'\x1b[39m: NAD[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mLongitude\x1b[39m\x1b[38;5;124m'\x1b[39m],\n\x1b[1;32m     12\x1b[0m         \x1b[38;5;124m'\x1b[39m\x1b[38;5;124my\x1b[39m\x1b[38;5;124m'\x1b[39m: NAD[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mLatitude\x1b[39m\x1b[38;5;124m'\x1b[39m],\n\x1b[1;32m     13\x1b[0m     })\x1b[38;5;241m.\x1b[39minterleave_columns()\n\x1b[1;32m     14\x1b[0m )\n", 'File \x1b[0;32m/opt/conda/lib/python3.10/site-packages/cuspatial/core/geoseries.py:687\x1b[0m, in \x1b[0;36mGeoSeries.from_points_xy\x1b[0;34m(cls, points_xy)\x1b[0m\n\x1b[1;32m    671\x1b[0m \x1b[38;5;250m\x1b[39m\x1b[38;5;124;03m"""Construct a GeoSeries of POINTs from an array of interleaved xy\x1b[39;00m\n\x1b[1;32m    672\x1b[0m \x1b[38;5;124;03mcoordinates.\x1b[39;00m\n\x1b[1;32m    673\x1b[0m \n\x1b[0;32m   (...)\x1b[0m\n\x1b[1;32m    682\x1b[0m \x1b[38;5;124;03m    A GeoSeries made of the points.\x1b[39;00m\n\x1b[1;32m    683\x1b[0m \x1b[38;5;124;03m"""\x1b[39;00m\n\x1b[1;32m    684\x1b[0m coords_dtype \x1b[38;5;241m=\x1b[39m _check_coords_dtype(points_xy)\n\x1b[1;32m    686\x1b[0m \x1b[38;5;28;01mreturn\x1b[39;00m \x1b[38;5;28mcls\x1b[39m\x1b[38;5;241m.\x1b[39m_from_column(\n\x1b[0;32m--> 687\x1b[0m     \x1b[43mGeoColumn\x1b[49m\x1b[38;5;241;43m.\x1b[39;49m\x1b[43m_from_points_xy\x1b[49m\x1b[43m(\x1b[49m\x1b[43mas_column\x1b[49m\x1b[43m(\x1b[49m\x1b[43mpoints_xy\x1b[49m\x1b[43m,\x1b[49m\x1b[43m \x1b[49m\x1b[43mdtype\x1b[49m\x1b[38;5;241;43m=\x1b[39;49m\x1b[43mcoords_dtype\x1b[49m\x1b[43m)\x1b[49m\x1b[43m)\x1b[49m\n\x1b[1;32m    688\x1b[0m )\n', 'File \x1b[0;32m/opt/conda/lib/python3.10/site-packages/cuspatial/core/_column/geocolumn.py:137\x1b[0m, in \x1b[0;36mGeoColumn._from_points_xy\x1b[0;34m(cls, points_xy)\x1b[0m\n\x1b[1;32m    134\x1b[0m \x1b[38;5;28;01mif\x1b[39;00m \x1b[38;5;129;01mnot\x1b[39;00m points_xy\x1b[38;5;241m.\x1b[39mdtype\x1b[38;5;241m.\x1b[39mkind \x1b[38;5;241m==\x1b[39m \x1b[38;5;124m"\x1b[39m\x1b[38;5;124mf\x1b[39m\x1b[38;5;124m"\x1b[39m:\n\x1b[1;32m    135\x1b[0m     \x1b[38;5;28;01mraise\x1b[39;00m \x1b[38;5;167;01mValueError\x1b[39;00m(\x1b[38;5;124m"\x1b[39m\x1b[38;5;124mCoordinates must be floating point numbers.\x1b[39m\x1b[38;5;124m"\x1b[39m)\n\x1b[0;32m--> 137\x1b[0m point_col \x1b[38;5;241m=\x1b[39m \x1b[43m_xy_as_variable_sized_list\x1b[49m\x1b[43m(\x1b[49m\x1b[43mpoints_xy\x1b[49m\x1b[43m)\x1b[49m\n\x1b[1;32m    138\x1b[0m num_points \x1b[38;5;241m=\x1b[39m \x1b[38;5;28mlen\x1b[39m(point_col)\n\x1b[1;32m    140\x1b[0m meta \x1b[38;5;241m=\x1b[39m GeoMeta(\n\x1b[1;32m    141\x1b[0m     {\n\x1b[1;32m    142\x1b[0m         \x1b[38;5;124m"\x1b[39m\x1b[38;5;124minput_types\x1b[39m\x1b[38;5;124m"\x1b[39m: as_column(\n\x1b[0;32m   (...)\x1b[0m\n\x1b[1;32m    150\x1b[0m     }\n\x1b[1;32m    151\x1b[0m )\n', 'File \x1b[0;32m/opt/conda/lib/python3.10/site-packages/cuspatial/core/_column/geocolumn.py:376\x1b[0m, in \x1b[0;36m_xy_as_variable_sized_list\x1b[0;34m(xy)\x1b[0m\n\x1b[1;32m    373\x1b[0m     \x1b[38;5;28;01mraise\x1b[39;00m \x1b[38;5;167;01mValueError\x1b[39;00m(\x1b[38;5;124m"\x1b[39m\x1b[38;5;124mxy must have an even number of elements\x1b[39m\x1b[38;5;124m"\x1b[39m)\n\x1b[1;32m    375\x1b[0m num_points \x1b[38;5;241m=\x1b[39m \x1b[38;5;28mlen\x1b[39m(xy) \x1b[38;5;241m/\x1b[39m\x1b[38;5;241m/\x1b[39m \x1b[38;5;241m2\x1b[39m\n\x1b[0;32m--> 376\x1b[0m indices \x1b[38;5;241m=\x1b[39m \x1b[43mas_column\x1b[49m\x1b[43m(\x1b[49m\x1b[38;5;28;43mrange\x1b[39;49m\x1b[43m(\x1b[49m\x1b[38;5;241;43m0\x1b[39;49m\x1b[43m,\x1b[49m\x1b[43m \x1b[49m\x1b[43mnum_points\x1b[49m\x1b[43m \x1b[49m\x1b[38;5;241;43m*\x1b[39;49m\x1b[43m \x1b[49m\x1b[38;5;241;43m2\x1b[39;49m\x1b[43m \x1b[49m\x1b[38;5;241;43m+\x1b[39;49m\x1b[43m \x1b[49m\x1b[38;5;241;43m1\x1b[39;49m\x1b[43m,\x1b[49m\x1b[43m \x1b[49m\x1b[38;5;241;43m2\x1b[39;49m\x1b[43m)\x1b[49m\x1b[43m,\x1b[49m\x1b[43m \x1b[49m\x1b[43mdtype\x1b[49m\x1b[38;5;241;43m=\x1b[39;49m\x1b[38;5;124;43m"\x1b[39;49m\x1b[38;5;124;43mint32\x1b[39;49m\x1b[38;5;124;43m"\x1b[39;49m\x1b[43m)\x1b[49m\n\x1b[1;32m    377\x1b[0m \x1b[38;5;28;01mreturn\x1b[39;00m ListColumn(\n\x1b[1;32m    378\x1b[0m     data\x1b[38;5;241m=\x1b[39m\x1b[38;5;28;01mNone\x1b[39;00m,\n\x1b[1;32m    379\x1b[0m     dtype\x1b[38;5;241m=\x1b[39mcudf\x1b[38;5;241m.\x1b[39mListDtype(xy\x1b[38;5;241m.\x1b[39mdtype),\n\x1b[1;32m    380\x1b[0m     size\x1b[38;5;241m=\x1b[39mnum_points,\n\x1b[1;32m    381\x1b[0m     children\x1b[38;5;241m=\x1b[39m(indices, xy),\n\x1b[1;32m    382\x1b[0m )\n', 'File \x1b[0;32m/opt/conda/lib/python3.10/site-packages/cudf/core/column/column.py:2449\x1b[0m, in \x1b[0;36mas_column\x1b[0;34m(arbitrary, nan_as_null, dtype, length)\x1b[0m\n\x1b[1;32m   2445\x1b[0m         dtype \x1b[38;5;241m=\x1b[39m np\x1b[38;5;241m.\x1b[39mdtype(\n\x1b[1;32m   2446\x1b[0m             \x1b[38;5;124mf\x1b[39m\x1b[38;5;124m"\x1b[39m\x1b[38;5;124mi\x1b[39m\x1b[38;5;132;01m{\x1b[39;00mcudf\x1b[38;5;241m.\x1b[39mget_option(\x1b[38;5;124m\'\x1b[39m\x1b[38;5;124mdefault_integer_bitwidth\x1b[39m\x1b[38;5;124m\'\x1b[39m)\x1b[38;5;250m \x1b[39m\x1b[38;5;241m/\x1b[39m\x1b[38;5;241m/\x1b[39m\x1b[38;5;250m \x1b[39m\x1b[38;5;241m8\x1b[39m\x1b[38;5;132;01m}\x1b[39;00m\x1b[38;5;124m"\x1b[39m\n\x1b[1;32m   2447\x1b[0m         )\n\x1b[1;32m   2448\x1b[0m     \x1b[38;5;28;01mif\x1b[39;00m dtype \x1b[38;5;129;01mis\x1b[39;00m \x1b[38;5;129;01mnot\x1b[39;00m \x1b[38;5;28;01mNone\x1b[39;00m:\n\x1b[0;32m-> 2449\x1b[0m         \x1b[38;5;28;01mreturn\x1b[39;00m \x1b[43mcolumn\x1b[49m\x1b[38;5;241;43m.\x1b[39;49m\x1b[43mastype\x1b[49m\x1b[43m(\x1b[49m\x1b[43mdtype\x1b[49m\x1b[43m)\x1b[49m\n\x1b[1;32m   2450\x1b[0m     \x1b[38;5;28;01mreturn\x1b[39;00m column\n\x1b[1;32m   2451\x1b[0m \x1b[38;5;28;01melif\x1b[39;00m \x1b[38;5;28misinstance\x1b[39m(arbitrary, (ColumnBase, cudf\x1b[38;5;241m.\x1b[39mSeries, cudf\x1b[38;5;241m.\x1b[39mBaseIndex)):\n\x1b[1;32m   2452\x1b[0m     \x1b[38;5;66;03m# Ignoring nan_as_null per the docstring\x1b[39;00m\n', 'File \x1b[0;32m/opt/conda/lib/python3.10/site-packages/cudf/core/column/column.py:1624\x1b[0m, in \x1b[0;36mColumnBase.astype\x1b[0;34m(self, dtype, copy)\x1b[0m\n\x1b[1;32m   1622\x1b[0m \x1b[38;5;28;01melif\x1b[39;00m \x1b[38;5;28misinstance\x1b[39m(dtype, DecimalDtype):\n\x1b[1;32m   1623\x1b[0m     result \x1b[38;5;241m=\x1b[39m \x1b[38;5;28mself\x1b[39m\x1b[38;5;241m.\x1b[39mas_decimal_column(dtype)\n\x1b[0;32m-> 1624\x1b[0m \x1b[38;5;28;01melif\x1b[39;00m \x1b[43mdtype\x1b[49m\x1b[38;5;241;43m.\x1b[39;49m\x1b[43mkind\x1b[49m \x1b[38;5;241m==\x1b[39m \x1b[38;5;124m"\x1b[39m\x1b[38;5;124mM\x1b[39m\x1b[38;5;124m"\x1b[39m:\n\x1b[1;32m   1625\x1b[0m     result \x1b[38;5;241m=\x1b[39m \x1b[38;5;28mself\x1b[39m\x1b[38;5;241m.\x1b[39mas_datetime_column(dtype)\n\x1b[1;32m   1626\x1b[0m \x1b[38;5;28;01melif\x1b[39;00m dtype\x1b[38;5;241m.\x1b[39mkind \x1b[38;5;241m==\x1b[39m \x1b[38;5;124m"\x1b[39m\x1b[38;5;124mm\x1b[39m\x1b[38;5;124m"\x1b[39m:\n', "\x1b[0;31mAttributeError\x1b[0m: 'str' object has no attribute 'kind'"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', "Cell \x1b[0;32mIn[4], line 1\x1b[0m\n\x1b[0;32m----> 1\x1b[0m zone_addresses \x1b[38;5;241m=\x1b[39m zones[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mgeometry\x1b[39m\x1b[38;5;124m'\x1b[39m]\x1b[38;5;241m.\x1b[39mcontains_properly(\x1b[43maddresses\x1b[49m, allpairs\x1b[38;5;241m=\x1b[39m\x1b[38;5;28;01mTrue\x1b[39;00m)\n\x1b[1;32m      2\x1b[0m display(zone_addresses)\n", "\x1b[0;31mNameError\x1b[0m: name 'addresses' is not defined"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', "Cell \x1b[0;32mIn[5], line 1\x1b[0m\n\x1b[0;32m----> 1\x1b[0m zone_pickups \x1b[38;5;241m=\x1b[39m zones[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mgeometry\x1b[39m\x1b[38;5;124m'\x1b[39m]\x1b[38;5;241m.\x1b[39miloc[\x1b[38;5;241m0\x1b[39m:\x1b[38;5;241m120\x1b[39m]\x1b[38;5;241m.\x1b[39mcontains_properly(\x1b[43mpickups\x1b[49m, allpairs\x1b[38;5;241m=\x1b[39m\x1b[38;5;28;01mTrue\x1b[39;00m)\n\x1b[1;32m      2\x1b[0m display(zone_pickups)\n\x1b[1;32m      4\x1b[0m \x1b[38;5;66;03m# You can do it one of two ways: .contains_properly, or write the pip yourself.\x1b[39;00m\n", "\x1b[0;31mNameError\x1b[0m: name 'pickups' is not defined"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', 'Cell \x1b[0;32mIn[6], line 3\x1b[0m\n\x1b[1;32m      1\x1b[0m \x1b[38;5;66;03m# Add pickup and address counts to zones dataframe\x1b[39;00m\n\x1b[0;32m----> 3\x1b[0m zones[\x1b[38;5;124m"\x1b[39m\x1b[38;5;124mpickup_count\x1b[39m\x1b[38;5;124m"\x1b[39m] \x1b[38;5;241m=\x1b[39m \x1b[43mzone_pickups\x1b[49m\x1b[38;5;241m.\x1b[39mgroupby(\x1b[38;5;124m\'\x1b[39m\x1b[38;5;124mpolygon_index\x1b[39m\x1b[38;5;124m\'\x1b[39m)\x1b[38;5;241m.\x1b[39mcount()\n\x1b[1;32m      4\x1b[0m zones[\x1b[38;5;124m"\x1b[39m\x1b[38;5;124maddress_count\x1b[39m\x1b[38;5;124m"\x1b[39m] \x1b[38;5;241m=\x1b[39m zone_addresses\x1b[38;5;241m.\x1b[39mgroupby(\x1b[38;5;124m\'\x1b[39m\x1b[38;5;124mpolygon_index\x1b[39m\x1b[38;5;124m\'\x1b[39m)\x1b[38;5;241m.\x1b[39mcount()\n\x1b[1;32m      5\x1b[0m zones\x1b[38;5;241m.\x1b[39mhead(\x1b[38;5;241m12\x1b[39m)\n', "\x1b[0;31mNameError\x1b[0m: name 'zone_pickups' is not defined"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', "Cell \x1b[0;32mIn[7], line 9\x1b[0m\n\x1b[1;32m      1\x1b[0m NEIGHBORHOOD_ID \x1b[38;5;241m=\x1b[39m \x1b[38;5;241m12\x1b[39m\n\x1b[1;32m      3\x1b[0m \x1b[38;5;66;03m# Let's make two GeoSeries: For each zone, create a GeoSeries with all address Points\x1b[39;00m\n\x1b[1;32m      4\x1b[0m \x1b[38;5;66;03m# repeated the number of times there are pickups in that zone, and another GeoSeries with\x1b[39;00m\n\x1b[1;32m      5\x1b[0m \x1b[38;5;66;03m# the opposite: all pickups Points repeated the number of times there are addresses in that\x1b[39;00m\n\x1b[1;32m      6\x1b[0m \x1b[38;5;66;03m# zone.\x1b[39;00m\n\x1b[1;32m      7\x1b[0m \n\x1b[1;32m      8\x1b[0m \x1b[38;5;66;03m# addresses tiled\x1b[39;00m\n\x1b[0;32m----> 9\x1b[0m zone_address_point_ids \x1b[38;5;241m=\x1b[39m \x1b[43mzone_addresses\x1b[49m[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mpoint_index\x1b[39m\x1b[38;5;124m'\x1b[39m][zone_addresses[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mpolygon_index\x1b[39m\x1b[38;5;124m'\x1b[39m] \x1b[38;5;241m==\x1b[39m NEIGHBORHOOD_ID]\n\x1b[1;32m     10\x1b[0m pickups_count \x1b[38;5;241m=\x1b[39m \x1b[38;5;28mlen\x1b[39m(zone_pickups[zone_pickups[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mpolygon_index\x1b[39m\x1b[38;5;124m'\x1b[39m] \x1b[38;5;241m==\x1b[39m NEIGHBORHOOD_ID])\n\x1b[1;32m     11\x1b[0m addresses_tiled \x1b[38;5;241m=\x1b[39m NAD\x1b[38;5;241m.\x1b[39miloc[\n\x1b[1;32m     12\x1b[0m     zone_address_point_ids\n\x1b[1;32m     13\x1b[0m ]\x1b[38;5;241m.\x1b[39mtile(pickups_count)\n", "\x1b[0;31mNameError\x1b[0m: name 'zone_addresses' is not defined"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', "Cell \x1b[0;32mIn[8], line 3\x1b[0m\n\x1b[1;32m      1\x1b[0m \x1b[38;5;66;03m# get the list of addresses and their indices that are closest to a pickup point\x1b[39;00m\n\x1b[0;32m----> 3\x1b[0m haversines \x1b[38;5;241m=\x1b[39m cuspatial\x1b[38;5;241m.\x1b[39mhaversine_distance(\x1b[43mpickup_points\x1b[49m, address_points)\n\x1b[1;32m      5\x1b[0m gb_df \x1b[38;5;241m=\x1b[39m cudf\x1b[38;5;241m.\x1b[39mDataFrame({\n\x1b[1;32m      6\x1b[0m     \x1b[38;5;124m'\x1b[39m\x1b[38;5;124maddress\x1b[39m\x1b[38;5;124m'\x1b[39m: addresses_tiled\x1b[38;5;241m.\x1b[39mindex,\n\x1b[1;32m      7\x1b[0m     \x1b[38;5;124m'\x1b[39m\x1b[38;5;124mpickup\x1b[39m\x1b[38;5;124m'\x1b[39m: pickups_tiled\x1b[38;5;241m.\x1b[39mindex,\n\x1b[1;32m      8\x1b[0m     \x1b[38;5;124m'\x1b[39m\x1b[38;5;124mdistance\x1b[39m\x1b[38;5;124m'\x1b[39m: haversines\n\x1b[1;32m      9\x1b[0m })\n\x1b[1;32m     11\x1b[0m address_indices_of_nearest \x1b[38;5;241m=\x1b[39m gb_df[[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124maddress\x1b[39m\x1b[38;5;124m'\x1b[39m, \x1b[38;5;124m'\x1b[39m\x1b[38;5;124mdistance\x1b[39m\x1b[38;5;124m'\x1b[39m]]\x1b[38;5;241m.\x1b[39mgroupby(\x1b[38;5;124m'\x1b[39m\x1b[38;5;124maddress\x1b[39m\x1b[38;5;124m'\x1b[39m)\x1b[38;5;241m.\x1b[39midxmin()\n", "\x1b[0;31mNameError\x1b[0m: name 'pickup_points' is not defined"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', "Cell \x1b[0;32mIn[9], line 3\x1b[0m\n\x1b[1;32m      1\x1b[0m \x1b[38;5;66;03m# Original data nearest pickups and addresses\x1b[39;00m\n\x1b[0;32m----> 3\x1b[0m nearest_pickups \x1b[38;5;241m=\x1b[39m taxi2015\x1b[38;5;241m.\x1b[39miloc[\x1b[43mpickups_nearest_address\x1b[49m[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mpickup\x1b[39m\x1b[38;5;124m'\x1b[39m]]\n\x1b[1;32m      4\x1b[0m nearest_addresses_lonlat \x1b[38;5;241m=\x1b[39m NAD\x1b[38;5;241m.\x1b[39mloc[pickups_nearest_address[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124maddress\x1b[39m\x1b[38;5;124m'\x1b[39m]]\n", "\x1b[0;31mNameError\x1b[0m: name 'pickups_nearest_address' is not defined"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', "Cell \x1b[0;32mIn[10], line 23\x1b[0m\n\x1b[1;32m      8\x1b[0m     street_names \x1b[38;5;241m=\x1b[39m NAD_Street[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mAdd_Number\x1b[39m\x1b[38;5;124m'\x1b[39m]\x1b[38;5;241m.\x1b[39mastype(\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mstr\x1b[39m\x1b[38;5;124m'\x1b[39m)\x1b[38;5;241m.\x1b[39mstr\x1b[38;5;241m.\x1b[39mcat(\n\x1b[1;32m      9\x1b[0m         blanks\n\x1b[1;32m     10\x1b[0m     )\x1b[38;5;241m.\x1b[39mstr\x1b[38;5;241m.\x1b[39mcat(\n\x1b[0;32m   (...)\x1b[0m\n\x1b[1;32m     19\x1b[0m         NAD_Street[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mStN_PosTyp\x1b[39m\x1b[38;5;124m'\x1b[39m]\n\x1b[1;32m     20\x1b[0m     )\n\x1b[1;32m     21\x1b[0m     \x1b[38;5;28;01mreturn\x1b[39;00m street_names\x1b[38;5;241m.\x1b[39mstr\x1b[38;5;241m.\x1b[39mreplace(\x1b[38;5;124m'\x1b[39m\x1b[38;5;124m  \x1b[39m\x1b[38;5;124m'\x1b[39m, \x1b[38;5;124m'\x1b[39m\x1b[38;5;124m \x1b[39m\x1b[38;5;124m'\x1b[39m)\n\x1b[0;32m---> 23\x1b[0m nearest_addresses_street_name \x1b[38;5;241m=\x1b[39m NAD_Street\x1b[38;5;241m.\x1b[39mloc[\x1b[43mpickups_nearest_address\x1b[49m[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124maddress\x1b[39m\x1b[38;5;124m'\x1b[39m]]\n\x1b[1;32m     24\x1b[0m street_names \x1b[38;5;241m=\x1b[39m build_address_string(nearest_addresses_street_name)\n", "\x1b[0;31mNameError\x1b[0m: name 'pickups_nearest_address' is not defined"]
NameError ['\x1b[0;31m---------------------------------------------------------------------------\x1b[0m', '\x1b[0;31mNameError\x1b[0m                                 Traceback (most recent call last)', "Cell \x1b[0;32mIn[11], line 2\x1b[0m\n\x1b[1;32m      1\x1b[0m \x1b[38;5;66;03m# save the taxi2015 index\x1b[39;00m\n\x1b[0;32m----> 2\x1b[0m no_index \x1b[38;5;241m=\x1b[39m \x1b[43mnearest_pickups\x1b[49m\x1b[38;5;241m.\x1b[39mreset_index()\n\x1b[1;32m      3\x1b[0m \x1b[38;5;66;03m# set taxi2015 street names and distances based on their iloc positions\x1b[39;00m\n\x1b[1;32m      4\x1b[0m no_index[\x1b[38;5;124m'\x1b[39m\x1b[38;5;124mpickup_address\x1b[39m\x1b[38;5;124m'\x1b[39m] \x1b[38;5;241m=\x1b[39m street_names\x1b[38;5;241m.\x1b[39mreset_index(drop\x1b[38;5;241m=\x1b[39m\x1b[38;5;28;01mTrue\x1b[39;00m)\n", "\x1b[0;31mNameError\x1b[0m: name 'nearest_pickups' is not defined"]
Completed cuspatial/Taxi_Dropoff_Reverse_Geocoding.ipynb with 0 warnings and 9 errors

Describe the solution you'd like

Something should be changed here to make those CI logs easier to read.

Describe alternatives you've considered

Theories about the root cause:

  • maybe GitHub Actions does not render ANSI escape sequences like that by default (or at all)
  • maybe those escape sequences are not correct
  • maybe the problem is that this output is being put into a list of strings like ['\x1b[0;31m-------------', ...] and they just need to be streamed out line-by-line to stdout/stderr

For anyone attempting to fix this, I'd start with https://github.com/rapidsai/docker/blob/branch-25.04/context/test_notebooks.py and see if it's possible to turn off coloring of output in whatever is generating these logs.

Additional context

N/A

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions