Description
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

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