KeyError when applying function on grouping

System information

**OS Platform and Distribution Ubuntu 20.04.2 LTS **:
Modin version  0.10.2:
Python version  3.7.11:

import modin.pandas as pd
def printcol(dataset, **kwargs):
    col = kwargs["column"]
    print(dataset[col])
    return dataset
df = pd.DataFrame(np.random.randn(11, 2), columns=["A", "B"])
df['KEY'] = df['A'].apply(lambda x: 'K1' if x < 0 else 'K2')

df = df.groupby(['KEY']).apply(printcol,column="A")

[snip]
File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

Describe the problem
A key error occurs when trying to reference a column in a grouping within the function you are applying. This works as expected if a standard pandas.DataFrame object is used.
Source code / logs
Full stack trace
2021-09-16 10:05:17,089	ERROR worker.py:79 -- Unhandled error (suppress with RAY_IGNORE_UNHANDLED_ERRORS=1): ray::apply_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 460, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 481, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 351, in ray._raylet.raise_if_dependency_failed
ray.exceptions.RayTaskError: ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2834, in groupby_agg_builder
    return compute_groupby(df, drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

During handling of the above exception, another exception occurred:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 490, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 497, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 501, in ray._raylet.execute_task
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/util/tracing/tracing_helper.py", line 330, in _function_with_tracing
    return function(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/axis_partition.py", line 207, in deploy_ray_func
    result = func(*args)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/axis_partition.py", line 369, in deploy_func_between_two_axis_partitions
    result = func(lt_frame, rt_frame, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py", line 1153, in _map_reduce_func
    series_result = func(df, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2845, in <lambda>
    df, by, drop, partition_idx
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2838, in groupby_agg_builder
    return compute_groupby(df.copy(), drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'
2021-09-16 10:05:17,092	ERROR worker.py:79 -- Unhandled error (suppress with RAY_IGNORE_UNHANDLED_ERRORS=1): ray::apply_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 460, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 481, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 351, in ray._raylet.raise_if_dependency_failed
ray.exceptions.RayTaskError: ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2834, in groupby_agg_builder
    return compute_groupby(df, drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

During handling of the above exception, another exception occurred:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 490, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 497, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 501, in ray._raylet.execute_task
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/util/tracing/tracing_helper.py", line 330, in _function_with_tracing
    return function(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/axis_partition.py", line 207, in deploy_ray_func
    result = func(*args)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/axis_partition.py", line 369, in deploy_func_between_two_axis_partitions
    result = func(lt_frame, rt_frame, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py", line 1153, in _map_reduce_func
    series_result = func(df, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2845, in <lambda>
    df, by, drop, partition_idx
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2838, in groupby_agg_builder
    return compute_groupby(df.copy(), drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'
2021-09-16 10:05:17,095	ERROR worker.py:79 -- Unhandled error (suppress with RAY_IGNORE_UNHANDLED_ERRORS=1): ray::apply_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 460, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 481, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 351, in ray._raylet.raise_if_dependency_failed
ray.exceptions.RayTaskError: ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2834, in groupby_agg_builder
    return compute_groupby(df, drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

During handling of the above exception, another exception occurred:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 490, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 497, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 501, in ray._raylet.execute_task
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/util/tracing/tracing_helper.py", line 330, in _function_with_tracing
    return function(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/axis_partition.py", line 207, in deploy_ray_func
    result = func(*args)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/axis_partition.py", line 369, in deploy_func_between_two_axis_partitions
    result = func(lt_frame, rt_frame, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py", line 1153, in _map_reduce_func
    series_result = func(df, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2845, in <lambda>
    df, by, drop, partition_idx
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2838, in groupby_agg_builder
    return compute_groupby(df.copy(), drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'
(pid=19064) 1    -1.342643
(pid=19064) 3    -0.855525
(pid=19064) 5    -0.656729
(pid=19064) 6    -0.795196
(pid=19064) 8    -1.158136
(pid=19064) 9    -1.422635
(pid=19064) 10   -1.237912
(pid=19064) Name: A, dtype: float64
(pid=19064) 0    2.028227
(pid=19064) 2    0.469303
(pid=19064) 4    0.867193
(pid=19064) 7    1.239291
(pid=19064) Name: A, dtype: float64
---------------------------------------------------------------------------
RayTaskError(KeyError)                    Traceback (most recent call last)
<ipython-input-4-97c0bcb4466e> in <module>
----> 1 df = df.groupby(['KEY']).apply(printcol,column="A")

~/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py in apply(self, func, *args, **kwargs)
    278         if not isinstance(func, BuiltinFunctionType):
    279             func = wrap_udf_function(func)
--> 280         return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
    281
    282     @property

~/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py in _apply_agg_function(self, f, *args, **kwargs)
    921             agg_kwargs=kwargs,
    922             groupby_kwargs=self._kwargs,
--> 923             drop=self._drop,
    924         )
    925         if self._idx_name is not None and self._as_index:

~/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py in groupby_agg(self, by, is_multi_by, axis, agg_func, agg_args, agg_kwargs, groupby_kwargs, drop)
   2847             other=broadcastable_by,
   2848             apply_indices=apply_indices,
-> 2849             enumerate_partitions=True,
   2850         )
   2851         result = self.__constructor__(new_modin_frame)

~/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py in broadcast_apply_full_axis(self, axis, func, other, new_index, new_columns, apply_indices, enumerate_partitions, dtypes)
   1816             if new_axis is None
   1817             else new_axis
-> 1818             for i, new_axis in enumerate([new_index, new_columns])
   1819         ]
   1820         if dtypes == "copy":

~/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py in <listcomp>(.0)
   1816             if new_axis is None
   1817             else new_axis
-> 1818             for i, new_axis in enumerate([new_index, new_columns])
   1819         ]
   1820         if dtypes == "copy":

~/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py in _compute_axis_labels(self, axis, partitions)
    305             partitions = self._partitions
    306         return self._partition_mgr_cls.get_indices(
--> 307             axis, partitions, lambda df: df.axes[axis]
    308         )
    309

~/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/partition_manager.py in get_indices(cls, axis, partitions, index_func)
    135                 else []
    136             )
--> 137         new_idx = ray.get(new_idx)
    138         return new_idx[0].append(new_idx[1:]) if len(new_idx) else new_idx
    139

~/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/_private/client_mode_hook.py in wrapper(*args, **kwargs)
     60         if client_mode_should_convert():
     61             return getattr(ray, func.__name__)(*args, **kwargs)
---> 62         return func(*args, **kwargs)
     63
     64     return wrapper

~/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/worker.py in get(object_refs, timeout)
   1493                     worker.core_worker.dump_object_store_memory_usage()
   1494                 if isinstance(value, RayTaskError):
-> 1495                     raise value.as_instanceof_cause()
   1496                 else:
   1497                     raise value

RayTaskError(KeyError): ray::apply_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 460, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 481, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 351, in ray._raylet.raise_if_dependency_failed
ray.exceptions.RayTaskError: ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2834, in groupby_agg_builder
    return compute_groupby(df, drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

During handling of the above exception, another exception occurred:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 490, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 497, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 501, in ray._raylet.execute_task
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/util/tracing/tracing_helper.py", line 330, in _function_with_tracing
    return function(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/axis_partition.py", line 207, in deploy_ray_func
    result = func(*args)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/axis_partition.py", line 369, in deploy_func_between_two_axis_partitions
    result = func(lt_frame, rt_frame, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py", line 1153, in _map_reduce_func
    series_result = func(df, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2845, in <lambda>
    df, by, drop, partition_idx
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2838, in groupby_agg_builder
    return compute_groupby(df.copy(), drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

2021-09-16 10:05:22,867	ERROR worker.py:79 -- Unhandled error (suppress with RAY_IGNORE_UNHANDLED_ERRORS=1): ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2834, in groupby_agg_builder
    return compute_groupby(df, drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

During handling of the above exception, another exception occurred:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 490, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 497, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 501, in ray._raylet.execute_task
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/util/tracing/tracing_helper.py", line 330, in _function_with_tracing
    return function(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/axis_partition.py", line 207, in deploy_ray_func
    result = func(*args)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/axis_partition.py", line 369, in deploy_func_between_two_axis_partitions
    result = func(lt_frame, rt_frame, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py", line 1153, in _map_reduce_func
    series_result = func(df, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2845, in <lambda>
    df, by, drop, partition_idx
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2838, in groupby_agg_builder
    return compute_groupby(df.copy(), drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'
2021-09-16 10:05:22,870	ERROR worker.py:79 -- Unhandled error (suppress with RAY_IGNORE_UNHANDLED_ERRORS=1): ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2834, in groupby_agg_builder
    return compute_groupby(df, drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

During handling of the above exception, another exception occurred:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 490, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 497, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 501, in ray._raylet.execute_task
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/util/tracing/tracing_helper.py", line 330, in _function_with_tracing
    return function(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/axis_partition.py", line 207, in deploy_ray_func
    result = func(*args)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/axis_partition.py", line 369, in deploy_func_between_two_axis_partitions
    result = func(lt_frame, rt_frame, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py", line 1153, in _map_reduce_func
    series_result = func(df, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2845, in <lambda>
    df, by, drop, partition_idx
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2838, in groupby_agg_builder
    return compute_groupby(df.copy(), drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'
2021-09-16 10:05:22,874	ERROR worker.py:79 -- Unhandled error (suppress with RAY_IGNORE_UNHANDLED_ERRORS=1): ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2834, in groupby_agg_builder
    return compute_groupby(df, drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

During handling of the above exception, another exception occurred:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3361, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas/_libs/index.pyx", line 76, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 5198, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 5206, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'A'

The above exception was the direct cause of the following exception:

ray::deploy_ray_func() (pid=19062, ip=<IP_ADDRESS>)
  File "python/ray/_raylet.pyx", line 490, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 497, in ray._raylet.execute_task
  File "python/ray/_raylet.pyx", line 501, in ray._raylet.execute_task
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/ray/util/tracing/tracing_helper.py", line 330, in _function_with_tracing
    return function(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/ray/pandas_on_ray/frame/axis_partition.py", line 207, in deploy_ray_func
    result = func(*args)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/axis_partition.py", line 369, in deploy_func_between_two_axis_partitions
    result = func(lt_frame, rt_frame, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/engines/base/frame/data.py", line 1153, in _map_reduce_func
    series_result = func(df, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2845, in <lambda>
    df, by, drop, partition_idx
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2838, in groupby_agg_builder
    return compute_groupby(df.copy(), drop, partition_idx)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/backends/pandas/query_compiler.py", line 2752, in compute_groupby
    result = agg_func(grouped_df, **agg_kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/pandas/groupby.py", line 280, in <lambda>
    return self._apply_agg_function(lambda df: df.apply(func, *args, **kwargs))
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1253, in apply
    result = self._python_apply_general(f, self._selected_obj)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1287, in _python_apply_general
    keys, values, mutated = self.grouper.apply(f, data, self.axis)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 783, in apply
    result_values, mutated = splitter.fast_apply(f, sdata, group_keys)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/ops.py", line 1328, in fast_apply
    return libreduction.apply_frame_axis0(sdata, f, names, starts, ends)
  File "pandas/_libs/reduction.pyx", line 381, in pandas._libs.reduction.apply_frame_axis0
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/groupby/groupby.py", line 1237, in f
    return func(g, *args, **kwargs)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/modin/utils.py", line 500, in wrapper
    result = func(*args, **kwargs)
  File "<ipython-input-2-5658305649cc>", line 3, in printcol
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/frame.py", line 3455, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/home/stus/miniconda3/envs/fctk/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 3363, in get_loc
    raise KeyError(key) from err
KeyError: 'A'

The other thing I noticed is that if at time of construction column KEY is part of the dataframe the code above will work just fine. It's only when you create the KEY column after the construction of the initial dataframe does the issue surface.

Thanks @ssiegel95 for the detailed bug report!
This might be related to #3252. @YarShev @dchigarev does this seem like it would also be fixed by #3298?

@devin-petersohn it seems similar to #3252 but one difference is that within the printcol function above I'm not even trying to reference the "by" column (i.e., KEY), the KeyError is for column A. I can give the branch referenced in #3298 to see if that helps.

Still getting same error after installing modin from https://github.com/YarShev/modin/tree/dev/yigoshev-issue3252

It appears that the root cause of this issue is similar to the problem reported in #2511. When we're applying a function in groupby, we expect that the applied function obtains the whole group frame:
   A  B  KEY |
0  .  .  .   | first group
1  .  .  .   |
-------------|
2  .  .  .   |
3  .  .  .   | second group
4  .  .  .   |

In pandas, the history of calls of the applied function would be:
fn(first_group)
fn(second_group)

When a frame is converted to Modin, it's being split into partitions, in the related reproducer before doing the failing groupby.apply the frame split is like:
  part1 | part2|
   A  B | KEY  |
0  .  . | .    | first group
1  .  . | .    |
--------|------|
2  .  . | .    |
3  .  . | .    | second group
4  .  . | .    |

As you can see, now we got two parts and only one of them contains the "A" column. When doing groupby.apply Modin does not concatenate partition along rows, so we get 4 calls of the applied fn here:
fn(part1_first_group)
fn(part1_second_group)
fn(part2_first_group)
fn(part2_second_group)

Since only "part1" contains the "A" column, we get a KeyError for every "part2".
This is certainly a bug, Modin's users don't have to care about partitioning, but unfortunately in this case there's no way of not being informed about them for now.
Unfortunately, I can't suggest a workaround for except of defaulting to pandas for this particular operation (@devin-petersohn  maybe you can?):
df = df._default_to_pandas(lambda df: df.groupby("KEY").apply(printcol, column="A"))

BTW, maybe we should replace our current groupby.apply implementation to default-to-pandas since it just doesn't work as intended?

@dchigarev that was a very helpful explanation, thank you.

maybe we should replace our current groupby.apply implementation to default-to-pandas since it just doesn't work as intended

Or perhaps have it as an option for the user. I'd be concerned that if it defaults to pandas then users can run into memory issues for very large data sets (one of the main reasons for using modin backed by ray in the first place).
I don't really understand the internals of modin so the next question might sound naive but I'll ask anyway.
Would it have mattered if KEY was part of the dataframe at construction time? For my particular use case I could do preprocessing on the data to add the KEY column before it's read into a modin dataframe. I'm not sure if for a sufficiently large number of rows and columns the partitioning you describe above would occur anyway due to other reasons.

@modin-project/modin-core BTW, maybe we should replace our current groupby.apply implementation to default-to-pandas since it just doesn't work as intended?

I am working on this currently. There are inconsistencies with how pandas applies functions via apply, and we don't cover them all or handle fallback gracefully in this case. It's a hard one to get right and be fast because we have no insight into how the function can be applied. I am making progress on a better shuffling mechanism to be able to handle each dataframe group independently.

Would it have mattered if KEY was part of the dataframe at construction time?

In this case, no. The problem here is that apply is not working as expected in your case. You can modify the original code to make it work:
import modin.pandas as pd

def printcol(dataset, **kwargs):
    col = kwargs["column"]
    print(dataset[col])
    return dataset

df = pd.DataFrame(np.random.randn(11, 2), columns=["A", "B"])
df['KEY'] = df['A'].apply(lambda x: 'K1' if x < 0 else 'K2')

df_grouped = df.groupby(['KEY'])
result_df = pd.concat([printcol(df.loc[df['KEY'] == group], column="A") for group in df_grouped.groups], axis=0)

This will scale, but may also be slow because of the loop over the groups. In your case, printcol doesn't have any side effect or modify the data, so you can potentially avoid returning the dataset and rebuilding the dataframe with pd.concat in this example case, but generally you need the concat if you want to modify the grouped dataframes at all.
I am working on a way to make this faster and more correct, apply is unfortunately just very general and very difficult to do in a purely distributed way. Feel free to email me<EMAIL_ADDRESS>if you'd like for me to loop you in.

Would it have mattered if KEY was part of the dataframe at construction time?

Yes. The initial minimal chunk size for partitioning is 32. That means that if the frame contains <=32 columns, all of them will be located in a single column-partition. But if the amount of cols is 33, then the Modin frame will have 2 partitions, the first containing 32 columns, and the second containing the rest column.
The reason why you're having 2 column-partitions in the frame of 3 columns is this new column insertion:
df['KEY'] = df['A'].apply(lambda x: 'K1' if x < 0 else 'K2')

Inserting a new column is equivalent to concat. When concatenating frames Modin does not repartition anything, it literally concatenating partitions:
scheme under spoiler
df1:
  part(0,0) |part(0, 1)|
   A  B  C  | D        |
0  .  .  .  | .        |
1  .  .  .  | .        |
------------|----------|
  part(1,0) |part(1,1) |
2  .  .  .  | .        |
3  .  .  .  | .        |

df2:
part(0,0)|part(0,1)|
   E     | F  G    |
0  .     | .  .    |
1  .     | .  .    |
---------|---------|
part(1,0)|part(1,1)|
2  .     | .  .    |
3  .     | .  .    |

pd.concat([df1, df2], axis=1):
  part(0,0) |part(0, 1)|part(0,2)|part(0,3)|
   A  B  C  | D        | E       | F  G    |
0  .  .  .  | .        | .       | .  .    |
1  .  .  .  | .        | .       | .  .    |
------------|----------|---------|---------|
  part(1,0) |part(1,1) |part(1,2)|part(1,3)|
2  .  .  .  | .        | .       | .  .    |
3  .  .  .  | .        | .       | .  .    |

Partitioning becomes unnormalized along the row axis until some row-function is called that firstly triggers concatenation of all of the row-partitions (to be able to provide the whole row to the function) and then repartition the result using the initial partitioning rule:
scheme under spoiler
df1:
  part(0,0) |part(0, 1)|part(0,2)|part(0,3)|
   A  B  C  | D        | E       | F  G    |
0  .  .  .  | .        | .       | .  .    |
1  .  .  .  | .        | .       | .  .    |
------------|----------|---------|---------|
  part(1,0) |part(1,1) |part(1,2)|part(1,3)|
2  .  .  .  | .        | .       | .  .    |
3  .  .  .  | .        | .       | .  .    |

df1.apply(lambda df: df, axis=1)

1 step is union row partitions to be able to provide the whole row to the applied function:
  part(0,0)            |
   A  B  C  D  E  F  G |
0  .  .  .  .  .  .  . |  fn(part(0,0)[0])
1  .  .  .  .  .  .  . |  fn(part(0,0)[1])
-----------------------|
  part(1,0)            |
2  .  .  .  .  .  .  . |  fn(part(1,0)[2])
3  .  .  .  .  .  .  . |  fn(part(1,0)[3])

2 step is repartitioning the resulted frame
  part(0,0)   |part(0,1)|
   A  B  C  D | E  F  G |
0  .  .  .  . | .  .  . |
1  .  .  .  . | .  .  . |
--------------|---------|
  part(1,0)   |part(1,1)|
2  .  .  .  . | .  .  . |
3  .  .  .  . | .  .  . |

The reason I'm describing the execution flow of full-axis functions in details is that groupby.apply is also one of them:
scheme under spoiler
df1:
  part(0,0) |
   A  B  C  |
0  .  .  .  |
1  .  .  .  |
------------|
  part(1,0) |
2  .  .  .  |
3  .  .  .  |

df1.groupby("A").apply(fn)

1 step is union column partitions to be able to provide the whole column to the applied function:
  part(0,0) |
   A  B  C  |
0  .  .  .  | part(0,0).groupby("A").apply(fn)
1  .  .  .  | (no parallelism at all, groupby.apply is applied to a single one partition)
2  .  .  .  |
3  .  .  .  |

2 step is repartitioning the resulted frame...

To achieve parallelism in GroupBy some of the groupby aggregation function is implemented in two phases via MapReduce approach, groupby.apply is not the case, since we don't know much about passed UDF.
SO, if after placing all of the columns into a single column-partition you would be concerned about performance, then you can try to split your aggregation into two phases (map and reduce) and then use Modin's function operator GroupbyReduceFunction to make it work with Modin. You can refer to the corresponding section of Modin's documentation to learn how to do that.

@dchigarev It seems we gave contradicting answers 😄

😄 oh, well...
generally, both our answers are correct.
Answering the question: "does it matter for the partitioning that the 'KEY' column was inserted after frame's construction", the answer is YES (see my comment).
Answering the question: "does it matter for the 'apply' that the 'KEY' column was inserted after", the answer is NO, because the error happens due to a bug (see Devin's comment). (correct if I'm wrong)

Regardless @dchigarev and @devin-petersohn the info you guys provided is very helpful. At least now I have some avenues to explore for workarounds. So thanks again.

I would think that we can try to detect if a function tries to get an access to "key which is missing in this partition but exists in others" and then switch to "concatenate frames reconstructing full rows" mode.
Should be reasonably fast I guess.

@devin-petersohn Is there any update on this issue?

@dchigarev, should we close this issue?


Warn when 2 questions marks (instead of question mark and ampersand) are used in connection strings

Our connection string parameters have to be added to the connection string as URL query parameters. That is not the most obvious interface, as you have to connect the first one with ? and then the others with &. This is easy to get wrong and create a string like foo?sslmode=require?pgbouncer=true for example.
We should detect that and warn the user.

@janpio I can pick this up if not already done.

Sure, go for it!

Note: I think this might be better done in the engines (in Rust), so it's done once.
Probably in one of these, but I'm unsure what would be best.
https://github.com/prisma/prisma-engines/blob/main/psl/psl-core/src/validate/datasource_loader.rs
https://github.com/search?q=repo%3Aprisma%2Fprisma-engines validate_url&type=code
I can ask a colleague for where would be the best place if someone is motivated to pick this up.

Hey @Jolg42 , I'd like to pick this issue up. Could you direct me to where the changes should be made?

@Jolg42 Sure.
Just out of curiosity, could you briefly explain how and why this is complicated?

Tom has more context but very little time at the moment unfortunately 😢. Sorry!

Just out of curiosity, could you briefly explain how and why this is complicated?

The complicated part is the "printing a warning". It means very different things in very different places in the codebase (prisma/prisma and prisma/prisma-engines). And this can't be part of schema validation warnings, because it has to happen after env vars are resolved, which happens in very different ways in different contexts (node-api, binary, migration engine, wasm, etc.).


Adding new option, summaryOnly

Adding new flag as discussed in https://github.com/gruntjs/grunt-contrib-qunit/issues/116.

Is it possible to add a test for the output?

I'll take a look and try and workout how we test for that in the morning.

Hey guys, I've added some updates in from code review. I can't see an easy way to add a test for this feature. Any suggestions?

Looks like we don't test the output at this time anyway, I'll merge it but if anyone wants to get better testing for this plugin please send a PR.

Waiting for continuous-integration/appveyor/pr

Looks good to me.
Can you squash the commits into 1 ?

Done :)

One more quick question, when will this be published to NPM? :)

@Arkni should we release 1.0.2 or 1.1?

I'll go with 1.1.0 as this PR added a new feature.

@illumination517 published as 1.1.0

Thanks guys :)


NGC Inference Server Container Website Broken

Chrome Error Console:
Failed to load resource: the server responded with a status of 401 ()
I think this might be due to the switch from 19.07 to 19.08

nevermind - sould have read that it is deprecated


[PL-56352]: SMP Patch 0.19.1 RN

Thanks for contributing to the Harness Developer Hub! Our code owners will review your submission.
Description

Please describe your changes: SMP Patch 0.19.1 RN
Jira/GitHub Issue numbers (if any): PL-56352
Preview links/images (Internal contributors only): __________________

PR lifecycle
We aim to merge PRs within one week or less, but delays happen sometimes.
If your PR is open longer than two weeks without any human activity, please tag a code owner in a comment.
PRs must meet these requirements to be merged:

[ ] Successful preview build.
[ ] Code owner review.
[ ] No merge conflicts.
[ ] Release notes/new features docs: Feature/version released to at least one prod environment.

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step behind the Harness VPN and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app. Current Draft URL is: https://66c61f90561c4739bcb2c51b--harness-developer.netlify.app


Heading links improvement

Motivation

add support for non-latin heading anchors (fixes #541)
ensure, that each heading has it's unique anchor per document (fixes #368)

Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan
I've wrote some test, that should be enough on my opinion.
To check the fixes manually you need write the doc file with the following lines:
## тест тест тест
## тест тест тест
## test
## test

By rendering on master branch you will get following anchor links:
#
#
#test
#test

After this PR applied:
#тест-тест-тест
#тест-тест-тест-1
#test
#test-1

The anchor indexes must not change/increment after page refresh.
Things to discuss
Old character mapping in toSlug()
I have found the following filtering rule in lib/core/toSlug.js:
  //  var accents = "àáäâèéëêìíïîòóöôùúüûñç";
  const accents =
    '\u00e0\u00e1\u00e4\u00e2\u00e8' +
    '\u00e9\u00eb\u00ea\u00ec\u00ed\u00ef' +
    '\u00ee\u00f2\u00f3\u00f6\u00f4\u00f9' +
    '\u00fa\u00fc\u00fb\u00f1\u00e7';

  const without = 'aaaaeeeeiiiioooouuuunc';

This code does not cover all possible characters, so I think it can be removed. But if we do so, it may be considered as breaking change, right? As for now I left it as is.
Clashing with headings ending with number
chenglou wrote:

Maybe baz-1. for the second one is good enough? No way to guarantee the titles from not clashing, since you might actually have a title called baz 1

I have checked how github renders in such cases. It adds another one suffix, e.g.: baz-1-1.
Alternatively we can add --1 instead of -1. In this case we will never have any clashing, because toSlug() function will never generate a slug with two hyphens.
Should we mimic github's behavior or take easier approach with double hyphen? (initially in this PR I have implemented github's behavior)

@SleepWalker Hi. If we go with this, you will need to rebase since CHANGELOG.md has been changed since this PR was made. Maybe just don't worry about making changes to the change log and I can handle that in the next release?

@JoelMarcey pushed changes without touching CHANGELOG

For the unique slugs part, not sure how it's meant to work, but currently this:

Oh, thank you. I have missed that case. The correct ids should be the following:
#baz
#baz-1
#baz-2

I have removed commit with headings uniqueness logic from current branch and will submit it as a separate PR including support for on-page nav.


Fix "sourcesContent" after optimizers are run

brunch sets the private ._sourcesContents property of source maps that
come from optimizers:
map._sourcesContents[`$${path}`] = source

The reason every path is prefixed with a $, is because the
mozilla/source-map module used to do so, but that changed in
mozilla/source-map#228. Now, only the string __proto__ is prefixed
with a $, but not if the runtime supports "null proto". If
!('__proto__' in Object.create(null)) is true, the
mozilla/source-map module will never prefix any paths with a $.
Does Node.js support "null proto"?
$ node -p "!('__proto__' in Object.create(null))"
true

So, yes it does. I've tested with Node.js 4, 6 and 7.
This commit simply gets rid of the $ prefixing.
Before:
$ brunch build --production
19 Jan 20:28:08 - info: compiled main.js into app.js in 517 ms

# Note how every source has `null` as content.
$ grep -o 'sourcesContent.*' public/app.js.map
sourcesContent":[null]}

After:
$ brunch build --production
19 Jan 20:28:59 - info: compiled main.js into app.js in 509 ms

# Now the actual contents of the source files are present.
$ grep -o 'sourcesContent.*' public/app.js.map
sourcesContent":["if (true) {\n  console.log('hello')\n}\n"]}

(The above assumes overrides: {production: {sourceMaps: true}} in
brunch-config.js.)

Yo, @lydell. Thanks for the research, awesome change!


feat: daily bridge transfer limits

Related Github tickets

Closes https://github.com/VolumeFi/paloma/issues/1711

Background
Add a limit to the amount of tokens transferred out from paloma within a specified window, per token. This is defined by a new governance vote.

Add governance vote. Can define token, window size, token limit and list of exempt addresses.
Keep a counter of the number of tokens transferred and the block height at the start of the limiting window.
Before accepting a transfer, update the counters and check the limits.
Transfers are refused if over the transfer limit.

Testing completed

[x] test coverage exists or has been added/updated
[x] tested in a private testnet

Breaking changes

[x] I have checked my code for breaking changes
[x] If there are breaking changes, there is a supporting migration.

@taariq @byte-bandit I assumed we want to update/check the counters when adding the transfer to the queue, and will not decrease the counters even if the transfer fails or is cancelled afterwards.

@maharifu correct. No need to decrease the counters on cancellation. All good.

@byte-bandit your review? Let's merge this in!


Clear Canvas Button Added

Added the clear canvas button
Changed View Only screen to the Activity screen.

#11 issue resolved


numbers to strings for display use

@Dunbaratu String formatting should probably become one of the features of the main kOS when other string operations get introduced.

The name of the library and the name of the function is unclear. May be it should be "number_to_string"? Or "num_to_str" if you want a name to be shorter.

I like it as a temporary solution before string operations get implemented.


Support better typescript protobuf FFI interfaces.

Similar to some of the work done in the SDK, we need to switch okapi over to using ts-proto. This will enable the packages to be completely typescript in lieu of a mix of javascript and typescript.

relates to #332


Typo fix error-handling.md

Typo fix

@Orkin Can you rename the class name from LoggerErrorListenerDelegatorFactory to LoggingErrorListenerDelegatorFactory as well?

@xtreamwayz done 😄

Thanks, @Orkin


Improve OnChangeAjaxBehavior demo

The demo was misleading. I thought it will just display what I typed in the label, I typed 555 and though it's broken.  Updated the demo to be more obvious.

Hi Colleagues! What's up with this one?


Windows Maui app - WebAuthenticator for OIDC: activatedEventArgs.Kind is always Launch

Hi,
To resolve a bug in the Windows App SDK for OIDC in my Windows Maui app (Could not find file ..AppxManifest.xml), we are trying to integrate the fix provided in https://dotmorten.github.io/WinUIEx/concepts/WebAuthenticator.html
https://dotmorten.github.io/WinUIEx/concepts/Maui.html#use-winuiexs-webauthenticator-instead-of-net-mauis
I have written code in App.xaml.cs: -
public partial class App : MauiWinUIApplication
{
public App()
{
if (WinUIEx.WebAuthenticator.CheckOAuthRedirectionActivation())
return;
this.InitializeComponent();
}
call is triggering to CheckOAuthRedirectionActivation and checking activatedEventArgs.Kind whether it is a Protocol or not?
My case always coming as Launch and returning False.
Also I have written below lines in identity service-
WebAuthenticatorResult authResult = await WinUIEx.WebAuthenticator.AuthenticateAsync(authUri, callbackuri);
I am gettng login page and able to enter credentials. But it is not returning. And in WebAuthenticator->Authenticate code, not getting the response from below line
var uri = await tcs.Task.ConfigureAwait(false);
In manifest I have added -

$placeholder$

callbackuri is - {test://callback/}
Problem:
I am suspecting issue because of not getting the protocol kind, further call back is not registered initially, hence login page is not calling the call back function.
How to resolve this issue?

@rmaddu did you also make the required changes to the windows app manifest?

Yes. In ...\Platforms\Windows\Package.appxmanifest file I have added below lines.
I didn't add any in ...\Platforms\Windows\app.manifest..

$placeholder$

Anything missing here. Why kind is Launch always and why login window is not calling the call back function?
Any help to resolve this?

Hard to know. There's not a lot of info or a reproducer. Did you try debug into winuiex and see why? Does the Maui sample app work for you?

sample snapshots added.
Getting Launch always.

One place says "test" and the other "myscheme".
Did you try the sample app that's in this repo? If that works try and reconfigure the app to work with your service and try again.
Without a full reproducer app from you there's not much else I can offer than guesswork. The samples are there for you too to help debug.

ok.

Which sample should I execute - WinUIExMauiSample or WinUIExSample?

Hi, I am able to debug the WinUIExSample. Workflow also success.
I have integrated the code to my application -

copied the WebAuthenticator.cs

Package.appxmanifest: added below lines
<Extensions>   <uap:Extension Category="windows.protocol">       <uap:Protocol Name="hsi.nwm"/>   </uap:Extension> </Extensions>

in App.xaml.cs
public App() {   if (WebAuthenticator.CheckOAuthRedirectionActivation())       return;               this.InitializeComponent();            }

in service code:
var authResult = await WebAuthenticator.AuthenticateAsync(authUri, callbackuri);
When I debug, I am getting login page. After successful login, asking to switch to app (see snapshot). But code in not hitting.

any missing things here -

Any help is appreciated...

Please provide a sample app that reproduces the problem. I can't guess what you're missing.
However since the sample app is working you're probably just missing something in your app or a setting is wrong.

**
Instead of using WinUiEx, copied the WebAuthenticator.cs to project. **
Do we need to copy this to any specific location in project or anywhere is fine?
Do we need to copy any other files?
Also provide any links or threads so that I can cross check once again.
As we have integrated the code in product, I can't share it.
do we need to update any in below -
[Activity(Label = "HxGN NetWorks Core Mobile", Theme =<EMAIL_ADDRESS>    ResizeableActivity = true,     Exported = true,     ScreenOrientation = ScreenOrientation.User,     ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.ScreenLayout | ConfigChanges.ScreenSize | ConfigChanges.SmallestScreenSize,     LaunchMode = LaunchMode.SingleTask,     WindowSoftInputMode = SoftInput.AdjustResize)] [IntentFilter(new[] { Android.Content.Intent.ActionView },     Categories = new[] { Android.Content.Intent.ActionView, Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },     DataScheme = "hxgnsi.nwcm")] //[Activity(Theme =<EMAIL_ADDRESS>MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] public class MainActivity : MauiAppCompatActivity {     private ILogger<MainActivity> _logger;
...
...

Please let me know if any other information is required?

One observation:
In WinUIEx sample: both redirect_uri and callbackUri is same.
string callbackUri = "winuiex://";
string authorizeUri = $"{server.Url}?response_type={responseType}&client_id={clientId}&redirect_uri= {Uri.EscapeDataString(callbackUri)}&scope=photo+offline_access";
var result = await WebAuthenticator.AuthenticateAsync(new Uri(authorizeUri), new Uri(callbackUri), oauthCancellationSource.Token);
In my sample: both redirect uri and callbackUri are different. redirect_uri is HTTPS URL.
string callbackUri = "hsi.nwm://callback/";
redirect_uri = https://XX.com/XXAuthenticatorService/signin-oidc
How to handle this situation?
Is it possible to use a custom protocol in the Package.appxmanifest?

When I integrated my authurl (https://XX.com/XXAuthenticatorService/mobileauth/OpenIdConnect) in WinUIEx sample application,  I am getting login page. After successful login, asking to switch to app. But app code is not hitting.
Seems redirecturi (i.e., HTTPS) and callbackuri ("winuiex://") are different, applications are not working.
Any help to resolve this?

Any help is appreciated...

The redirect url needs to use the same schema as what's in the app manifest and must be unique. You set that up in the service where you configure your app for oauth where you should also specify that schema.

already specified (ServiceConfig.ini) -
WebAuthenticator:CallbackScheme=hsi.nwm://callback
Package.appxmanifest: added below lines
<Extensions> <uap:Extension Category="windows.protocol"> <uap:Protocol Name="hsi.nwm"/> </uap:Extension> </Extensions>
in service code:
string authUrl = "https://XX.com/XXService/mobileauth/OpenIdConnect"
Uri authUri = new Uri(authUrl);
Uri callbackuri = new Uri("hsi.nwm://callback/");
var authResult = await WebAuthenticator.AuthenticateAsync(authUri, callbackuri);

Getting below dialog, but not hitting app -

Any missing thing here?

Any help is appreciated...

Asking over and over again for a response isn't helping. This is FREE software that I develop in my spare time. Please don't keep pinging me for updates over and over again and expect immediate responses for something I'm doing on the side for free without any expectation of pay.
I've given you lots of hints and yet you still haven't provided the full sample that reproduces your issue like I asked.  My time is limited so please provide something where I don't have to spent time to try and reproduce something with some unknown servixe.
LOTS of people use this library so it's most likely a user error and not a bug so please refer to documentation and how oauth and app activation works first.


Classes where Equivalence can be asserted needs human-readable documentation

Many of the classes and data tagged in IAO-D-Acts (the original) are the same entities in this ontology. There needs to be clear documentation as for what is or is not picking out the same individuals. E.g., some deontic roles are equivalent, but some deontic act documents are not equivalent. I need to provide clear guidance why they are or are not equivalent, so that translation can be understood by humans.

Here are some notes I prepared, just to get this started:
return to:
credential role		A role that inheres in a concretization of an identity document and is realized by an authentication process.
Equivalent class: to BFO_0000023[role] and (RO_0000054[realized in] some authentication) and (RO_0000052[characteristic of/inheres in] some (RO_0000053[characterized by/bearer of] some (RO_0000059[concretizes] some 'identity document')))
Moved: 'deontic declaration performer role' from subclass 'role' to subclass 'Deontic Role'
Theoretically obviated:
http://purl.obolibrary.org/obo/IAO_0020021
identity document	A document that denotes some identity and is concretized by the bearer of some credential role.	Amanda Hicks
document
and ('is about' some 'documented identity')
and ('is concretized as' some
('specifically dependent continuant'
and ('inheres in' some ('bearer of' some 'credential role'))))
and ('is concretized as' only
('specifically dependent continuant'
and ('inheres in' some ('bearer of' some 'credential role'))))
http://purl.obolibrary.org/obo/IAO_0020022
documented identity	A documented identity is the aggregate of all data items about an entity.  Notice that a documented identity is not itself a document since a document is intended to be understood as a whole and data items about an individual are usually scattered across different documents.
comment: is an aggregate of ICEs also an ICE? yes
Is part_of the appropriate relation to use for data items and documented identities?
Amanda Hicks
('has part' some 'information content entity')
and ( inverse ('is about') some 'identity document')
and ('has part' only 'information content entity')
SKIP: http://purl.obolibrary.org/obo/OMRSE_00000033 'aggregate of organizations'
EQUIV: http://www.ontologyrepository.com/CommonCoreOntologies/GroupOfOrganizations
SKIP: http://purl.obolibrary.org/obo/OMRSE_00000022 'collection of organisms'
(it is a defined class with no obvious use)
SKIP: http://purl.obolibrary.org/obo/OMRSE_00000023 'collection of humans'
EQUIV: http://www.ontologyrepository.com/CommonCoreOntologies/GroupOfPersons
SKIP: http://purl.obolibrary.org/obo/OBI_0100026 'organism'
(it has no obvious use)
SKIP: http://purl.obolibrary.org/obo/NCBITaxon_9606 'Homo sapiens'
EQUIV: http://www.ontologyrepository.com/CommonCoreOntologies/Person
SKIP: http://purl.obolibrary.org/obo/OBI_0000245 'organization'
EQUIV: http://www.ontologyrepository.com/CommonCoreOntologies/Organization
SKIP: http://purl.obolibrary.org/obo/IAO_0021003 'social act'
EQUIV: http://www.ontologyrepository.com/CommonCoreOntologies/SocialAct
Various terms in CCO/Mid/AgentOntology belong as subclasses of "Deontic Role"

Allegiance Role			http://www.ontologyrepository.com/CommonCoreOntologies/AllegianceRole
-- Ally Role				http://www.ontologyrepository.com/CommonCoreOntologies/AllyRole
-- Enemy Role				http://www.ontologyrepository.com/CommonCoreOntologies/EnemyRole
-- Neutral Role				http://www.ontologyrepository.com/CommonCoreOntologies/NeutralRole
Authority Role			http://www.ontologyrepository.com/CommonCoreOntologies/AuthorityRole
Citizen Role				http://www.ontologyrepository.com/CommonCoreOntologies/Citizen Role
Civilian Role				http://www.ontologyrepository.com/CommonCoreOntologies/Civilian Role
Commercial Role			http://www.ontologyrepository.com/CommonCoreOntologies/Commercial Role
Contractor Role			http://www.ontologyrepository.com/CommonCoreOntologies/Contractor Role
Interpersonal Relationship Role	http://www.ontologyrepository.com/CommonCoreOntologies/Interpersonal Relationship Role
Occupation Role			http://www.ontologyrepository.com/CommonCoreOntologies/Occupation Role
Operator Role				http://www.ontologyrepository.com/CommonCoreOntologies/Operator Role
Organization Member Role		http://www.ontologyrepository.com/CommonCoreOntologies/Organization Member Role

(not: Component Role, Infrastructure Role, Part Role, System Role)


Add Buffer, a common dependency, to global scope

This PR adds Buffer to the global scope by importing it from a polyfill.

Why we can't just add the line globalThis.Buffer = xxx to the index.ts of the snap:
imports are evaluated "statically" in theory. Even in transpiled code they're executed first, even before source code that is "above" them in the module. By putting the globalThis code in its own module, and loading that module first, we ensure that Buffer is available everywhere, including in other imports from index.ts.

Why we can't just add the line globalThis.Buffer = xxx to the index.ts of the snap:
imports are evaluated "statically" in theory. Even in transpiled code they're executed first, even before source code that is "above" them in the module. By putting the globalThis code in its own module, and loading that module first, we ensure that Buffer is available everywhere, including in other imports from index.ts.

Adding this as a comment to the fix file will be cool


Incorrect Gas Tracker rate today (5th May 2023)

Great integration btw.  Today I noticed that the gas tracker rate was incorrect, not sure where this is data is coming from as is reading as 0.146 £/Kw when it should be 0.04305 for my region.
Before you added Gas Tracker I used a simple lookup to https://api.octopus.energy/v1/products/SILVER-22-07-22/gas-tariffs/G-1R-SILVER-22-07-22-B/standard-unit-rates/ which returns 0.04305 £/Kw for today. (Same as my Octopus Account)
I have tried a restart hoping this might refresh the data with no change.   I just thought might be of interest.
Running 2023.4.6 of HA and latest version Octopus Energy
edited to add...    So maybe the link is down...
Logger: custom_components.octopus_energy.api_client
Source: custom_components/octopus_energy/api_client.py:466
Integration: Octopus Energy (documentation, issues)
First occurred: 08:06:52 (1 occurrences)
Last logged: 08:06:52
Failed to send request (https://api.octopus.energy/v1/products/SILVER-FLEX-22-11-25/gas-tariffs/G-1R-SILVER-FLEX-22-11-25-B/standard-unit-rates?period_from=2023-05-05T00:00:00Z&period_to=2023-05-06T00:00:00Z): 404; {"detail":"Not found."}

Hello and sorry that you're having issues. Unfortunately some tracker tariffs aren't available via the normal API and so based on feedback on the OE forums, it falls back onto a different API if the data isn't available. Is this behaviour that you've only just started noticing or have you only just started using the integration?

Another thing to consider is that the tracker API doesn't account for any government caps. You might need to configure these within your account in the integration to enforce the cap.
The product/tariff is returned from your account so this is the correct thing to look up (unless OE have configured your account wrong)

Thanks.  I did wonder if that might be the case with the end point. I am on agile and gas tracker, so I look at best kw price between the two for heating etc.  I have been using my own simple code to get gas and electricity prices before I came across your integration. The tariff gas tracker end point I use seems to have been by pure luck has been reliable so far.
Is there a way I can check if the price entity you provide has valid data (sorry I am no expert on HA) but have been using it with octopus now reliably for over 3 years so rarely need to touch the code apart from tariff changes.

Is there a way I can check if the price entity you provide has valid data

What do you mean by "has valid data". Any data that comes from OE APIs is treated as valid data, so in your case because your tariff can't go through the normal means, I go through the API that powers https://octopus.energy/tracker-demo-detail/?context=1&code=G-1R-SILVER-FLEX-22-11-25-C&consumption=12000&type=gas&inapp=false
If you're saying this is different to what it says in your OE dashboard, it would be interesting to know where it's getting this data from

Also out of interest what does your price say today?

Here was the incorrect data from my first post.

Price today is correct at 0.0429
By valid data that its Current and Up to date (on on day change with tracker).  ie., if it was showing  £0.05 in HA and that it could not be updated (End point down) how could I tell?

Gas and electricity rates are retrieved at minimum every 30 minutes are retrieved for the current day. If the rates could not be retrieved then you'd have errors in your HA logs indicating there was a server error or similar. I'll look at adding a new attribute on the data to indicate when it was last retrieved to make this easier.

You'll find it happens after bank holidays, the early retrieval on the next day or so tends to show 14p then it updates about lunchtime to the correct 4p number. I've observed this on my manual API pulls but that seems to be the trigger when they 'pause' the rates for weekend and BH days

I'm going to close this issue as there is limited data to go on and a potential reason mentioned above. If there is any more information that could point to this reasoning, please reopen.


Add option to use 'on-hold' status on payment authorization

User request.
This adds an option to use the 'on-hold' status for authorized payments. This allows inventory to be reserved in the case where eg. a konbini or bank transfer payment is approved but awaiting payment. This is added as an option as some merchants may wish to continue operating with the old behavior.
How to test

Visit the settings screen under Woocommerce -> payments and confirm that the new option to use on-hold status appears
Select the option and make a konbini payment
Confirm the status of the order in the Woocommerce dashboard is "on-hold"
Untick the option and repeat 3
Confirm the status of the order is "payment pending"

@thoiberg please review this


Updated setup.py testing requirements

Thank you for this incredibly helpful project! I just wanted to contribute some tinkering to the setup.py file that limits the installation requirements for non-development usage. I also noticed that lxml was required to get unit tests passing, so I added it to that section as well. Let me know of any feedback!
I didn't update the README section on installation, though can to reflect if someone wants to run the unit tests, the would need to install the library with pip install python-evtx[test] to ensure pytest & lxml are included.

Thank you @williballenthin! Happy to contribute to a great project :)

v0.7.4 now available via pypi with these changes