Repository: modin-project/modin

Issue:
Move engine dispatching stuff to a separate folder to resolve import conflict with modin/data_management/functions
Currently, we have query compilers utils functions and factories dispatching stuff located at the same directory [`modin/data_management`](https://github.com/modin-project/modin/tree/master/modin/data_management), so importing in a query compiler anything from `modin/data_management/functions` will trigger to execute [`modin/data_management/__init__.py`](https://github.com/modin-project/modin/blob/master/modin/data_management/__init__.py), which triggers that chain of imports: `__init__.py` -> `factories` -> `modin.engines.base.io` -> `BaseQueryCompiler`.
So if we want to import something from `data_management/functions` inside `BaseQueryCompiler` (which we want to do since [these](https://github.com/modin-project/modin/pull/2047) changes) that will trigger a circuit import of `BaseQueryCompiler` inside itself. 

Discussion:
codecov[bot]: # [Codecov](https://codecov.io/gh/modin-project/modin/pull/2081?src=pr&el=h1) Report
> Merging [#2081](https://codecov.io/gh/modin-project/modin/pull/2081?src=pr&el=desc) into [master](https://codecov.io/gh/modin-project/modin/commit/51ed0ae345cb19b1bb5ea23f73ce9b9ef9fb392f?el=desc) will **decrease** coverage by `26.28%`.
> The diff coverage is `80.95%`.

[![Impacted file tree graph](https://codecov.io/gh/modin-project/modin/pull/2081/graphs/tree.svg?width=650&height=150&src=pr&token=ynEaSfgM5H)](https://codecov.io/gh/modin-project/modin/pull/2081?src=pr&el=tree)

```diff
@@             Coverage Diff             @@
##           master    #2081       +/-   ##
===========================================
- Coverage   81.97%   55.68%   -26.29%     
===========================================
  Files          84       80        -4     
  Lines        9807     9255      -552     
===========================================
- Hits         8039     5154     -2885     
- Misses       1768     4101     +2333     
```


| [Impacted Files](https://codecov.io/gh/modin-project/modin/pull/2081?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [modin/data\_management/factories/\_\_init\_\_.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZGF0YV9tYW5hZ2VtZW50L2ZhY3Rvcmllcy9fX2luaXRfXy5weQ==) | `100.00% <ø> (ø)` | |
| [modin/data\_management/factories/factories.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZGF0YV9tYW5hZ2VtZW50L2ZhY3Rvcmllcy9mYWN0b3JpZXMucHk=) | `65.89% <ø> (ø)` | |
| [modin/experimental/pandas/io\_exp.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZXhwZXJpbWVudGFsL3BhbmRhcy9pb19leHAucHk=) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| [modin/experimental/pandas/numpy\_wrap.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZXhwZXJpbWVudGFsL3BhbmRhcy9udW1weV93cmFwLnB5) | `0.00% <0.00%> (-83.12%)` | :arrow_down: |
| [modin/pandas/io.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vcGFuZGFzL2lvLnB5) | `92.51% <87.50%> (ø)` | |
| [modin/data\_management/factories/dispatcher.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZGF0YV9tYW5hZ2VtZW50L2ZhY3Rvcmllcy9kaXNwYXRjaGVyLnB5) | `80.00% <100.00%> (ø)` | |
| [modin/experimental/cloud/meta\_magic.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZXhwZXJpbWVudGFsL2Nsb3VkL21ldGFfbWFnaWMucHk=) | `85.18% <100.00%> (+1.54%)` | :arrow_up: |
| [modin/pandas/base.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vcGFuZGFzL2Jhc2UucHk=) | `75.68% <100.00%> (-18.75%)` | :arrow_down: |
| [modin/engines/ray/task\_wrapper.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZW5naW5lcy9yYXkvdGFza193cmFwcGVyLnB5) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| [modin/engines/dask/task\_wrapper.py](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree#diff-bW9kaW4vZW5naW5lcy9kYXNrL3Rhc2tfd3JhcHBlci5weQ==) | `0.00% <0.00%> (-100.00%)` | :arrow_down: |
| ... and [64 more](https://codecov.io/gh/modin-project/modin/pull/2081/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/modin-project/modin/pull/2081?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/modin-project/modin/pull/2081?src=pr&el=footer). Last update [51ed0ae...c94f9aa](https://codecov.io/gh/modin-project/modin/pull/2081?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

modin-bot: <h1 align="center"><img width=7% alt="" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Teamcity_Logo.png/600px-Teamcity_Logo.png">
    TeamCity Python test results bot</h1>

<h3 align="center">Tests PASSed</h3>

<details><summary>Tests Logs</summary>


```
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
collected 114 items

modin/pandas/test/test_io.py .................sX..........s............. [ 37%]
........s............................s..s.X.....s..................ss..  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml


=========== 104 passed, 8 skipped, 2 xpassed, 128 warnings in 34.65s ===========
Closing remaining open files:test_write_modin.hdf...donetest_write_pandas.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [5399] / gw1 [5399] / gw2 [5399] / gw3 [5399] / gw4 [5399] / gw5 [5399] / gw6 [5399] / gw7 [5399] / gw8 [5399] / gw9 [5399] / gw10 [5399] / gw11 [5399] / gw12 [5399] / gw13 [5399] / gw14 [5399] / gw15 [5399] / gw16 [5399] / gw17 [5399] / gw18 [5399] / gw19 [5399] / gw20 [5399] / gw21 [5399] / gw22 [5399] / gw23 [5399] / gw24 [5399] / gw25 [5399] / gw26 [5399] / gw27 [5399] / gw28 [5399] / gw29 [5399] / gw30 [5399] / gw31 [5399] / gw32 [5399] / gw33 [5399] / gw34 [5399] / gw35 [5399] / gw36 [5399] / gw37 [5399] / gw38 [5399] / gw39 [5399] / gw40 [5399] / gw41 [5399] / gw42 [5399] / gw43 [5399] / gw44 [5399] / gw45 [5399] / gw46 [5399] / gw47 [5399]

........................................................................ [  1%]
........................................................................ [  2%]
........................................................................ [  4%]
........................................................................ [  5%]
........................................................................ [  6%]
.......................................................................x [  8%]
.........................................................x.............. [  9%]
....x.......x..........x.........s.......x...............x.............. [ 10%]
......................x................x................................ [ 12%]
................x..x................xx................s................. [ 13%]
..........x...........x....................x...x........x....X....xx.... [ 14%]
x.x............x..X....................x...X..X.X......x...xx........... [ 16%]
.....x....x...x..x........xX.xx................X.........x...x.X..x..X.x [ 17%]
........x....X..X.x........x...xx........x..x.X.X............xX....X.... [ 18%]
x.x...x.xx...xX...X............X...X.......x.X...X........X....X....X... [ 20%]
.......X..XX...X.X..X......X....x................X.....X.X.........Xx... [ 21%]
.....X....X............x........X.....x.......X.X.......X.......X....... [ 22%]
....xX.x.....X......X...............x........xX...............X......... [ 24%]
......x................x.....x....X................xs...X............... [ 25%]
....x...........X.............................x.........X..x.......x.... [ 26%]
.....................................x....................X..........x.. [ 28%]
.......................x..x.............X........X.s.................... [ 29%]
................................X.....x................................. [ 30%]
X....................................................................... [ 32%]
.......X.............................xX................................. [ 33%]
...........X.x........................................X................. [ 34%]
....................x............................X...................... [ 36%]
..............................x....................................X.... [ 37%]
...........................x.........................x.................. [ 38%]
.............................x.......................................... [ 40%]
..........................................x............................. [ 41%]
...........................................................x............ [ 42%]
......................x.................xx.............................. [ 44%]
.......................................x.................x.............. [ 45%]
x...............................................x....................... [ 46%]
...x.........................x.........................................x. [ 48%]
...................x.xx...................................x............. [ 49%]
..sssssssssss.s.......xx...X...x....x....................x.............. [ 50%]
.x..........X.....................................xssssssssssss.X....... [ 52%]
...............................X.................................X...... [ 53%]
.........s............................X............................X.... [ 54%]
......X...................................................X............. [ 56%]
...............................sssssssssss..s........................... [ 57%]
..............................................................s......... [ 58%]
..........X...........................s................................. [ 60%]
.........................................x............................... [ 61%]
...............................................X......x................. [ 62%]
............................ss......X...X...................X.X......... [ 64%]
..........x..X....x...........X..x.....x........X...x.xX.............x.X [ 65%]
....x.......x..............x..x........X.............X..x............... [ 66%]
...........X......X...X...............X..X..........X.....X............. [ 68%]
.....X....................X...................X.......x.x......x........ [ 69%]
............x.....x..................x.........x......X........X........ [ 70%]
........................................................................ [ 72%]
........................................................................ [ 73%]
......................................................................... [ 74%]
........................................................................ [ 76%]
..s........s..s..............s.s..s......x....x...............s..s...... [ 77%]
.....s.....x....s......s..s........x..sx........x......s.s.x..s......... [ 78%]
x....ss....s......s..x...s.............s......s......................... [ 80%]
.x...............xX......s......X........................................ [ 81%]
.......X.XX....X.........X..XX....X...X...X.X...X....X..X..x.....X....XX [ 82%]
.....X............XXX.....X...X.xX..........XX......X.......XX.....X.... [ 84%]
..X.X..X.......................................X....X................... [ 85%]
............................................X........X.................. [ 86%]
...........X...................X.................xX...............X..... [ 88%]
...................................................X........x......x.... [ 89%]
...xx.....xX.Xxx.....X..x...x....x......................x.....X...X.x... [ 90%]
..................X........X.............X.........X...............x.... [ 92%]
..........x....................................x....................x... [ 93%]
.............................................xx...x.x...x.x............. [ 94%]
..x.........x.x.............x..x.......x.......X....xX...Xx............. [ 96%]
........x.......................x....x......................x........x.. [ 97%]
........................................................................ [ 98%]
.........................................x.x.......................      [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml

== 5002 passed, 69 skipped, 176 xfailed, 152 xpassed, 9507 warnings in 52.67s ==
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
collected 114 items

modin/pandas/test/test_io.py .................sX..........s............. [ 37%]
........s............................s..s.X.....s..................ss..  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml


=========== 104 passed, 8 skipped, 2 xpassed, 128 warnings in 34.65s ===========
Closing remaining open files:test_write_modin.hdf...donetest_write_pandas.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [5399] / gw1 [5399] / gw2 [5399] / gw3 [5399] / gw4 [5399] / gw5 [5399] / gw6 [5399] / gw7 [5399] / gw8 [5399] / gw9 [5399] / gw10 [5399] / gw11 [5399] / gw12 [5399] / gw13 [5399] / gw14 [5399] / gw15 [5399] / gw16 [5399] / gw17 [5399] / gw18 [5399] / gw19 [5399] / gw20 [5399] / gw21 [5399] / gw22 [5399] / gw23 [5399] / gw24 [5399] / gw25 [5399] / gw26 [5399] / gw27 [5399] / gw28 [5399] / gw29 [5399] / gw30 [5399] / gw31 [5399] / gw32 [5399] / gw33 [5399] / gw34 [5399] / gw35 [5399] / gw36 [5399] / gw37 [5399] / gw38 [5399] / gw39 [5399] / gw40 [5399] / gw41 [5399] / gw42 [5399] / gw43 [5399] / gw44 [5399] / gw45 [5399] / gw46 [5399] / gw47 [5399]

........................................................................ [  1%]
........................................................................ [  2%]
........................................................................ [  4%]
........................................................................ [  5%]
........................................................................ [  6%]
.......................................................................x [  8%]
.........................................................x.............. [  9%]
....x.......x..........x.........s.......x...............x.............. [ 10%]
......................x................x................................ [ 12%]
................x..x................xx................s................. [ 13%]
..........x...........x....................x...x........x....X....xx.... [ 14%]
x.x............x..X....................x...X..X.X......x...xx........... [ 16%]
.....x....x...x..x........xX.xx................X.........x...x.X..x..X.x [ 17%]
........x....X..X.x........x...xx........x..x.X.X............xX....X.... [ 18%]
x.x...x.xx...xX...X............X...X.......x.X...X........X....X....X... [ 20%]
.......X..XX...X.X..X......X....x................X.....X.X.........Xx... [ 21%]
.....X....X............x........X.....x.......X.X.......X.......X....... [ 22%]
....xX.x.....X......X...............x........xX...............X......... [ 24%]
......x................x.....x....X................xs...X............... [ 25%]
....x...........X.............................x.........X..x.......x.... [ 26%]
.....................................x....................X..........x.. [ 28%]
.......................x..x.............X........X.s.................... [ 29%]
................................X.....x................................. [ 30%]
X....................................................................... [ 32%]
.......X.............................xX................................. [ 33%]
...........X.x........................................X................. [ 34%]
....................x............................X...................... [ 36%]
..............................x....................................X.... [ 37%]
...........................x.........................x.................. [ 38%]
.............................x.......................................... [ 40%]
..........................................x............................. [ 41%]
...........................................................x............ [ 42%]
......................x.................xx.............................. [ 44%]
.......................................x.................x.............. [ 45%]
x...............................................x....................... [ 46%]
...x.........................x.........................................x. [ 48%]
...................x.xx...................................x............. [ 49%]
..sssssssssss.s.......xx...X...x....x....................x.............. [ 50%]
.x..........X.....................................xssssssssssss.X....... [ 52%]
...............................X.................................X...... [ 53%]
.........s............................X............................X.... [ 54%]
......X...................................................X............. [ 56%]
...............................sssssssssss..s........................... [ 57%]
..............................................................s......... [ 58%]
..........X...........................s................................. [ 60%]
.........................................x............................... [ 61%]
...............................................X......x................. [ 62%]
............................ss......X...X...................X.X......... [ 64%]
..........x..X....x...........X..x.....x........X...x.xX.............x.X [ 65%]
....x.......x..............x..x........X.............X..x............... [ 66%]
...........X......X...X...............X..X..........X.....X............. [ 68%]
.....X....................X...................X.......x.x......x........ [ 69%]
............x.....x..................x.........x......X........X........ [ 70%]
........................................................................ [ 72%]
........................................................................ [ 73%]
......................................................................... [ 74%]
........................................................................ [ 76%]
..s........s..s..............s.s..s......x....x...............s..s...... [ 77%]
.....s.....x....s......s..s........x..sx........x......s.s.x..s......... [ 78%]
x....ss....s......s..x...s.............s......s......................... [ 80%]
.x...............xX......s......X........................................ [ 81%]
.......X.XX....X.........X..XX....X...X...X.X...X....X..X..x.....X....XX [ 82%]
.....X............XXX.....X...X.xX..........XX......X.......XX.....X.... [ 84%]
..X.X..X.......................................X....X................... [ 85%]
............................................X........X.................. [ 86%]
...........X...................X.................xX...............X..... [ 88%]
...................................................X........x......x.... [ 89%]
...xx.....xX.Xxx.....X..x...x....x......................x.....X...X.x... [ 90%]
..................X........X.............X.........X...............x.... [ 92%]
..........x....................................x....................x... [ 93%]
.............................................xx...x.x...x.x............. [ 94%]
..x.........x.x.............x..x.......x.......X....xX...Xx............. [ 96%]
........x.......................x....x......................x........x.. [ 97%]
........................................................................ [ 98%]
.........................................x.x.......................      [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml

== 5002 passed, 69 skipped, 176 xfailed, 152 xpassed, 9507 warnings in 52.67s ==

```

</details>

modin-bot: <h1 align="center"><img width=7% alt="" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Teamcity_Logo.png/600px-Teamcity_Logo.png">
    TeamCity Ray test results bot</h1>

<h3 align="center">Tests PASSed</h3>

<details><summary>Tests Logs</summary>


```
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
collected 114 items

modin/pandas/test/test_io.py .................sx..........s............. [ 37%]
.....................................s..s.X.....s..................ss..  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml


= 105 passed, 7 skipped, 1 xfailed, 1 xpassed, 96 warnings in 78.88s (0:01:18) =
Closing remaining open files:test_write_modin.hdf...donetest_write_pandas.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [5399] / gw1 [5399] / gw2 [5399] / gw3 [5399] / gw4 [5399] / gw5 [5399] / gw6 [5399] / gw7 [5399] / gw8 [5399] / gw9 [5399] / gw10 [5399] / gw11 [5399] / gw12 [5399] / gw13 [5399] / gw14 [5399] / gw15 [5399] / gw16 [5399] / gw17 [5399] / gw18 [5399] / gw19 [5399] / gw20 [5399] / gw21 [5399] / gw22 [5399] / gw23 [5399] / gw24 [5399] / gw25 [5399] / gw26 [5399] / gw27 [5399] / gw28 [5399] / gw29 [5399] / gw30 [5399] / gw31 [5399] / gw32 [5399] / gw33 [5399] / gw34 [5399] / gw35 [5399] / gw36 [5399] / gw37 [5399] / gw38 [5399] / gw39 [5399] / gw40 [5399] / gw41 [5399] / gw42 [5399] / gw43 [5399] / gw44 [5399] / gw45 [5399] / gw46 [5399] / gw47 [5399]

........................................................................ [  1%]
........................................................................ [  2%]
........................................................................ [  3%]
........................................................................ [  5%]
......................................................................... [  6%]
........................................................................ [  8%]
.......x..............s..............................x.................. [  9%]
..x....................x......................x...x........x............. [ 10%]
.......x.................x.[2m[36m(pid=9368)[0m error: object directory /localdisk/tc_agent/system/git/git-CE4319E5.git/objects does not exist; check .git/objects/info/alternates.
[2m[36m(pid=9368)[0m fatal: bad object HEAD
.s....................X.......x.............. [ 12%]
.........................................x........x.................x... [ 13%]
.....x.........................................X.x..x....X..X...x....... [ 14%]
.x..........x......x..............x..........x..........x.............X. [ 16%]
.X.X.x.x.X....X..X....x..x.x...x...x.....x.xx..x.X...xxX.X..X.xxX..xX..x [ 17%]
..................x....x........X.......X.....X........xX.....X.X....... [ 18%]
.........x.......................x.....X..x.......x.........x........... [ 20%]
...xx.x......x...X.x.............X....x..........X...X...X............X. [ 21%]
.X.....X.........................x......s..............................x [ 22%]
......................x..........x...................................... [ 24%]
....[2m[36m(pid=9487)[0m RuntimeWarning: overflow encountered in reduce
...X....xX.......X.......X.......X.....................x............ [ 25%]
......x..................x..........X........X.X.X...........X...X....X.. [ 26%]
................X...X.......................X..................X........ [ 28%]
........................................................................... [ 29%]
.............................x..X....................................... [ 30%]
.......................................................................x [ 32%]
........................................................X...x........... [ 33%]
..........................x.........................................Xx.. [ 34%]
....................................................x.................... [ 36%]
..................................x.............x....................... [ 37%]
...................xXXX.............x................X..............x.X. [ 38%]
......................................X.........x......................X [ 40%]
..................x................Xx.....x........x.................... [ 41%]
x..........xxx...................................[2m[36m(pid=10340)[0m error: object directory /localdisk/tc_agent/system/git/git-CE4319E5.git/objects does not exist; check .git/objects/info/alternates.
[2m[36m(pid=10340)[0m fatal: bad object HEAD
........X.............. [ 42%]
...............X.X...................................X................X. [ 44%]
.............X................s.....X................................... [ 45%]
......................X................................X..........x..... [ 46%]
..............................x........................x................ [ 48%]
..........................x............................................. [ 49%]
....x............................x........ssssssssss...............X.... [ 50%]
................X............................ss.ssss.sssssx..s....X..... [ 52%]
...................................X......sssssssssss..s................ [ 53%]
...X..............X.........xxx...............sx.s........x.......xx..x.. [ 54%]
.......x.......x....X............X......X......x.x...................... [ 56%]
........................................................................ [ 57%]
.......................x...........................................X..... [ 58%]
............................................x.....................X.Xx.... [ 60%]
........x.......x...........x..x..x....x.......x.....x.....x.x..X...X... [ 61%]
X...Xx..X...XX....X...XX.............x.....xx.......x.............X..... [ 62%]
.x..................x...............x.....X............................. [ 64%]
............ss........................................................x.. [ 65%]
.........s.............................................................. [ 66%]
.......................X.......X........x............................... [ 68%]
..................................................x..................... [ 69%]
........................................................................ [ 70%]
.............................................................s.......... [ 72%]
.............s......................................................X... [ 73%]
........................................................................ [ 74%]
.............................................s......s...........s....... [ 76%]
.s..s.......s...s..s..............s........s........ss..s.x...s......... [ 77%]
..x....x.......s.....sX.x.........s........s.....s......x...x........s.. [ 78%]
...........sx..s.......................x....................X.....x..... [ 80%]
.........X..XX.x...X.....X....X..s.........XX...X...........X........... [ 81%]
....X....s......X.X....X.xX.......X...X..X.........XX......X.....X...... [ 82%]
xX..X.X.......X............X...X.....xX..X.....X.....x.X..XX.......X..X. [ 84%]
..X........X.X.....xX............x........x......X...X...............X.. [ 85%]
..X...................................................................... [ 86%]
............................................................x.......X... [ 88%]
...............X............x..X..............X......................... [ 89%]
......x.x......x...xx..x...X...x.X........xx............................ [ 90%]
Xx.x....X....x...............x.................x......................... [ 92%]
.x...................................................................X.. [ 93%]
..................................x.x.x.x...xxx..x..........x.x......... [ 94%]
......X..X.Xx....x...........x.....x..x................................. [ 96%]
.............x......................................x.................... [ 97%]
........................................................................ [ 98%]
........................................................                 [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml

= 5002 passed, 69 skipped, 176 xfailed, 152 xpassed, 9468 warnings in 75.24s (0:01:15) =
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
collected 114 items

modin/pandas/test/test_io.py .................sx..........s............. [ 37%]
.....................................s..s.X.....s..................ss..  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml


= 105 passed, 7 skipped, 1 xfailed, 1 xpassed, 96 warnings in 78.88s (0:01:18) =
Closing remaining open files:test_write_modin.hdf...donetest_write_pandas.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [5399] / gw1 [5399] / gw2 [5399] / gw3 [5399] / gw4 [5399] / gw5 [5399] / gw6 [5399] / gw7 [5399] / gw8 [5399] / gw9 [5399] / gw10 [5399] / gw11 [5399] / gw12 [5399] / gw13 [5399] / gw14 [5399] / gw15 [5399] / gw16 [5399] / gw17 [5399] / gw18 [5399] / gw19 [5399] / gw20 [5399] / gw21 [5399] / gw22 [5399] / gw23 [5399] / gw24 [5399] / gw25 [5399] / gw26 [5399] / gw27 [5399] / gw28 [5399] / gw29 [5399] / gw30 [5399] / gw31 [5399] / gw32 [5399] / gw33 [5399] / gw34 [5399] / gw35 [5399] / gw36 [5399] / gw37 [5399] / gw38 [5399] / gw39 [5399] / gw40 [5399] / gw41 [5399] / gw42 [5399] / gw43 [5399] / gw44 [5399] / gw45 [5399] / gw46 [5399] / gw47 [5399]

........................................................................ [  1%]
........................................................................ [  2%]
........................................................................ [  3%]
........................................................................ [  5%]
......................................................................... [  6%]
........................................................................ [  8%]
.......x..............s..............................x.................. [  9%]
..x....................x......................x...x........x............. [ 10%]
.......x.................x.[2m[36m(pid=9368)[0m error: object directory /localdisk/tc_agent/system/git/git-CE4319E5.git/objects does not exist; check .git/objects/info/alternates.
[2m[36m(pid=9368)[0m fatal: bad object HEAD
.s....................X.......x.............. [ 12%]
.........................................x........x.................x... [ 13%]
.....x.........................................X.x..x....X..X...x....... [ 14%]
.x..........x......x..............x..........x..........x.............X. [ 16%]
.X.X.x.x.X....X..X....x..x.x...x...x.....x.xx..x.X...xxX.X..X.xxX..xX..x [ 17%]
..................x....x........X.......X.....X........xX.....X.X....... [ 18%]
.........x.......................x.....X..x.......x.........x........... [ 20%]
...xx.x......x...X.x.............X....x..........X...X...X............X. [ 21%]
.X.....X.........................x......s..............................x [ 22%]
......................x..........x...................................... [ 24%]
....[2m[36m(pid=9487)[0m RuntimeWarning: overflow encountered in reduce
...X....xX.......X.......X.......X.....................x............ [ 25%]
......x..................x..........X........X.X.X...........X...X....X.. [ 26%]
................X...X.......................X..................X........ [ 28%]
........................................................................... [ 29%]
.............................x..X....................................... [ 30%]
.......................................................................x [ 32%]
........................................................X...x........... [ 33%]
..........................x.........................................Xx.. [ 34%]
....................................................x.................... [ 36%]
..................................x.............x....................... [ 37%]
...................xXXX.............x................X..............x.X. [ 38%]
......................................X.........x......................X [ 40%]
..................x................Xx.....x........x.................... [ 41%]
x..........xxx...................................[2m[36m(pid=10340)[0m error: object directory /localdisk/tc_agent/system/git/git-CE4319E5.git/objects does not exist; check .git/objects/info/alternates.
[2m[36m(pid=10340)[0m fatal: bad object HEAD
........X.............. [ 42%]
...............X.X...................................X................X. [ 44%]
.............X................s.....X................................... [ 45%]
......................X................................X..........x..... [ 46%]
..............................x........................x................ [ 48%]
..........................x............................................. [ 49%]
....x............................x........ssssssssss...............X.... [ 50%]
................X............................ss.ssss.sssssx..s....X..... [ 52%]
...................................X......sssssssssss..s................ [ 53%]
...X..............X.........xxx...............sx.s........x.......xx..x.. [ 54%]
.......x.......x....X............X......X......x.x...................... [ 56%]
........................................................................ [ 57%]
.......................x...........................................X..... [ 58%]
............................................x.....................X.Xx.... [ 60%]
........x.......x...........x..x..x....x.......x.....x.....x.x..X...X... [ 61%]
X...Xx..X...XX....X...XX.............x.....xx.......x.............X..... [ 62%]
.x..................x...............x.....X............................. [ 64%]
............ss........................................................x.. [ 65%]
.........s.............................................................. [ 66%]
.......................X.......X........x............................... [ 68%]
..................................................x..................... [ 69%]
........................................................................ [ 70%]
.............................................................s.......... [ 72%]
.............s......................................................X... [ 73%]
........................................................................ [ 74%]
.............................................s......s...........s....... [ 76%]
.s..s.......s...s..s..............s........s........ss..s.x...s......... [ 77%]
..x....x.......s.....sX.x.........s........s.....s......x...x........s.. [ 78%]
...........sx..s.......................x....................X.....x..... [ 80%]
.........X..XX.x...X.....X....X..s.........XX...X...........X........... [ 81%]
....X....s......X.X....X.xX.......X...X..X.........XX......X.....X...... [ 82%]
xX..X.X.......X............X...X.....xX..X.....X.....x.X..XX.......X..X. [ 84%]
..X........X.X.....xX............x........x......X...X...............X.. [ 85%]
..X...................................................................... [ 86%]
............................................................x.......X... [ 88%]
...............X............x..X..............X......................... [ 89%]
......x.x......x...xx..x...X...x.X........xx............................ [ 90%]
Xx.x....X....x...............x.................x......................... [ 92%]
.x...................................................................X.. [ 93%]
..................................x.x.x.x...xxx..x..........x.x......... [ 94%]
......X..X.Xx....x...........x.....x..x................................. [ 96%]
.............x......................................x.................... [ 97%]
........................................................................ [ 98%]
........................................................                 [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml

= 5002 passed, 69 skipped, 176 xfailed, 152 xpassed, 9468 warnings in 75.24s (0:01:15) =

```

</details>

modin-bot: <h1 align="center"><img width=7% alt="" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Teamcity_Logo.png/600px-Teamcity_Logo.png">
    TeamCity Dask test results bot</h1>

<h3 align="center">Tests PASSed</h3>

<details><summary>Tests Logs</summary>


```
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
collected 114 items

modin/pandas/test/test_io.py .................sx..........s............. [ 37%]
.....................................s..s.X.....s..................ss..  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml


= 105 passed, 7 skipped, 1 xfailed, 1 xpassed, 108 warnings in 86.13s (0:01:26) =
Closing remaining open files:test_write_pandas.hdf...donetest_write_modin.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [5399] / gw1 [5399] / gw2 [5399] / gw3 [5399] / gw4 [5399] / gw5 [5399] / gw6 [5399] / gw7 [5399] / gw8 [5399] / gw9 [5399] / gw10 [5399] / gw11 [5399] / gw12 [5399] / gw13 [5399] / gw14 [5399] / gw15 [5399] / gw16 [5399] / gw17 [5399] / gw18 [5399] / gw19 [5399] / gw20 [5399] / gw21 [5399] / gw22 [5399] / gw23 [5399] / gw24 [5399] / gw25 [5399] / gw26 [5399] / gw27 [5399] / gw28 [5399] / gw29 [5399] / gw30 [5399] / gw31 [5399] / gw32 [5399] / gw33 [5399] / gw34 [5399] / gw35 [5399] / gw36 [5399] / gw37 [5399] / gw38 [5399] / gw39 [5399] / gw40 [5399] / gw41 [5399] / gw42 [5399] / gw43 [5399] / gw44 [5399] / gw45 [5399] / gw46 [5399] / gw47 [5399]

........................................................................ [  1%]
........................................................................ [  2%]
........................................................................ [  4%]
........................................................................ [  5%]
........................................................................ [  6%]
........................................................................ [  7%]
..................x.s..................................................x [  9%]
....................................x.x....................x...........x [ 10%]
........x.........................................................x..... [ 12%]
...x.X....x..s......................................................x... [ 13%]
...x...x...x..........x......x...x...........x..x.x..................... [ 14%]
................X.....................x..............x.................. [ 15%]
...............x................x......x.......x......................... [ 17%]
...........................................................x............. [ 18%]
...............................x.................x...................... [ 20%]
........X.......................x..............x.....................x.. [ 21%]
.....X.......X...X........X......X..X.......x.....sx..................... [ 22%]
...x................X..............X..........x......................... [ 24%]
.............................x............X...................x........... [ 25%]
..............x........................Xx........x...................... [ 26%]
......x.....................x...................x............X........... [ 28%]
..X......Xx.......x......X.........X.....X.....X....X.....X.....x....... [ 29%]
...X................X...X..............Xx............................... [ 30%]
............x....................x...............x................x..... [ 32%]
......x......x................................................x......... [ 33%]
..................x.....................................X............... [ 34%]
.x..................................XX..x.X.......x.................x... [ 36%]
X.....X..........X.X.....X..........X.........X.....X......X.X.......X.. [ 37%]
...X....X...........X..................................................x [ 38%]
........................x.........x..............x.....................x [ 40%]
.........X...........................................x.................. [ 41%]
.........x....................x..x...................x....x........x.... [ 42%]
...x..X...........s.ss.XssX.ss..sss..Xss....x...X....x..X..X.X.......... [ 44%]
.xx....x..X.......X..x...x.X.....x..x.X......s.sssXssss.ss..ssX......... [ 45%]
.......................x.s.s........X.......x...........s..sssssXssss.... [ 46%]
...x...........................................x........................ [ 48%]
.....x................x...x................x............................ [ 49%]
....x..................x.............X....s...X...X............X......... [ 50%]
......................................................................... [ 52%]
.......................X.....X........X.......x......................... [ 53%]
x..........x.....................x.....................x...............x [ 54%]
.....X.......X..X........X...X..x.X................x..............x..... [ 56%]
......x..............x.................x.............x....X...X......... [ 57%]
.................x.....x...X........X........ss.x..........x............ [ 58%]
...................x.........................X........................... [ 60%]
......................................................................... [ 61%]
.........................s.............................................. [ 62%]
.........x....x.......................x........x............x.....x..... [ 64%]
.X..XX...X....X.X....................................................... [ 65%]
............x..................X..............X.......................... [ 66%]
.............................................x.......................... [ 68%]
........................................................................ [ 69%]
...............................................................s........ [ 70%]
...........................X........................s................... [ 72%]
........................................................................ [ 73%]
..............................................X..s.....s................ [ 74%]
...s.......s....................s..s.................s.....x...........s. [ 76%]
s..s.X....x.............sx......x...s.s..............s.......s........s. [ 77%]
...x.......s....x.x....x.......s........x.x.s........x.....x..sXx...xX.. [ 78%]
Xx...XX..X.......s....x..X.....sx...................X.....X.......X..X.. [ 80%]
...s........x.....sXX........XXx..X............X..X......X..X.X....X.... [ 81%]
.X....X.X.XXX....xX.X....x.....X...X..X.......X.XX..X.............X....X. [ 82%]
.....X........x...........x..XX...................X.X....X.......X.....X [ 84%]
...X.............................................................x...... [ 85%]
..................X..x.....................X..................x......... [ 86%]
.X.......X...........X.................................................. [ 88%]
.............................x....X.....x.x...xXx.X...........x......... [ 89%]
x.......X..x....x...X....xx................x...........X.....X.......x.. [ 90%]
................................x....................................... [ 92%]
.................................x....................................... [ 93%]
..............x..xx.......x.x...x..xx................x...x..x....x...... [ 94%]
....x............x...x.................................................. [ 96%]
...X.X....x.............................................................. [ 97%]
........................................................................ [ 98%]
......................................x................                  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml

= 5002 passed, 69 skipped, 176 xfailed, 152 xpassed, 9506 warnings in 100.64s (0:01:40) =
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
collected 114 items

modin/pandas/test/test_io.py .................sx..........s............. [ 37%]
.....................................s..s.X.....s..................ss..  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml


= 105 passed, 7 skipped, 1 xfailed, 1 xpassed, 108 warnings in 86.13s (0:01:26) =
Closing remaining open files:test_write_pandas.hdf...donetest_write_modin.hdf...done
============================= test session starts ==============================
platform linux -- Python 3.8.5, pytest-6.0.2, py-1.9.0, pluggy-0.13.1
rootdir: /modin, configfile: setup.cfg
plugins: cov-2.10.1, forked-1.2.0, xdist-2.1.0
gw0 I / gw1 I / gw2 I / gw3 I / gw4 I / gw5 I / gw6 I / gw7 I / gw8 I / gw9 I / gw10 I / gw11 I / gw12 I / gw13 I / gw14 I / gw15 I / gw16 I / gw17 I / gw18 I / gw19 I / gw20 I / gw21 I / gw22 I / gw23 I / gw24 I / gw25 I / gw26 I / gw27 I / gw28 I / gw29 I / gw30 I / gw31 I / gw32 I / gw33 I / gw34 I / gw35 I / gw36 I / gw37 I / gw38 I / gw39 I / gw40 I / gw41 I / gw42 I / gw43 I / gw44 I / gw45 I / gw46 I / gw47 I
gw0 [5399] / gw1 [5399] / gw2 [5399] / gw3 [5399] / gw4 [5399] / gw5 [5399] / gw6 [5399] / gw7 [5399] / gw8 [5399] / gw9 [5399] / gw10 [5399] / gw11 [5399] / gw12 [5399] / gw13 [5399] / gw14 [5399] / gw15 [5399] / gw16 [5399] / gw17 [5399] / gw18 [5399] / gw19 [5399] / gw20 [5399] / gw21 [5399] / gw22 [5399] / gw23 [5399] / gw24 [5399] / gw25 [5399] / gw26 [5399] / gw27 [5399] / gw28 [5399] / gw29 [5399] / gw30 [5399] / gw31 [5399] / gw32 [5399] / gw33 [5399] / gw34 [5399] / gw35 [5399] / gw36 [5399] / gw37 [5399] / gw38 [5399] / gw39 [5399] / gw40 [5399] / gw41 [5399] / gw42 [5399] / gw43 [5399] / gw44 [5399] / gw45 [5399] / gw46 [5399] / gw47 [5399]

........................................................................ [  1%]
........................................................................ [  2%]
........................................................................ [  4%]
........................................................................ [  5%]
........................................................................ [  6%]
........................................................................ [  7%]
..................x.s..................................................x [  9%]
....................................x.x....................x...........x [ 10%]
........x.........................................................x..... [ 12%]
...x.X....x..s......................................................x... [ 13%]
...x...x...x..........x......x...x...........x..x.x..................... [ 14%]
................X.....................x..............x.................. [ 15%]
...............x................x......x.......x......................... [ 17%]
...........................................................x............. [ 18%]
...............................x.................x...................... [ 20%]
........X.......................x..............x.....................x.. [ 21%]
.....X.......X...X........X......X..X.......x.....sx..................... [ 22%]
...x................X..............X..........x......................... [ 24%]
.............................x............X...................x........... [ 25%]
..............x........................Xx........x...................... [ 26%]
......x.....................x...................x............X........... [ 28%]
..X......Xx.......x......X.........X.....X.....X....X.....X.....x....... [ 29%]
...X................X...X..............Xx............................... [ 30%]
............x....................x...............x................x..... [ 32%]
......x......x................................................x......... [ 33%]
..................x.....................................X............... [ 34%]
.x..................................XX..x.X.......x.................x... [ 36%]
X.....X..........X.X.....X..........X.........X.....X......X.X.......X.. [ 37%]
...X....X...........X..................................................x [ 38%]
........................x.........x..............x.....................x [ 40%]
.........X...........................................x.................. [ 41%]
.........x....................x..x...................x....x........x.... [ 42%]
...x..X...........s.ss.XssX.ss..sss..Xss....x...X....x..X..X.X.......... [ 44%]
.xx....x..X.......X..x...x.X.....x..x.X......s.sssXssss.ss..ssX......... [ 45%]
.......................x.s.s........X.......x...........s..sssssXssss.... [ 46%]
...x...........................................x........................ [ 48%]
.....x................x...x................x............................ [ 49%]
....x..................x.............X....s...X...X............X......... [ 50%]
......................................................................... [ 52%]
.......................X.....X........X.......x......................... [ 53%]
x..........x.....................x.....................x...............x [ 54%]
.....X.......X..X........X...X..x.X................x..............x..... [ 56%]
......x..............x.................x.............x....X...X......... [ 57%]
.................x.....x...X........X........ss.x..........x............ [ 58%]
...................x.........................X........................... [ 60%]
......................................................................... [ 61%]
.........................s.............................................. [ 62%]
.........x....x.......................x........x............x.....x..... [ 64%]
.X..XX...X....X.X....................................................... [ 65%]
............x..................X..............X.......................... [ 66%]
.............................................x.......................... [ 68%]
........................................................................ [ 69%]
...............................................................s........ [ 70%]
...........................X........................s................... [ 72%]
........................................................................ [ 73%]
..............................................X..s.....s................ [ 74%]
...s.......s....................s..s.................s.....x...........s. [ 76%]
s..s.X....x.............sx......x...s.s..............s.......s........s. [ 77%]
...x.......s....x.x....x.......s........x.x.s........x.....x..sXx...xX.. [ 78%]
Xx...XX..X.......s....x..X.....sx...................X.....X.......X..X.. [ 80%]
...s........x.....sXX........XXx..X............X..X......X..X.X....X.... [ 81%]
.X....X.X.XXX....xX.X....x.....X...X..X.......X.XX..X.............X....X. [ 82%]
.....X........x...........x..XX...................X.X....X.......X.....X [ 84%]
...X.............................................................x...... [ 85%]
..................X..x.....................X..................x......... [ 86%]
.X.......X...........X.................................................. [ 88%]
.............................x....X.....x.x...xXx.X...........x......... [ 89%]
x.......X..x....x...X....xx................x...........X.....X.......x.. [ 90%]
................................x....................................... [ 92%]
.................................x....................................... [ 93%]
..............x..xx.......x.x...x..xx................x...x..x....x...... [ 94%]
....x............x...x.................................................. [ 96%]
...X.X....x.............................................................. [ 97%]
........................................................................ [ 98%]
......................................x................                  [100%]

----------- coverage: platform linux, python 3.8.5-final-0 -----------
Coverage XML written to file coverage.xml

= 5002 passed, 69 skipped, 176 xfailed, 152 xpassed, 9506 warnings in 100.64s (0:01:40) =

```

</details>


Patch:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 42b5ba13..e162c522 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -163,7 +163,7 @@ jobs:
           conda list
       - name: Internals tests
         shell: bash -l {0}
-        run: python -m pytest modin/test/test_publisher.py modin/data_management/test/test_dispatcher.py
+        run: python -m pytest modin/test/test_publisher.py modin/data_management/factories/test/test_dispatcher.py
 
   test-all:
     needs: [lint-commit, lint-flake8, lint-black, test-api, test-headers]
diff --git a/LISCENSE_HEADER b/LICENSE_HEADER
similarity index 100%
rename from LISCENSE_HEADER
rename to LICENSE_HEADER
diff --git a/modin/apply_license_header.py b/modin/apply_license_header.py
index 7f9f94d1..997ee933 100644
--- a/modin/apply_license_header.py
+++ b/modin/apply_license_header.py
@@ -19,7 +19,7 @@ from os.path import dirname, abspath
 rootdir = dirname(abspath(__file__))
 exclude_files = ["_version.py"]
 
-with open("{}{}".format(dirname(rootdir), "/LISCENSE_HEADER"), "r") as f:
+with open("{}{}".format(dirname(rootdir), "/LICENSE_HEADER"), "r") as f:
     # Lines to check each line individually
     header_lines = f.readlines()
 
diff --git a/modin/backends/pandas/query_compiler.py b/modin/backends/pandas/query_compiler.py
index b4312f72..9053bf1e 100644
--- a/modin/backends/pandas/query_compiler.py
+++ b/modin/backends/pandas/query_compiler.py
@@ -1097,12 +1097,21 @@ class PandasQueryCompiler(BaseQueryCompiler):
         def map_func(df):
             return pandas.DataFrame(df.unstack(level=level, fill_value=fill_value))
 
+        is_correct_len = True
+        if isinstance(self.index, pandas.MultiIndex):
+            actual_len = 1
+            for lvl in self.index.levels:
+                actual_len *= len(lvl)
+            if len(self.index) * len(self.columns) != actual_len * len(self.columns):
+                is_correct_len = False
+
         is_all_multi_list = False
         if (
             isinstance(self.index, pandas.MultiIndex)
             and isinstance(self.columns, pandas.MultiIndex)
             and is_list_like(level)
             and len(level) == self.index.nlevels
+            and is_correct_len
         ):
             is_all_multi_list = True
             real_cols_bkp = self.columns
@@ -1116,40 +1125,56 @@ class PandasQueryCompiler(BaseQueryCompiler):
         )
         result = self.__constructor__(new_modin_frame)
 
-        if is_all_multi_list:
+        def compute_index(index, columns, consider_index=True, consider_columns=True):
+            def get_unique_level_values(index):
+                return [
+                    index.get_level_values(lvl).unique()
+                    for lvl in np.arange(index.nlevels)
+                ]
+
+            new_index = (
+                get_unique_level_values(index)
+                if consider_index
+                else index
+                if isinstance(index, list)
+                else [index]
+            )
+
+            new_columns = (
+                get_unique_level_values(columns) if consider_columns else [columns]
+            )
+            return pandas.MultiIndex.from_product([*new_columns, *new_index])
+
+        if is_all_multi_list and is_correct_len:
             result = result.sort_index()
             index_level_values = [lvl for lvl in obj.index.levels]
-            columns_level_values = [
-                real_cols_bkp.get_level_values(lvl).unique()
-                for lvl in np.arange(real_cols_bkp.nlevels)
-            ]
-            result.index = pandas.MultiIndex.from_product(
-                [*columns_level_values, *index_level_values]
+
+            result.index = compute_index(
+                index_level_values, real_cols_bkp, consider_index=False
             )
             return result
 
         if need_reindex:
-            if isinstance(self.index, pandas.MultiIndex):
-                index_level_values = [
-                    self.index.get_level_values(lvl).unique()
-                    for lvl in np.arange(self.index.nlevels)
-                ]
-                new_index = pandas.MultiIndex.from_product(
-                    [self.columns, *index_level_values]
+            if is_correct_len:
+                is_recompute_index = isinstance(self.index, pandas.MultiIndex)
+                is_recompute_columns = not is_recompute_index and isinstance(
+                    self.columns, pandas.MultiIndex
+                )
+                new_index = compute_index(
+                    self.index, self.columns, is_recompute_index, is_recompute_columns
                 )
             else:
                 if isinstance(self.columns, pandas.MultiIndex):
-                    columns_level_values = [
-                        self.columns.get_level_values(lvl).unique()
-                        for lvl in np.arange(self.columns.nlevels)
-                    ]
-                    new_index = pandas.MultiIndex.from_product(
-                        [*columns_level_values, self.index]
-                    )
+                    new_index = compute_index(self.index, self.columns)
                 else:
-                    new_index = pandas.MultiIndex.from_product(
-                        [self.columns, self.index]
+                    index = pandas.MultiIndex.from_tuples(
+                        list(self.index) * len(self.columns)
                     )
+                    columns = self.columns.repeat(len(self.index))
+                    index_levels = [
+                        index.get_level_values(i) for i in range(index.nlevels)
+                    ]
+                    new_index = pandas.MultiIndex.from_arrays([columns] + index_levels)
             result = result.reindex(0, new_index)
         return result
 
diff --git a/modin/data_management/__init__.py b/modin/data_management/__init__.py
index b6fdf0cb..cae6413e 100644
--- a/modin/data_management/__init__.py
+++ b/modin/data_management/__init__.py
@@ -10,20 +10,3 @@
 # the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
 # ANY KIND, either express or implied. See the License for the specific language
 # governing permissions and limitations under the License.
-
-from . import factories
-
-
-def _get_remote_engines():
-    for name in dir(factories):
-        obj = getattr(factories, name)
-        if isinstance(obj, type) and issubclass(
-            obj, factories.ExperimentalRemoteFactory
-        ):
-            try:
-                yield obj.get_info().engine
-            except factories.NotRealFactory:
-                pass
-
-
-REMOTE_ENGINES = set(_get_remote_engines())
diff --git a/modin/data_management/factories/__init__.py b/modin/data_management/factories/__init__.py
new file mode 100644
index 00000000..b6fdf0cb
--- /dev/null
+++ b/modin/data_management/factories/__init__.py
@@ -0,0 +1,29 @@
+# Licensed to Modin Development Team under one or more contributor license agreements.
+# See the NOTICE file distributed with this work for additional information regarding
+# copyright ownership.  The Modin Development Team licenses this file to you under the
+# Apache License, Version 2.0 (the "License"); you may not use this file except in
+# compliance with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software distributed under
+# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, either express or implied. See the License for the specific language
+# governing permissions and limitations under the License.
+
+from . import factories
+
+
+def _get_remote_engines():
+    for name in dir(factories):
+        obj = getattr(factories, name)
+        if isinstance(obj, type) and issubclass(
+            obj, factories.ExperimentalRemoteFactory
+        ):
+            try:
+                yield obj.get_info().engine
+            except factories.NotRealFactory:
+                pass
+
+
+REMOTE_ENGINES = set(_get_remote_engines())
diff --git a/modin/data_management/dispatcher.py b/modin/data_management/factories/dispatcher.py
similarity index 99%
rename from modin/data_management/dispatcher.py
rename to modin/data_management/factories/dispatcher.py
index 9a7a71a8..3a6f20c5 100644
--- a/modin/data_management/dispatcher.py
+++ b/modin/data_management/factories/dispatcher.py
@@ -14,7 +14,7 @@
 import os
 
 from modin import execution_engine, partition_format
-from modin.data_management import factories
+from modin.data_management.factories import factories
 
 
 class FactoryNotFoundError(AttributeError):
diff --git a/modin/experimental/cloud/meta_magic.py b/modin/experimental/cloud/meta_magic.py
index fba82613..8683ca8b 100644
--- a/modin/experimental/cloud/meta_magic.py
+++ b/modin/experimental/cloud/meta_magic.py
@@ -16,7 +16,7 @@ import inspect
 import types
 
 from modin import execution_engine
-from modin.data_management import REMOTE_ENGINES
+from modin.data_management.factories import REMOTE_ENGINES
 
 # the attributes that must be alwasy taken from a local part of dual-nature class,
 # never going to remote end
diff --git a/modin/experimental/pandas/io_exp.py b/modin/experimental/pandas/io_exp.py
index a0d37c2b..3c24d06f 100644
--- a/modin/experimental/pandas/io_exp.py
+++ b/modin/experimental/pandas/io_exp.py
@@ -15,7 +15,7 @@ import inspect
 import os
 
 from . import DataFrame
-from modin.data_management.dispatcher import EngineDispatcher
+from modin.data_management.factories.dispatcher import EngineDispatcher
 
 
 def read_sql(
diff --git a/modin/experimental/pandas/numpy_wrap.py b/modin/experimental/pandas/numpy_wrap.py
index 680b12a9..1c4b1fc2 100644
--- a/modin/experimental/pandas/numpy_wrap.py
+++ b/modin/experimental/pandas/numpy_wrap.py
@@ -27,7 +27,7 @@ else:
     import types
     import copyreg
     from modin import execution_engine
-    from modin.data_management import REMOTE_ENGINES
+    from modin.data_management.factories import REMOTE_ENGINES
     import modin
     import pandas
     import os
diff --git a/modin/pandas/__init__.py b/modin/pandas/__init__.py
index be987fd9..18604710 100644
--- a/modin/pandas/__init__.py
+++ b/modin/pandas/__init__.py
@@ -155,7 +155,7 @@ def _update_engine(publisher: Publisher):
             init_remote_ray()
             # import EngineDispatcher here to initialize IO class
             # so it doesn't skew read_csv() timings later on
-            import modin.data_management.dispatcher  # noqa: F401
+            import modin.data_management.factories.dispatcher  # noqa: F401
 
         num_cpus = remote_ray.cluster_resources()["CPU"]
     elif publisher.get() not in _NOINIT_ENGINES:
diff --git a/modin/pandas/base.py b/modin/pandas/base.py
index 22563655..af68ee68 100644
--- a/modin/pandas/base.py
+++ b/modin/pandas/base.py
@@ -3079,7 +3079,7 @@ class BasePandasDataset(object):
             # so pandas._to_sql will not write the index to the database as well
             index = False
 
-        from modin.data_management.dispatcher import EngineDispatcher
+        from modin.data_management.factories.dispatcher import EngineDispatcher
 
         EngineDispatcher.to_sql(
             new_query_compiler,
diff --git a/modin/pandas/io.py b/modin/pandas/io.py
index 85b644e8..3190cec4 100644
--- a/modin/pandas/io.py
+++ b/modin/pandas/io.py
@@ -35,7 +35,7 @@ def read_parquet(path, engine: str = "auto", columns=None, **kwargs):
         engine: This argument doesn't do anything for now.
         kwargs: Pass into parquet's read_pandas function.
     """
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(
         query_compiler=EngineDispatcher.read_parquet(
@@ -122,7 +122,7 @@ def _read(**kwargs):
               We only support local files for now.
         kwargs: Keyword arguments in pandas.read_csv
     """
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     pd_obj = EngineDispatcher.read_csv(**kwargs)
     # This happens when `read_csv` returns a TextFileReader object for iterating through
@@ -157,7 +157,7 @@ def read_json(
 ):
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_json(**kwargs))
 
@@ -181,7 +181,7 @@ def read_gbq(
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
     kwargs.update(kwargs.pop("kwargs", {}))
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_gbq(**kwargs))
 
@@ -205,7 +205,7 @@ def read_html(
 ):
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_html(**kwargs))
 
@@ -214,7 +214,7 @@ def read_clipboard(sep=r"\s+", **kwargs):  # pragma: no cover
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
     kwargs.update(kwargs.pop("kwargs", {}))
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_clipboard(**kwargs))
 
@@ -250,7 +250,7 @@ def read_excel(
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
     kwargs.update(kwargs.pop("kwds", {}))
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     intermediate = EngineDispatcher.read_excel(**kwargs)
     if isinstance(intermediate, (OrderedDict, dict)):
@@ -278,7 +278,7 @@ def read_hdf(
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
     kwargs.update(kwargs.pop("kwargs", {}))
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_hdf(**kwargs))
 
@@ -286,7 +286,7 @@ def read_hdf(
 def read_feather(path, columns=None, use_threads: bool = True):
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_feather(**kwargs))
 
@@ -305,7 +305,7 @@ def read_stata(
 ):
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_stata(**kwargs))
 
@@ -320,7 +320,7 @@ def read_sas(
 ):  # pragma: no cover
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_sas(**kwargs))
 
@@ -330,7 +330,7 @@ def read_pickle(
 ):
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_pickle(**kwargs))
 
@@ -374,7 +374,7 @@ def read_sql(
     """
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     if kwargs.get("chunksize") is not None:
         ErrorMessage.default_to_pandas("Parameters provided [chunksize]")
@@ -392,7 +392,7 @@ def read_fwf(
     infer_nrows=100,
     **kwds,
 ):
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
     kwargs.update(kwargs.pop("kwds", {}))
@@ -419,7 +419,7 @@ def read_sql_table(
 ):
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_sql_table(**kwargs))
 
@@ -435,7 +435,7 @@ def read_sql_query(
 ):
     _, _, _, kwargs = inspect.getargvalues(inspect.currentframe())
 
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(query_compiler=EngineDispatcher.read_sql_query(**kwargs))
 
@@ -445,7 +445,7 @@ def read_spss(
     usecols: Union[Sequence[str], type(None)] = None,
     convert_categoricals: bool = True,
 ):
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     return DataFrame(
         query_compiler=EngineDispatcher.read_spss(path, usecols, convert_categoricals)
@@ -458,7 +458,7 @@ def to_pickle(
     compression: Optional[str] = "infer",
     protocol: int = 4,
 ):
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     if isinstance(obj, DataFrame):
         obj = obj._query_compiler
diff --git a/modin/pandas/utils.py b/modin/pandas/utils.py
index 25461db4..ef28df38 100644
--- a/modin/pandas/utils.py
+++ b/modin/pandas/utils.py
@@ -13,7 +13,7 @@
 
 
 def from_non_pandas(df, index, columns, dtype):
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
 
     new_qc = EngineDispatcher.from_non_pandas(df, index, columns, dtype)
     if new_qc is not None:
@@ -31,7 +31,7 @@ def from_pandas(df):
     Returns:
         A new Modin DataFrame object.
     """
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
     from .dataframe import DataFrame
 
     return DataFrame(query_compiler=EngineDispatcher.from_pandas(df))
@@ -50,7 +50,7 @@ def from_arrow(at):
     DataFrame
         A new Modin DataFrame object.
     """
-    from modin.data_management.dispatcher import EngineDispatcher
+    from modin.data_management.factories.dispatcher import EngineDispatcher
     from .dataframe import DataFrame
 
     return DataFrame(query_compiler=EngineDispatcher.from_arrow(at))


Test patch:
diff --git a/modin/data_management/factories.py b/modin/data_management/factories/factories.py
similarity index 100%
rename from modin/data_management/factories.py
rename to modin/data_management/factories/factories.py
diff --git a/modin/data_management/test/__init__.py b/modin/data_management/factories/test/__init__.py
similarity index 100%
rename from modin/data_management/test/__init__.py
rename to modin/data_management/factories/test/__init__.py
diff --git a/modin/data_management/test/test_dispatcher.py b/modin/data_management/factories/test/test_dispatcher.py
similarity index 94%
rename from modin/data_management/test/test_dispatcher.py
rename to modin/data_management/factories/test/test_dispatcher.py
index 787b6661..8fe4e055 100644
--- a/modin/data_management/test/test_dispatcher.py
+++ b/modin/data_management/factories/test/test_dispatcher.py
@@ -15,8 +15,11 @@ import pytest
 
 from modin import execution_engine, partition_format, set_backends
 
-from modin.data_management.dispatcher import EngineDispatcher, FactoryNotFoundError
-from modin.data_management import factories
+from modin.data_management.factories.dispatcher import (
+    EngineDispatcher,
+    FactoryNotFoundError,
+)
+from modin.data_management.factories import factories
 
 import modin.pandas as pd
 
diff --git a/modin/pandas/test/dataframe/test_default.py b/modin/pandas/test/dataframe/test_default.py
index ca715883..1c249f84 100644
--- a/modin/pandas/test/dataframe/test_default.py
+++ b/modin/pandas/test/dataframe/test_default.py
@@ -964,43 +964,25 @@ def test_unstack(data, is_multi_idx, is_multi_col):
     modin_df = pd.DataFrame(data)
 
     if is_multi_idx:
-        if len(pandas_df.index) == 256:
-            index = pd.MultiIndex.from_product(
-                [
-                    ["a", "b", "c", "d"],
-                    ["x", "y", "z", "last"],
-                    ["i", "j", "k", "index"],
-                    [1, 2, 3, 4],
-                ]
-            )
-        elif len(pandas_df.index) == 100:
-            index = pd.MultiIndex.from_product(
-                [
-                    ["x", "y", "z", "last"],
-                    ["a", "b", "c", "d", "f"],
-                    ["i", "j", "k", "l", "index"],
-                ]
-            )
+        index = pd.MultiIndex.from_product(
+            [
+                ["a", "b", "c", "d"],
+                ["x", "y", "z", "last"],
+                ["i", "j", "k", "index"],
+                [1, 2, 3, 4],
+            ]
+        )
     else:
         index = pandas_df.index
 
     if is_multi_col:
-        if len(pandas_df.columns) == 64:
-            columns = pd.MultiIndex.from_product(
-                [
-                    ["A", "B", "C", "D"],
-                    ["xx", "yy", "zz", "LAST"],
-                    [10, 20, 30, 40],
-                ]
-            )
-        elif len(pandas_df.columns) == 100:
-            columns = pd.MultiIndex.from_product(
-                [
-                    ["xx", "yy", "zz", "LAST"],
-                    ["A", "B", "C", "D", "F"],
-                    ["I", "J", "K", "L", "INDEX"],
-                ]
-            )
+        columns = pd.MultiIndex.from_product(
+            [
+                ["A", "B", "C", "D"],
+                ["xx", "yy", "zz", "LAST"],
+                [10, 20, 30, 40],
+            ]
+        )
     else:
         columns = pandas_df.columns
 
@@ -1016,12 +998,44 @@ def test_unstack(data, is_multi_idx, is_multi_col):
         df_equals(modin_df.unstack(level=1), pandas_df.unstack(level=1))
         df_equals(modin_df.unstack(level=[0, 1]), pandas_df.unstack(level=[0, 1]))
         df_equals(modin_df.unstack(level=[0, 1, 2]), pandas_df.unstack(level=[0, 1, 2]))
+        df_equals(
+            modin_df.unstack(level=[0, 1, 2, 3]), pandas_df.unstack(level=[0, 1, 2, 3])
+        )
 
-        if len(pandas_df.index) == 256:
-            df_equals(
-                modin_df.unstack(level=[0, 1, 2, 3]),
-                pandas_df.unstack(level=[0, 1, 2, 3]),
-            )
+
+@pytest.mark.parametrize("is_multi_col", [True, False], ids=["col_multi", "col_index"])
+def test_unstack_not_unique(is_multi_col):
+    MAX_NROWS = 34
+    MAX_NCOLS = 36
+
+    pandas_df = pandas.DataFrame(test_data["int_data"]).iloc[:MAX_NROWS, :MAX_NCOLS]
+    modin_df = pd.DataFrame(test_data["int_data"]).iloc[:MAX_NROWS, :MAX_NCOLS]
+
+    l0 = ["a"] * 17 + ["b"] * 17
+    l1 = np.arange(34)
+    l2 = np.arange(100, 134)
+    index = pandas.MultiIndex.from_tuples([(i, j, k) for i, j, k in zip(l0, l1, l2)])
+
+    if is_multi_col:
+        columns = pd.MultiIndex.from_product(
+            [
+                ["A", "B", "C", "D", "E", "F"],
+                ["qq", "ww", "xx", "yy", "zz", "LAST"],
+            ]
+        )
+    else:
+        columns = pandas_df.columns
+
+    pandas_df.columns = columns
+    pandas_df.index = index
+
+    modin_df.columns = columns
+    modin_df.index = index
+
+    df_equals(modin_df.unstack(), pandas_df.unstack())
+    df_equals(modin_df.unstack(level=1), pandas_df.unstack(level=1))
+    df_equals(modin_df.unstack(level=[0, 1]), pandas_df.unstack(level=[0, 1]))
+    df_equals(modin_df.unstack(level=[0, 1, 2]), pandas_df.unstack(level=[0, 1, 2]))
 
 
 @pytest.mark.parametrize("data", test_data_values, ids=test_data_keys)
diff --git a/modin/pandas/test/test_series.py b/modin/pandas/test/test_series.py
index 8c1b4d45..b839aff4 100644
--- a/modin/pandas/test/test_series.py
+++ b/modin/pandas/test/test_series.py
@@ -3218,23 +3218,14 @@ def test_unique(data):
 @pytest.mark.parametrize("data", test_data_values, ids=test_data_keys)
 def test_unstack(data):
     modin_series, pandas_series = create_test_series(data)
-    if len(pandas_series.index) == 256:
-        index = pd.MultiIndex.from_product(
-            [
-                ["a", "b", "c", "d"],
-                ["x", "y", "z", "last"],
-                ["i", "j", "k", "index"],
-                [1, 2, 3, 4],
-            ]
-        )
-    elif len(pandas_series.index) == 100:
-        index = pd.MultiIndex.from_product(
-            [
-                ["x", "y", "z", "last"],
-                ["a", "b", "c", "d", "f"],
-                ["i", "j", "k", "l", "index"],
-            ]
-        )
+    index = pd.MultiIndex.from_product(
+        [
+            ["a", "b", "c", "d"],
+            ["x", "y", "z", "last"],
+            ["i", "j", "k", "index"],
+            [1, 2, 3, 4],
+        ]
+    )
 
     modin_series = pd.Series(data[next(iter(data.keys()))], index=index)
     pandas_series = pandas.Series(data[next(iter(data.keys()))], index=index)
@@ -3242,12 +3233,9 @@ def test_unstack(data):
     df_equals(modin_series.unstack(), pandas_series.unstack())
     df_equals(modin_series.unstack(level=0), pandas_series.unstack(level=0))
     df_equals(modin_series.unstack(level=[0, 1]), pandas_series.unstack(level=[0, 1]))
-
-    if len(pandas_series.index) == 256:
-        df_equals(
-            modin_series.unstack(level=[0, 1, 2]),
-            pandas_series.unstack(level=[0, 1, 2]),
-        )
+    df_equals(
+        modin_series.unstack(level=[0, 1, 2]), pandas_series.unstack(level=[0, 1, 2])
+    )
 
 
 @pytest.mark.parametrize(
diff --git a/modin/test/test_headers.py b/modin/test/test_headers.py
index e771b3be..a508fb37 100644
--- a/modin/test/test_headers.py
+++ b/modin/test/test_headers.py
@@ -21,7 +21,7 @@ exclude_files = ["_version.py"]
 
 
 def test_headers():
-    with open("{}{}".format(dirname(rootdir), "/LISCENSE_HEADER"), "r") as f:
+    with open("{}{}".format(dirname(rootdir), "/LICENSE_HEADER"), "r") as f:
         # Lines to check each line individually
         header_lines = f.readlines()