pyjanitor-devs / pandas_flavor

The easy way to write your own flavor of Pandas
https://zsailer.github.io/software/pandas-flavor/
MIT License
298 stars 17 forks source link

BUG xarray ImportError: cannot import name 'ImplementsArrayReduce' from partially initialized module 'xarray.core.common' #33

Open mdancho84 opened 8 months ago

mdancho84 commented 8 months ago

Had an issue when I created an environment today with pytimetk, which uses pandas_flavor. The issue stems from changes made to xarray.

The solution was to downgrade to xarray==2023.10.1.

Here's the traceback:

ImportError                               Traceback (most recent call last)
/Users/mdancho/Desktop/learning_labs/lab_91_customer_lifetime_value_python_2/01_descriptive_clv.py in line 1
----> 14 import pytimetk as tk

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/pytimetk/__init__.py:4
      2 # *** Import everything to make pytimetk a standalone package ***
----> 4 from .plot.plot_timeseries import *
      5 from .plot.plot_anomalies import *
      6 from .plot.plot_anomalies_decomp import *

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/pytimetk/plot/__init__.py:1
----> 1 from .plot_timeseries import *
      2 from .plot_anomalies import *
      3 from .plot_anomalies_decomp import *

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/pytimetk/plot/plot_timeseries.py:3
      1 import pandas as pd
      2 import numpy as np
----> 3 import pandas_flavor as pf
      5 from plotnine import *
      7 import plotly.express as px

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/pandas_flavor/__init__.py:8
      1 """Top-level API for pandas-flavor."""
      2 from .register import (
      3     register_dataframe_accessor,
      4     register_dataframe_method,
      5     register_series_accessor,
      6     register_series_method,
      7 )
----> 8 from .xarray import (
      9     register_xarray_dataarray_method,
     10     register_xarray_dataset_method,
     11 )
     13 __all__ = [
     14     "register_series_method",
     15     "register_series_accessor",
   (...)
     19     "register_xarray_dataset_method",
     20 ]

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/pandas_flavor/xarray.py:2
      1 """XArray support for pandas_flavor."""
----> 2 from xarray import register_dataarray_accessor, register_dataset_accessor
      3 from functools import wraps
      6 def make_accessor_wrapper(method):

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/__init__.py:1
----> 1 from xarray import testing, tutorial
      2 from xarray.backends.api import (
      3     load_dataarray,
      4     load_dataset,
   (...)
      8     save_mfdataset,
      9 )
     10 from xarray.backends.zarr import open_zarr

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/testing/__init__.py:1
----> 1 from xarray.testing.assertions import (  # noqa: F401
      2     _assert_dataarray_invariants,
      3     _assert_dataset_invariants,
      4     _assert_indexes_invariants_checks,
      5     _assert_internal_invariants,
      6     _assert_variable_invariants,
      7     _data_allclose_or_equiv,
      8     assert_allclose,
      9     assert_chunks_equal,
     10     assert_duckarray_allclose,
     11     assert_duckarray_equal,
     12     assert_equal,
     13     assert_identical,
     14 )
     16 __all__ = [
     17     "assert_allclose",
     18     "assert_chunks_equal",
   (...)
     22     "assert_identical",
     23 ]

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/testing/assertions.py:11
      8 import pandas as pd
     10 from xarray.core import duck_array_ops, formatting, utils
---> 11 from xarray.core.coordinates import Coordinates
     12 from xarray.core.dataarray import DataArray
     13 from xarray.core.dataset import Dataset

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/coordinates.py:18
     11 from xarray.core import formatting
     12 from xarray.core.indexes import (
     13     Index,
     14     Indexes,
     15     PandasMultiIndex,
     16     assert_no_index_corrupted,
     17 )
---> 18 from xarray.core.merge import merge_coordinates_without_align, merge_coords
     19 from xarray.core.utils import Frozen, ReprObject
     20 from xarray.core.variable import Variable, calculate_dimensions

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/merge.py:10
      7 import pandas as pd
      9 from xarray.core import dtypes
---> 10 from xarray.core.alignment import deep_align
     11 from xarray.core.duck_array_ops import lazy_array_equiv
     12 from xarray.core.indexes import (
     13     Index,
     14     Indexes,
   (...)
     17     indexes_equal,
     18 )

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/alignment.py:14
     11 import pandas as pd
     13 from xarray.core import dtypes
---> 14 from xarray.core.common import DataWithCoords
     15 from xarray.core.indexes import (
     16     Index,
     17     Indexes,
   (...)
     21     safe_cast_to_index,
     22 )
     23 from xarray.core.utils import is_dict_like, is_full_slice

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/common.py:17
     15 from xarray.core.options import OPTIONS, _get_keep_attrs
     16 from xarray.core.parallelcompat import get_chunked_array_type, guess_chunkmanager
---> 17 from xarray.core.pdcompat import _convert_base_to_offset
     18 from xarray.core.pycompat import is_chunked_array
     19 from xarray.core.utils import (
     20     Frozen,
     21     either_dict_or_kwargs,
     22     emit_user_level_warning,
     23     is_scalar,
     24 )

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/pdcompat.py:44
     41 import pandas as pd
     42 from packaging.version import Version
---> 44 from xarray.coding import cftime_offsets
     47 def count_not_none(*args) -> int:
     48     """Compute the number of non-None arguments.
     49 
     50     Copied from pandas.core.common.count_not_none (not part of the public API)
     51     """

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/coding/cftime_offsets.py:52
     49 import numpy as np
     50 import pandas as pd
---> 52 from xarray.coding.cftimeindex import CFTimeIndex, _parse_iso8601_with_reso
     53 from xarray.coding.times import (
     54     _is_standard_calendar,
     55     _should_cftime_be_used,
     56     convert_time_or_go_back,
     57     format_cftime_datetime,
     58 )
     59 from xarray.core.common import _contains_datetime_like_objects, is_np_datetime_like

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/coding/cftimeindex.py:52
     49 import pandas as pd
     50 from packaging.version import Version
---> 52 from xarray.coding.times import (
     53     _STANDARD_CALENDARS,
     54     cftime_to_nptime,
     55     infer_calendar_name,
     56 )
     57 from xarray.core.common import _contains_cftime_datetimes
     58 from xarray.core.options import OPTIONS

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/coding/times.py:14
     11 import pandas as pd
     12 from pandas.errors import OutOfBoundsDatetime, OutOfBoundsTimedelta
---> 14 from xarray.coding.variables import (
     15     SerializationWarning,
     16     VariableCoder,
     17     lazy_elemwise_func,
     18     pop_to,
     19     safe_setitem,
     20     unpack_for_decoding,
     21     unpack_for_encoding,
     22 )
     23 from xarray.core import indexing
     24 from xarray.core.common import contains_cftime_datetimes, is_np_datetime_like

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/coding/variables.py:15
     13 from xarray.core.parallelcompat import get_chunked_array_type
     14 from xarray.core.pycompat import is_chunked_array
---> 15 from xarray.core.variable import Variable
     17 if TYPE_CHECKING:
     18     T_VarTuple = tuple[tuple[Hashable, ...], Any, dict, dict]

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/variable.py:19
     17 import xarray as xr  # only for Dataset and DataArray
     18 from xarray.core import common, dtypes, duck_array_ops, indexing, nputils, ops, utils
---> 19 from xarray.core.arithmetic import VariableArithmetic
     20 from xarray.core.common import AbstractArray
     21 from xarray.core.indexing import (
     22     BasicIndexer,
     23     OuterIndexer,
   (...)
     26     as_indexable,
     27 )

File ~/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/arithmetic.py:16
      8 # _typed_ops.py is a generated file
      9 from xarray.core._typed_ops import (
     10     DataArrayGroupByOpsMixin,
     11     DataArrayOpsMixin,
   (...)
     14     VariableOpsMixin,
     15 )
---> 16 from xarray.core.common import ImplementsArrayReduce, ImplementsDatasetReduce
     17 from xarray.core.ops import (
     18     IncludeCumMethods,
     19     IncludeNumpySameMethods,
     20     IncludeReduceMethods,
     21 )
     22 from xarray.core.options import OPTIONS, _get_keep_attrs

ImportError: cannot import name 'ImplementsArrayReduce' from partially initialized module 'xarray.core.common' (most likely due to a circular import) (/Users/mdancho/opt/anaconda3/envs/lab_91_cltv/lib/python3.9/site-packages/xarray/core/common.py)
samukweku commented 3 months ago

thanks for the feedback @mdancho84 I might be wrong; it looks like this is more with xarray than with pandas_flavor. tagging @ericmjl for his opinion