We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Doubly jagged workaround broken in awkward 1.4.0rc2
There was a quick fix (made for KM3NeT data 😄) for doubly jagged arrays which were discussed here https://github.com/scikit-hep/uproot4/issues/90 and the it uses the `akward._io` submodule which is not accessible anymore directly (`AttributeError`) in `1.4.0rc2`.

See here:

https://github.com/scikit-hep/awkward-1.0/blob/main/src/awkward/_connect/_uproot.py#L35

I am not sure what the desired fix is, to import `_io` in `_connect/_uproot.py` or if this fix is now covered by further developments, so I thought I ask first before I do a PR 😉 

Here is the full MWE (needs `pip install km3net-testdata`, I am not sure if this test

```python
>>> import uproot

>>> uproot.__version__
'4.0.7'

>>> import awkward as ak

>>> ak.__version__
'1.4.0rc2'

>>> from km3net_testdata import data_path

>>> f = uproot.open(data_path("offline/mcv5.11r2.gsg_muonCChigherE-CC_50-5000GeV.km3_AAv1.jterbr00004695.jchain.aanet.498.root"))

>>> f["E/Evt/trks/trks.rec_stages"].array()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-18-80472509fad7> in <module>
----> 1 f["E/Evt/trks/trks.rec_stages"].array()

~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/behaviors/TBranch.py in array(self, interpretation, entry_start, entry_stop, decompression_executor, interpretation_executor, array_cache, library)
   2076                         ranges_or_baskets.append((branch, basket_num, range_or_basket))
   2077
-> 2078         _ranges_or_baskets_to_arrays(
   2079             self,
   2080             ranges_or_baskets,

~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/behaviors/TBranch.py in _ranges_or_baskets_to_arrays(hasbranches, ranges_or_baskets, branchid_interpretation, entry_start, entry_stop, decompression_executor, interpretation_executor, library, arrays, update_ranges_or_baskets)
   3476
   3477         elif isinstance(obj, tuple) and len(obj) == 3:
-> 3478             uproot.source.futures.delayed_raise(*obj)
   3479
   3480         else:

~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/source/futures.py in delayed_raise(exception_class, exception_value, traceback)
     44         exec("raise exception_class, exception_value, traceback")
     45     else:
---> 46         raise exception_value.with_traceback(traceback)
     47
     48

~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/behaviors/TBranch.py in basket_to_array(basket)
   3420             basket_arrays = branchid_arrays[branch.cache_key]
   3421
-> 3422             basket_arrays[basket.basket_num] = interpretation.basket_array(
   3423                 basket.data,
   3424                 basket.byte_offsets,

~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/interpretation/objects.py in basket_array(self, data, byte_offsets, basket, branch, context, cursor_offset, library)
    151                     "cursor_offset": cursor_offset,
    152                 }
--> 153                 output = awkward._connect._uproot.basket_array(
    154                     form, data, byte_offsets, extra
    155                 )

~/Dev/km3io/venv/lib/python3.9/site-packages/awkward/_connect/_uproot.py in basket_array(form, data, byte_offsets, extra)
     36     # FIXME: uproot_issue_90 is just a placeholder, to show how it would be done
     37
---> 38     return ak._io.uproot_issue_90(
     39         form,
     40         ak.layout.NumpyArray(data),

AttributeError: module 'awkward' has no attribute '_io'
```




--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/awkward/_connect/_uproot.py`
Content:
```
1 # BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE
2 
3 from __future__ import absolute_import
4 
5 import json
6 
7 # don't import awkward._connect._uproot in awkward/__init__.py!
8 import uproot
9 
10 import awkward as ak
11 
12 
13 def can_optimize(interpretation, form):
14     if isinstance(interpretation, uproot.interpretation.objects.AsObjects):
15         jsonform = json.loads(form.tojson(verbose=True))
16         if (
17             jsonform["class"] == "ListOffsetArray64"
18             and jsonform["parameters"].get("uproot")
19             == {"as": "array", "header": True, "speedbump": False}
20             and jsonform["content"]["class"] == "ListOffsetArray64"
21             and jsonform["content"]["parameters"].get("uproot")
22             == {"as": "vector", "header": False}
23             and jsonform["content"]["content"]["class"] == "NumpyArray"
24             and jsonform["content"]["content"]["inner_shape"] == []
25             and (
26                 jsonform["content"]["content"].get("primitive") == "float64"
27                 or jsonform["content"]["content"].get("primitive") == "int32"
28             )
29         ):
30             return True
31 
32     return False
33 
34 
35 def basket_array(form, data, byte_offsets, extra):
36     # FIXME: uproot_issue_90 is just a placeholder, to show how it would be done
37 
38     return ak._io.uproot_issue_90(
39         form,
40         ak.layout.NumpyArray(data),
41         ak.layout.Index32(byte_offsets),
42     )
43
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/awkward/_connect/_uproot.py b/src/awkward/_connect/_uproot.py
--- a/src/awkward/_connect/_uproot.py
+++ b/src/awkward/_connect/_uproot.py
@@ -33,9 +33,11 @@
 
 
 def basket_array(form, data, byte_offsets, extra):
+    import awkward._io
+
     # FIXME: uproot_issue_90 is just a placeholder, to show how it would be done
 
-    return ak._io.uproot_issue_90(
+    return awkward._io.uproot_issue_90(
         form,
         ak.layout.NumpyArray(data),
         ak.layout.Index32(byte_offsets),

{"golden_diff": "diff --git a/src/awkward/_connect/_uproot.py b/src/awkward/_connect/_uproot.py\n--- a/src/awkward/_connect/_uproot.py\n+++ b/src/awkward/_connect/_uproot.py\n@@ -33,9 +33,11 @@\n \n \n def basket_array(form, data, byte_offsets, extra):\n+    import awkward._io\n+\n     # FIXME: uproot_issue_90 is just a placeholder, to show how it would be done\n \n-    return ak._io.uproot_issue_90(\n+    return awkward._io.uproot_issue_90(\n         form,\n         ak.layout.NumpyArray(data),\n         ak.layout.Index32(byte_offsets),\n", "issue": "Doubly jagged workaround broken in awkward 1.4.0rc2\nThere was a quick fix (made for KM3NeT data \ud83d\ude04) for doubly jagged arrays which were discussed here https://github.com/scikit-hep/uproot4/issues/90 and the it uses the `akward._io` submodule which is not accessible anymore directly (`AttributeError`) in `1.4.0rc2`.\r\n\r\nSee here:\r\n\r\nhttps://github.com/scikit-hep/awkward-1.0/blob/main/src/awkward/_connect/_uproot.py#L35\r\n\r\nI am not sure what the desired fix is, to import `_io` in `_connect/_uproot.py` or if this fix is now covered by further developments, so I thought I ask first before I do a PR \ud83d\ude09 \r\n\r\nHere is the full MWE (needs `pip install km3net-testdata`, I am not sure if this test\r\n\r\n```python\r\n>>> import uproot\r\n\r\n>>> uproot.__version__\r\n'4.0.7'\r\n\r\n>>> import awkward as ak\r\n\r\n>>> ak.__version__\r\n'1.4.0rc2'\r\n\r\n>>> from km3net_testdata import data_path\r\n\r\n>>> f = uproot.open(data_path(\"offline/mcv5.11r2.gsg_muonCChigherE-CC_50-5000GeV.km3_AAv1.jterbr00004695.jchain.aanet.498.root\"))\r\n\r\n>>> f[\"E/Evt/trks/trks.rec_stages\"].array()\r\n---------------------------------------------------------------------------\r\nAttributeError                            Traceback (most recent call last)\r\n<ipython-input-18-80472509fad7> in <module>\r\n----> 1 f[\"E/Evt/trks/trks.rec_stages\"].array()\r\n\r\n~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/behaviors/TBranch.py in array(self, interpretation, entry_start, entry_stop, decompression_executor, interpretation_executor, array_cache, library)\r\n   2076                         ranges_or_baskets.append((branch, basket_num, range_or_basket))\r\n   2077\r\n-> 2078         _ranges_or_baskets_to_arrays(\r\n   2079             self,\r\n   2080             ranges_or_baskets,\r\n\r\n~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/behaviors/TBranch.py in _ranges_or_baskets_to_arrays(hasbranches, ranges_or_baskets, branchid_interpretation, entry_start, entry_stop, decompression_executor, interpretation_executor, library, arrays, update_ranges_or_baskets)\r\n   3476\r\n   3477         elif isinstance(obj, tuple) and len(obj) == 3:\r\n-> 3478             uproot.source.futures.delayed_raise(*obj)\r\n   3479\r\n   3480         else:\r\n\r\n~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/source/futures.py in delayed_raise(exception_class, exception_value, traceback)\r\n     44         exec(\"raise exception_class, exception_value, traceback\")\r\n     45     else:\r\n---> 46         raise exception_value.with_traceback(traceback)\r\n     47\r\n     48\r\n\r\n~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/behaviors/TBranch.py in basket_to_array(basket)\r\n   3420             basket_arrays = branchid_arrays[branch.cache_key]\r\n   3421\r\n-> 3422             basket_arrays[basket.basket_num] = interpretation.basket_array(\r\n   3423                 basket.data,\r\n   3424                 basket.byte_offsets,\r\n\r\n~/Dev/km3io/venv/lib/python3.9/site-packages/uproot/interpretation/objects.py in basket_array(self, data, byte_offsets, basket, branch, context, cursor_offset, library)\r\n    151                     \"cursor_offset\": cursor_offset,\r\n    152                 }\r\n--> 153                 output = awkward._connect._uproot.basket_array(\r\n    154                     form, data, byte_offsets, extra\r\n    155                 )\r\n\r\n~/Dev/km3io/venv/lib/python3.9/site-packages/awkward/_connect/_uproot.py in basket_array(form, data, byte_offsets, extra)\r\n     36     # FIXME: uproot_issue_90 is just a placeholder, to show how it would be done\r\n     37\r\n---> 38     return ak._io.uproot_issue_90(\r\n     39         form,\r\n     40         ak.layout.NumpyArray(data),\r\n\r\nAttributeError: module 'awkward' has no attribute '_io'\r\n```\r\n\r\n\r\n\n", "before_files": [{"content": "# BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE\n\nfrom __future__ import absolute_import\n\nimport json\n\n# don't import awkward._connect._uproot in awkward/__init__.py!\nimport uproot\n\nimport awkward as ak\n\n\ndef can_optimize(interpretation, form):\n    if isinstance(interpretation, uproot.interpretation.objects.AsObjects):\n        jsonform = json.loads(form.tojson(verbose=True))\n        if (\n            jsonform[\"class\"] == \"ListOffsetArray64\"\n            and jsonform[\"parameters\"].get(\"uproot\")\n            == {\"as\": \"array\", \"header\": True, \"speedbump\": False}\n            and jsonform[\"content\"][\"class\"] == \"ListOffsetArray64\"\n            and jsonform[\"content\"][\"parameters\"].get(\"uproot\")\n            == {\"as\": \"vector\", \"header\": False}\n            and jsonform[\"content\"][\"content\"][\"class\"] == \"NumpyArray\"\n            and jsonform[\"content\"][\"content\"][\"inner_shape\"] == []\n            and (\n                jsonform[\"content\"][\"content\"].get(\"primitive\") == \"float64\"\n                or jsonform[\"content\"][\"content\"].get(\"primitive\") == \"int32\"\n            )\n        ):\n            return True\n\n    return False\n\n\ndef basket_array(form, data, byte_offsets, extra):\n    # FIXME: uproot_issue_90 is just a placeholder, to show how it would be done\n\n    return ak._io.uproot_issue_90(\n        form,\n        ak.layout.NumpyArray(data),\n        ak.layout.Index32(byte_offsets),\n    )\n", "path": "src/awkward/_connect/_uproot.py"}], "after_files": [{"content": "# BSD 3-Clause License; see https://github.com/scikit-hep/awkward-1.0/blob/main/LICENSE\n\nfrom __future__ import absolute_import\n\nimport json\n\n# don't import awkward._connect._uproot in awkward/__init__.py!\nimport uproot\n\nimport awkward as ak\n\n\ndef can_optimize(interpretation, form):\n    if isinstance(interpretation, uproot.interpretation.objects.AsObjects):\n        jsonform = json.loads(form.tojson(verbose=True))\n        if (\n            jsonform[\"class\"] == \"ListOffsetArray64\"\n            and jsonform[\"parameters\"].get(\"uproot\")\n            == {\"as\": \"array\", \"header\": True, \"speedbump\": False}\n            and jsonform[\"content\"][\"class\"] == \"ListOffsetArray64\"\n            and jsonform[\"content\"][\"parameters\"].get(\"uproot\")\n            == {\"as\": \"vector\", \"header\": False}\n            and jsonform[\"content\"][\"content\"][\"class\"] == \"NumpyArray\"\n            and jsonform[\"content\"][\"content\"][\"inner_shape\"] == []\n            and (\n                jsonform[\"content\"][\"content\"].get(\"primitive\") == \"float64\"\n                or jsonform[\"content\"][\"content\"].get(\"primitive\") == \"int32\"\n            )\n        ):\n            return True\n\n    return False\n\n\ndef basket_array(form, data, byte_offsets, extra):\n    import awkward._io\n\n    # FIXME: uproot_issue_90 is just a placeholder, to show how it would be done\n\n    return awkward._io.uproot_issue_90(\n        form,\n        ak.layout.NumpyArray(data),\n        ak.layout.Index32(byte_offsets),\n    )\n", "path": "src/awkward/_connect/_uproot.py"}]}