gooddata-pandas 1.63.1.dev4__tar.gz → 1.64.1.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/PKG-INFO +3 -3
  2. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/pyproject.toml +3 -3
  3. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/arrow_convertor.py +96 -16
  4. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/arrow_types.py +4 -0
  5. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/data_access.py +26 -9
  6. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/dataframe.py +4 -2
  7. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/manifest.json +85 -15
  8. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_exec_def_arrow.py +577 -9
  9. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/.gitignore +0 -0
  10. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/.readthedocs.yaml +0 -0
  11. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/LICENSE.txt +0 -0
  12. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/MANIFEST.in +0 -0
  13. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/Makefile +0 -0
  14. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/README.md +0 -0
  15. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/_static/empty_file +0 -0
  16. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/_templates/class-template.rst +0 -0
  17. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/_templates/module-template.rst +0 -0
  18. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/api.rst +0 -0
  19. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/conf.py +0 -0
  20. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/examples.rst +0 -0
  21. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/index.rst +0 -0
  22. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/installation.rst +0 -0
  23. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/docs/requirements.txt +0 -0
  24. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/__init__.py +0 -0
  25. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/_version.py +0 -0
  26. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/good_pandas.py +0 -0
  27. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/py.typed +0 -0
  28. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/result_convertor.py +0 -0
  29. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/series.py +0 -0
  30. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/src/gooddata_pandas/utils.py +0 -0
  31. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/__init__.py +0 -0
  32. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/conftest.py +0 -0
  33. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/__init__.py +0 -0
  34. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/conftest.py +0 -0
  35. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_c/dataframe.parquet +0 -0
  36. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_c/meta.json +0 -0
  37. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_c/result.arrow +0 -0
  38. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_cs/dataframe.parquet +0 -0
  39. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_cs/meta.json +0 -0
  40. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_cs/result.arrow +0 -0
  41. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_csy/dataframe.parquet +0 -0
  42. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_csy/meta.json +0 -0
  43. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_m_csy/result.arrow +0 -0
  44. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_cm/dataframe.parquet +0 -0
  45. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_cm/meta.json +0 -0
  46. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_cm/result.arrow +0 -0
  47. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csm/dataframe.parquet +0 -0
  48. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csm/meta.json +0 -0
  49. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csm/result.arrow +0 -0
  50. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csym/dataframe.parquet +0 -0
  51. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csym/meta.json +0 -0
  52. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_csym/result.arrow +0 -0
  53. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_m/dataframe.parquet +0 -0
  54. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_m/meta.json +0 -0
  55. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_r_m/result.arrow +0 -0
  56. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rc_m/dataframe.parquet +0 -0
  57. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rc_m/meta.json +0 -0
  58. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rc_m/result.arrow +0 -0
  59. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_m/dataframe.parquet +0 -0
  60. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_m/meta.json +0 -0
  61. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_m/result.arrow +0 -0
  62. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_ym/dataframe.parquet +0 -0
  63. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_ym/meta.json +0 -0
  64. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rcs_ym/result.arrow +0 -0
  65. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cm/dataframe.parquet +0 -0
  66. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cm/meta.json +0 -0
  67. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cm/result.arrow +0 -0
  68. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cym/dataframe.parquet +0 -0
  69. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cym/meta.json +0 -0
  70. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/dim_rs_cym/result.arrow +0 -0
  71. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/dataframe.parquet +0 -0
  72. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/meta.json +0 -0
  73. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/flat_attrs_and_metrics/result.arrow +0 -0
  74. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/metrics_only/dataframe.parquet +0 -0
  75. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/metrics_only/meta.json +0 -0
  76. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/metrics_only/result.arrow +0 -0
  77. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/single_metric_many_rows/dataframe.parquet +0 -0
  78. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/single_metric_many_rows/meta.json +0 -0
  79. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/single_metric_many_rows/result.arrow +0 -0
  80. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_grand/dataframe.parquet +0 -0
  81. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_grand/meta.json +0 -0
  82. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_grand/result.arrow +0 -0
  83. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub/dataframe.parquet +0 -0
  84. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub/meta.json +0 -0
  85. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub/result.arrow +0 -0
  86. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/dataframe.parquet +0 -0
  87. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/meta.json +0 -0
  88. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0_sub_grand/result.arrow +0 -0
  89. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/dataframe.parquet +0 -0
  90. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/meta.json +0 -0
  91. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1grand/result.arrow +0 -0
  92. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/dataframe.parquet +0 -0
  93. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/meta.json +0 -0
  94. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0grand_d1sub/result.arrow +0 -0
  95. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/dataframe.parquet +0 -0
  96. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/meta.json +0 -0
  97. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1grand/result.arrow +0 -0
  98. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/dataframe.parquet +0 -0
  99. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/meta.json +0 -0
  100. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d0sub_d1sub/result.arrow +0 -0
  101. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_grand/dataframe.parquet +0 -0
  102. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_grand/meta.json +0 -0
  103. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_grand/result.arrow +0 -0
  104. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub/dataframe.parquet +0 -0
  105. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub/meta.json +0 -0
  106. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub/result.arrow +0 -0
  107. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/dataframe.parquet +0 -0
  108. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/meta.json +0 -0
  109. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/tot_d1_sub_grand/result.arrow +0 -0
  110. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_both_dims/dataframe.parquet +0 -0
  111. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_both_dims/meta.json +0 -0
  112. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_both_dims/result.arrow +0 -0
  113. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/dataframe.parquet +0 -0
  114. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/meta.json +0 -0
  115. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_sum/result.arrow +0 -0
  116. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/dataframe.parquet +0 -0
  117. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/meta.json +0 -0
  118. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_col_two_row_labels/result.arrow +0 -0
  119. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/dataframe.parquet +0 -0
  120. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/meta.json +0 -0
  121. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_sum/result.arrow +0 -0
  122. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/dataframe.parquet +0 -0
  123. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/meta.json +0 -0
  124. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_grand_row_two_col_labels/result.arrow +0 -0
  125. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_multi_agg/dataframe.parquet +0 -0
  126. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_multi_agg/meta.json +0 -0
  127. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_multi_agg/result.arrow +0 -0
  128. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_col/dataframe.parquet +0 -0
  129. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_col/meta.json +0 -0
  130. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_col/result.arrow +0 -0
  131. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_row/dataframe.parquet +0 -0
  132. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_row/meta.json +0 -0
  133. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/totals_subtotal_row/result.arrow +0 -0
  134. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/dataframe.parquet +0 -0
  135. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/meta.json +0 -0
  136. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_cols/result.arrow +0 -0
  137. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/dataframe.parquet +0 -0
  138. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/meta.json +0 -0
  139. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/two_dim_metrics_in_rows/result.arrow +0 -0
  140. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/dataframe.parquet +0 -0
  141. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/meta.json +0 -0
  142. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/arrow/wide_few_rows_many_cols/result.arrow +0 -0
  143. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml +0 -0
  144. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml +0 -0
  145. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml +0 -0
  146. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml +0 -0
  147. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml +0 -0
  148. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml +0 -0
  149. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml +0 -0
  150. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml +0 -0
  151. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml +0 -0
  152. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml +0 -0
  153. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml +0 -0
  154. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_items.yaml +0 -0
  155. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml +0 -0
  156. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_visualization.yaml +0 -0
  157. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml +0 -0
  158. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml +0 -0
  159. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/empty_indexed_dataframe.yaml +0 -0
  160. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml +0 -0
  161. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/filtered_empty_df.yaml +0 -0
  162. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml +0 -0
  163. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml +0 -0
  164. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_metrics.yaml +0 -0
  165. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml +0 -0
  166. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml +0 -0
  167. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/not_indexed_metrics.yaml +0 -0
  168. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml +0 -0
  169. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml +0 -0
  170. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_metrics.yaml +0 -0
  171. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml +0 -0
  172. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml +0 -0
  173. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/analytical_dashboards/b2f2d436-9831-4fe0-81df-8c59fd33242b.yaml +0 -0
  174. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/filter_contexts/4717b786-2c2e-4596-adb5-4f8b0ab0e19a.yaml +0 -0
  175. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/filter_contexts/9f2b1f37-befa-450e-a6cc-dc576845c412.yaml +0 -0
  176. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_active_customers.yaml +0 -0
  177. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_orders.yaml +0 -0
  178. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_top_customers.yaml +0 -0
  179. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/amount_of_valid_orders.yaml +0 -0
  180. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/campaign_spend.yaml +0 -0
  181. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/order_amount.yaml +0 -0
  182. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue.yaml +0 -0
  183. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_customers.yaml +0 -0
  184. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_customers.yaml +0 -0
  185. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_products.yaml +0 -0
  186. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_products.yaml +0 -0
  187. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_in_category.yaml +0 -0
  188. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_per_product.yaml +0 -0
  189. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-clothing.yaml +0 -0
  190. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-electronic.yaml +0 -0
  191. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-home.yaml +0 -0
  192. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue-outdoor.yaml +0 -0
  193. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue.yaml +0 -0
  194. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_customer.yaml +0 -0
  195. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_dollar_spent.yaml +0 -0
  196. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10.yaml +0 -0
  197. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10_percent.yaml +0 -0
  198. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/total_revenue-no_filters.yaml +0 -0
  199. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/metrics/total_revenue.yaml +0 -0
  200. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/campaign_spend.yaml +0 -0
  201. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/customers_trend.yaml +0 -0
  202. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/percent_revenue_per_product_by_customer_and_category.yaml +0 -0
  203. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/percentage_of_customers_by_region.yaml +0 -0
  204. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_breakdown.yaml +0 -0
  205. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_categories_pie_chart.yaml +0 -0
  206. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_revenue_comparison-over_previous_period.yaml +0 -0
  207. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/product_saleability.yaml +0 -0
  208. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_and_quantity_by_product_and_category.yaml +0 -0
  209. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_category_trend.yaml +0 -0
  210. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_product.yaml +0 -0
  211. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_per_usd_vs_spend_by_campaign.yaml +0 -0
  212. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_trend.yaml +0 -0
  213. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_customers.yaml +0 -0
  214. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_products.yaml +0 -0
  215. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/campaign_channels.yaml +0 -0
  216. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/campaigns.yaml +0 -0
  217. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/customers.yaml +0 -0
  218. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/order_lines.yaml +0 -0
  219. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/datasets/products.yaml +0 -0
  220. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/load/ai/ldm/date_instances/date.yaml +0 -0
  221. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_created_visualization.py +0 -0
  222. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_exec_def.py +0 -0
  223. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_insight.py +0 -0
  224. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_dataframe_for_items.py +0 -0
  225. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_indexed_dataframe.py +0 -0
  226. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/dataframe/test_not_indexed_dataframe.py +0 -0
  227. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/gd_test_config.yaml +0 -0
  228. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/good_pandas/__init__.py +0 -0
  229. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/good_pandas/profiles/profiles.yaml +0 -0
  230. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/good_pandas/test_good_pandas.py +0 -0
  231. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/overview.md +0 -0
  232. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/__init__.py +0 -0
  233. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/conftest.py +0 -0
  234. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/multi_index_filtered_series.yaml +0 -0
  235. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/multi_index_metric_series.yaml +0 -0
  236. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_filtered_metric_series.yaml +0 -0
  237. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_label_series.yaml +0 -0
  238. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml +0 -0
  239. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_metric_series.yaml +0 -0
  240. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml +0 -0
  241. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/simple_index_filtered_series.yaml +0 -0
  242. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/simple_index_label_series.yaml +0 -0
  243. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/fixtures/simple_index_metric_series.yaml +0 -0
  244. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/test_indexed_series.py +0 -0
  245. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/series/test_not_indexed_series.py +0 -0
  246. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/utils/__init__.py +0 -0
  247. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/utils/fixtures/test_get_catalog_attributes_for_extract.yaml +0 -0
  248. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tests/utils/test_utils.py +0 -0
  249. {gooddata_pandas-1.63.1.dev4 → gooddata_pandas-1.64.1.dev1}/tox.ini +0 -0
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gooddata-pandas
3
- Version: 1.63.1.dev4
3
+ Version: 1.64.1.dev1
4
4
  Summary: GoodData Cloud to pandas
5
- Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.63.1.dev4
5
+ Project-URL: Documentation, https://gooddata-pandas.readthedocs.io/en/v1.64.1.dev1
6
6
  Project-URL: Source, https://github.com/gooddata/gooddata-python-sdk
7
7
  Author-email: GoodData <support@gooddata.com>
8
8
  License-Expression: MIT
@@ -20,7 +20,7 @@ Classifier: Topic :: Scientific/Engineering
20
20
  Classifier: Topic :: Software Development
21
21
  Classifier: Typing :: Typed
22
22
  Requires-Python: >=3.10
23
- Requires-Dist: gooddata-sdk~=1.63.1.dev4
23
+ Requires-Dist: gooddata-sdk~=1.64.1.dev1
24
24
  Requires-Dist: pandas<3.0.0,>=2.0.0
25
25
  Provides-Extra: arrow
26
26
  Requires-Dist: orjson>=3.11.0; extra == 'arrow'
@@ -1,7 +1,7 @@
1
1
  # (C) 2025 GoodData Corporation
2
2
  [project]
3
3
  name = "gooddata-pandas"
4
- version = "1.63.1.dev4"
4
+ version = "1.64.1.dev1"
5
5
  description = "GoodData Cloud to pandas"
6
6
  readme = "README.md"
7
7
  license = "MIT"
@@ -29,7 +29,7 @@ keywords = [
29
29
  ]
30
30
  requires-python = ">=3.10"
31
31
  dependencies = [
32
- "gooddata-sdk~=1.63.1.dev4",
32
+ "gooddata-sdk~=1.64.1.dev1",
33
33
  "pandas>=2.0.0,<3.0.0",
34
34
  ]
35
35
  classifiers = [
@@ -50,7 +50,7 @@ classifiers = [
50
50
  arrow = ["pyarrow>=23.0.1", "orjson>=3.11.0"]
51
51
 
52
52
  [project.urls]
53
- Documentation = "https://gooddata-pandas.readthedocs.io/en/v1.63.1.dev4"
53
+ Documentation = "https://gooddata-pandas.readthedocs.io/en/v1.64.1.dev1"
54
54
  Source = "https://github.com/gooddata/gooddata-python-sdk"
55
55
 
56
56
  [dependency-groups]
@@ -1,10 +1,12 @@
1
1
  # (C) 2026 GoodData Corporation
2
2
  from __future__ import annotations
3
3
 
4
+ import logging
4
5
  from typing import Callable
5
6
 
6
7
  import orjson
7
8
  import pandas
9
+ from gooddata_sdk.type_converter import AttributeConverterStore
8
10
 
9
11
  from gooddata_pandas.arrow_types import TypesMapper
10
12
 
@@ -42,6 +44,63 @@ _GDC_TYPE_TOTAL = "total"
42
44
 
43
45
  _REQUIRED_SCHEMA_KEYS = (_META_XTAB, _META_MODEL, _META_VIEW)
44
46
 
47
+ logger = logging.getLogger(__name__)
48
+
49
+
50
+ def read_model_labels(table: pa.Table) -> dict:
51
+ """Return the ``labels`` dict from the Arrow table's ``x-gdc-model-v1`` schema metadata.
52
+
53
+ Returns an empty dict when the metadata key is absent so callers can use it
54
+ unconditionally without extra None-checks.
55
+ """
56
+ if not table.schema.metadata or b"x-gdc-model-v1" not in table.schema.metadata:
57
+ return {}
58
+ return orjson.loads(table.schema.metadata[b"x-gdc-model-v1"]).get("labels", {})
59
+
60
+
61
+ def _get_date_converter_for_label(label_id: str, model_labels: dict):
62
+ """Return a type Converter for date-granularity labels, or None for plain text attributes.
63
+
64
+ Reads the ``granularity`` field from Arrow model metadata (``x-gdc-model-v1``) and
65
+ looks up the matching converter in ``AttributeConverterStore``.
66
+
67
+ - ``DAY`` / ``MONTH`` / ``YEAR`` → ``DateConverter`` (→ ``pandas.Timestamp`` via external fn)
68
+ - ``WEEK`` / ``QUARTER`` → ``StringConverter`` (no-op)
69
+ - ``MINUTE`` / ``HOUR`` → ``DatetimeConverter``
70
+ - No granularity (text attrs) → ``None`` (caller skips conversion)
71
+ """
72
+ info = model_labels.get(label_id, {})
73
+ granularity = info.get("granularity")
74
+ if not granularity:
75
+ return None
76
+ return AttributeConverterStore.find_converter("DATE", granularity.upper())
77
+
78
+
79
+ def convert_label_values(label_id: str, values: list, model_labels: dict) -> list:
80
+ """Apply date-granularity type conversion to a list of attribute values from an Arrow column.
81
+
82
+ Mirrors the non-Arrow execution path (``AttributeConverterStore`` in ``_typed_attribute_value``):
83
+
84
+ - ``DAY`` / ``MONTH`` / ``YEAR`` granularity → ``pandas.Timestamp``
85
+ - ``WEEK`` / ``QUARTER`` → ``str`` (unchanged)
86
+ - No granularity (text attributes) → values returned as the **same object**
87
+
88
+ ``None`` values are passed through unchanged.
89
+
90
+ Args:
91
+ label_id: Arrow column name / GoodData label local ID.
92
+ values: Raw values from ``table.column(label_id).to_pylist()``.
93
+ model_labels: The ``labels`` dict from ``x-gdc-model-v1`` schema metadata
94
+ (as returned by :func:`read_model_labels`).
95
+
96
+ Returns:
97
+ Converted list, or the original *values* object when no conversion is needed.
98
+ """
99
+ converter = _get_date_converter_for_label(label_id, model_labels)
100
+ if converter is None:
101
+ return values
102
+ return [converter.to_external_type(v) if v is not None else None for v in values]
103
+
45
104
 
46
105
  def build_metric_field_index(table: pa.Table) -> dict[int, str]:
47
106
  """Return {metric_dimension_index: arrow_field_name} from the table schema.
@@ -77,9 +136,14 @@ def _parse_schema_metadata(table: pa.Table) -> dict:
77
136
  raise ValueError(
78
137
  "Arrow table has no schema metadata. Expected GoodData metadata keys: " + ", ".join(_REQUIRED_SCHEMA_KEYS)
79
138
  )
80
- schema_meta = {
81
- k.decode(): orjson.loads(v) for k, v in table.schema.metadata.items() if k.decode() in _REQUIRED_SCHEMA_KEYS
82
- }
139
+ schema_meta = {}
140
+ for _k, _v in table.schema.metadata.items():
141
+ try:
142
+ _k_str = _k.decode()
143
+ except UnicodeDecodeError:
144
+ continue
145
+ if _k_str in _REQUIRED_SCHEMA_KEYS:
146
+ schema_meta[_k_str] = orjson.loads(_v)
83
147
  missing = [k for k in _REQUIRED_SCHEMA_KEYS if k not in schema_meta]
84
148
  if missing:
85
149
  raise ValueError(
@@ -186,10 +250,15 @@ def _build_inline_index(
186
250
  totals_meta = xtab_meta.get("totalsMetadata", {})
187
251
  total_ref_vals: list = [None] * table.num_rows
188
252
  if totals_meta:
189
- for field in table.schema:
190
- if field.name.startswith(_COL_TOTAL_REF_PREFIX):
191
- total_ref_vals = table.column(field.name).to_pylist()
192
- break
253
+ total_ref_cols = [f.name for f in table.schema if f.name.startswith(_COL_TOTAL_REF_PREFIX)]
254
+ if total_ref_cols:
255
+ if len(total_ref_cols) > 1:
256
+ logger.warning(
257
+ "Arrow table has %d __total_ref* columns; only %r is used for aggregation names.",
258
+ len(total_ref_cols),
259
+ total_ref_cols[0],
260
+ )
261
+ total_ref_vals = table.column(total_ref_cols[0]).to_pylist()
193
262
 
194
263
  # Precompute per-row aggregation name and kept-label set for total rows.
195
264
  agg_for_row: list[str | None] = [None] * table.num_rows
@@ -212,16 +281,17 @@ def _build_inline_index(
212
281
  values = table.column(lid).to_pylist()
213
282
  processed = []
214
283
  for i, v in enumerate(values):
215
- if row_types[i] != 0 and isinstance(v, str):
216
- if ref in kept_labels_for_row[i]:
217
- # Outer label kept as real attribute value in a subtotal row.
218
- processed.append(v)
219
- elif v == "":
220
- # Aggregated level left empty by the server — fill with agg name.
221
- processed.append(agg_for_row[i] if agg_for_row[i] else v)
284
+ if row_types[i] != 0:
285
+ if isinstance(v, str):
286
+ if ref in kept_labels_for_row[i]:
287
+ processed.append(v)
288
+ elif v == "":
289
+ processed.append(agg_for_row[i] if agg_for_row[i] else v)
290
+ else:
291
+ processed.append(v.upper())
222
292
  else:
223
- # Aggregation function marker (e.g. 'sum')uppercase it.
224
- processed.append(v.upper())
293
+ # Non-string value in a total row replace with the aggregation name when available.
294
+ processed.append(agg_for_row[i] if agg_for_row[i] is not None else v)
225
295
  else:
226
296
  processed.append(v)
227
297
  arrays.append(processed)
@@ -410,6 +480,11 @@ def compute_column_totals_indexes(table: pa.Table, execution_dims: list) -> list
410
480
  (dim for dim in execution_dims if col_ref_label_ids <= _label_ids_in_dim(dim)),
411
481
  {},
412
482
  )
483
+ if not col_dim and execution_dims:
484
+ logger.warning(
485
+ "No execution dimension contains column label IDs %s; column_totals_indexes will be empty.",
486
+ col_ref_label_ids,
487
+ )
413
488
  else:
414
489
  col_dim = next(
415
490
  (dim for dim in execution_dims if any("measureGroupHeaders" in h for h in dim.get("headers", []))),
@@ -486,6 +561,11 @@ def compute_row_totals_indexes(table: pa.Table, execution_dims: list) -> list[li
486
561
  (dim for dim in execution_dims if ref_label_ids <= _label_ids_in_dim(dim)),
487
562
  {},
488
563
  )
564
+ if not row_dim and execution_dims:
565
+ logger.warning(
566
+ "No execution dimension contains row label IDs %s; row_totals_indexes will be empty.",
567
+ ref_label_ids,
568
+ )
489
569
  else:
490
570
  # Metrics-only: the dimension containing measureGroupHeaders is the output-row dim.
491
571
  row_dim = next(
@@ -47,8 +47,12 @@ class ArrowConfig:
47
47
  custom_mapping is not provided.
48
48
  custom_mapping: Arrow type → pandas dtype mapping dict. Only used when
49
49
  types_mapper=TypesMapper.CUSTOM, ignored otherwise.
50
+ max_bytes: Optional byte-size limit for the Arrow response body. When set,
51
+ ``read_result_arrow`` raises ``ResultSizeBytesLimitExceeded`` if the
52
+ raw IPC payload exceeds this value before parsing begins.
50
53
  """
51
54
 
52
55
  self_destruct: bool = False
53
56
  types_mapper: TypesMapper = TypesMapper.DEFAULT
54
57
  custom_mapping: dict | None = field(default=None)
58
+ max_bytes: int | None = field(default=None)
@@ -18,11 +18,6 @@ from gooddata_sdk import (
18
18
  )
19
19
  from gooddata_sdk.utils import IdObjType
20
20
 
21
- try:
22
- from gooddata_pandas.arrow_convertor import build_metric_field_index
23
- except ImportError:
24
- pass # Only needed when use_arrow=True; callers guard with _ARROW_AVAILABLE checks
25
-
26
21
  from gooddata_pandas.utils import (
27
22
  ColumnsDef,
28
23
  IndexDef,
@@ -34,6 +29,12 @@ from gooddata_pandas.utils import (
34
29
  get_catalog_attributes_for_extract,
35
30
  )
36
31
 
32
+ _ARROW_IMPORT_ERROR: ImportError | None = None
33
+ try:
34
+ from gooddata_pandas.arrow_convertor import build_metric_field_index, convert_label_values, read_model_labels
35
+ except ImportError as _e: # pragma: no cover
36
+ _ARROW_IMPORT_ERROR = _e # pragma: no cover
37
+
37
38
 
38
39
  class ExecutionDefinitionBuilder:
39
40
  _DEFAULT_INDEX_NAME: str = "0"
@@ -429,20 +430,30 @@ def _extract_from_arrow(
429
430
  col_to_attr_idx: dict[str, int],
430
431
  col_to_metric_idx: dict[str, int],
431
432
  index_to_attr_idx: dict[str, int],
433
+ max_bytes: int | None = None,
432
434
  ) -> tuple[dict, dict]:
433
435
  """
434
436
  Arrow-path extraction for indexed() / not_indexed().
435
437
 
436
438
  Reads the full result in one shot via the binary endpoint, then slices columns
437
- by Arrow field name (metrics) or label id (attributes). No catalog fetch needed.
439
+ by Arrow field name (metrics) or label id (attributes).
440
+
441
+ Date-granularity attribute columns (year/month/day) are converted to
442
+ ``pandas.Timestamp`` to match the behaviour of the non-Arrow path.
443
+ Week and quarter values remain as strings (same as non-Arrow).
438
444
  """
439
- table = execution.bare_exec_response.read_result_arrow()
445
+ if _ARROW_IMPORT_ERROR is not None:
446
+ raise ImportError(
447
+ "pyarrow is required for Arrow support. Install it with: pip install gooddata-pandas[arrow]"
448
+ ) from _ARROW_IMPORT_ERROR
449
+ table = execution.bare_exec_response.read_result_arrow(max_bytes=max_bytes)
440
450
  exec_def = execution.exec_def
441
451
 
442
452
  if table.num_rows == 0:
443
453
  return {col: [] for col in cols}, {idx: [] for idx in index_to_attr_idx}
444
454
 
445
455
  metric_dim_idx_to_field = build_metric_field_index(table)
456
+ model_labels = read_model_labels(table)
446
457
 
447
458
  data: dict[str, list] = {}
448
459
  for col in cols:
@@ -451,12 +462,14 @@ def _extract_from_arrow(
451
462
  data[col] = table.column(field_name).to_pylist()
452
463
  else:
453
464
  attr = exec_def.attributes[col_to_attr_idx[col]]
454
- data[col] = table.column(attr.label.id).to_pylist()
465
+ label_id = attr.label.id
466
+ data[col] = convert_label_values(label_id, table.column(label_id).to_pylist(), model_labels)
455
467
 
456
468
  index: dict[str, list] = {}
457
469
  for idx_name, attr_idx in index_to_attr_idx.items():
458
470
  attr = exec_def.attributes[attr_idx]
459
- index[idx_name] = table.column(attr.label.id).to_pylist()
471
+ label_id = attr.label.id
472
+ index[idx_name] = convert_label_values(label_id, table.column(label_id).to_pylist(), model_labels)
460
473
 
461
474
  return data, index
462
475
 
@@ -471,6 +484,7 @@ def compute_and_extract(
471
484
  is_cancellable: bool = False,
472
485
  result_page_len: int | None = None,
473
486
  use_arrow: bool = False,
487
+ max_bytes: int | None = None,
474
488
  ) -> tuple[dict, dict]:
475
489
  """
476
490
  Convenience function that computes and extracts data from the execution response.
@@ -489,6 +503,8 @@ def compute_and_extract(
489
503
  Defaults to 1000. Larger values can improve performance for large result sets.
490
504
  use_arrow (bool, optional): When True, fetches the result via the Arrow IPC binary
491
505
  endpoint in one shot instead of paginating through JSON. Requires pyarrow.
506
+ max_bytes (Optional[int]): Maximum response body size in bytes for the Arrow path.
507
+ Raises ResultSizeBytesLimitExceeded when exceeded. Ignored when use_arrow=False.
492
508
 
493
509
  Returns:
494
510
  tuple: A tuple containing the following dictionaries:
@@ -522,6 +538,7 @@ def compute_and_extract(
522
538
  col_to_attr_idx,
523
539
  col_to_metric_idx,
524
540
  index_to_attr_idx,
541
+ max_bytes=max_bytes,
525
542
  )
526
543
  elif not exec_def.has_attributes():
527
544
  return _extract_for_metrics_only(execution, cols, col_to_metric_idx), dict()
@@ -159,6 +159,7 @@ class DataFrameFactory:
159
159
  is_cancellable=is_cancellable,
160
160
  result_page_len=result_page_len,
161
161
  use_arrow=use_arrow,
162
+ max_bytes=self._arrow_config.max_bytes if use_arrow else None,
162
163
  )
163
164
 
164
165
  _idx = make_pandas_index(index)
@@ -210,6 +211,7 @@ class DataFrameFactory:
210
211
  is_cancellable=is_cancellable,
211
212
  result_page_len=result_page_len,
212
213
  use_arrow=use_arrow,
214
+ max_bytes=self._arrow_config.max_bytes if use_arrow else None,
213
215
  )
214
216
 
215
217
  return pandas.DataFrame(data=data)
@@ -539,7 +541,7 @@ class DataFrameFactory:
539
541
  on_execution_submitted(execution)
540
542
 
541
543
  exec_response = execution.bare_exec_response
542
- table = exec_response.read_result_arrow()
544
+ table = exec_response.read_result_arrow(max_bytes=self._arrow_config.max_bytes)
543
545
  return self._table_to_df_and_metadata(table, exec_response, label_overrides, grand_totals_position)
544
546
 
545
547
  def for_arrow_table(
@@ -684,7 +686,7 @@ class DataFrameFactory:
684
686
  result_cache_metadata.execution_response, _check_type=False
685
687
  ),
686
688
  )
687
- table = exec_response.read_result_arrow()
689
+ table = exec_response.read_result_arrow(max_bytes=self._arrow_config.max_bytes)
688
690
  return self._table_to_df_and_metadata(table, exec_response, label_overrides, grand_totals_position)
689
691
 
690
692
  return convert_execution_response_to_dataframe(
@@ -1,7 +1,7 @@
1
1
  [
2
2
  {
3
3
  "name": "flat_attrs_and_metrics",
4
- "description": "Single dim with attributes and measureGroup \u2014 flat table",
4
+ "description": "Single dim with attributes and measureGroup flat table",
5
5
  "shape": [
6
6
  96,
7
7
  1
@@ -11,7 +11,7 @@
11
11
  },
12
12
  {
13
13
  "name": "two_dim_metrics_in_rows",
14
- "description": "measureGroup in dim0 \u2192 each metric is a row; attributes fan out as columns",
14
+ "description": "measureGroup in dim0 each metric is a row; attributes fan out as columns",
15
15
  "shape": [
16
16
  2,
17
17
  17
@@ -21,7 +21,7 @@
21
21
  },
22
22
  {
23
23
  "name": "two_dim_metrics_in_cols",
24
- "description": "Attributes in dim0 (rows), measureGroup in dim1 (columns) \u2014 most common layout",
24
+ "description": "Attributes in dim0 (rows), measureGroup in dim1 (columns) most common layout",
25
25
  "shape": [
26
26
  48,
27
27
  8
@@ -31,7 +31,7 @@
31
31
  },
32
32
  {
33
33
  "name": "wide_few_rows_many_cols",
34
- "description": "Single attribute in dim0, multiple attributes + measureGroup in dim1 \u2192 wide DataFrame",
34
+ "description": "Single attribute in dim0, multiple attributes + measureGroup in dim1 wide DataFrame",
35
35
  "shape": [
36
36
  4,
37
37
  96
@@ -41,7 +41,7 @@
41
41
  },
42
42
  {
43
43
  "name": "metrics_only",
44
- "description": "No attributes \u2014 single row of aggregate metric values",
44
+ "description": "No attributes single row of aggregate metric values",
45
45
  "shape": [
46
46
  2,
47
47
  1
@@ -51,7 +51,7 @@
51
51
  },
52
52
  {
53
53
  "name": "single_metric_many_rows",
54
- "description": "Three attributes + one metric \u2014 tall narrow table",
54
+ "description": "Three attributes + one metric tall narrow table",
55
55
  "shape": [
56
56
  182,
57
57
  1
@@ -81,7 +81,7 @@
81
81
  },
82
82
  {
83
83
  "name": "totals_grand_row_two_col_labels",
84
- "description": "Grand total rows; column dim has two labels \u2014 tests index padding",
84
+ "description": "Grand total rows; column dim has two labels tests index padding",
85
85
  "shape": [
86
86
  96,
87
87
  18
@@ -91,7 +91,7 @@
91
91
  },
92
92
  {
93
93
  "name": "totals_grand_col_two_row_labels",
94
- "description": "Grand total columns; row dim has two labels \u2014 tests column index padding",
94
+ "description": "Grand total columns; row dim has two labels tests column index padding",
95
95
  "shape": [
96
96
  18,
97
97
  96
@@ -131,7 +131,7 @@
131
131
  },
132
132
  {
133
133
  "name": "dim_r_m",
134
- "description": "dim0=[region], dim1=[measureGroup] \u2014 1 row attr, metrics in cols",
134
+ "description": "dim0=[region], dim1=[measureGroup] 1 row attr, metrics in cols",
135
135
  "shape": [
136
136
  5,
137
137
  2
@@ -161,7 +161,7 @@
161
161
  },
162
162
  {
163
163
  "name": "dim_m_c",
164
- "description": "dim0=[measureGroup], dim1=[products.category] \u2014 metrics in rows, 1 col attr",
164
+ "description": "dim0=[measureGroup], dim1=[products.category] metrics in rows, 1 col attr",
165
165
  "shape": [
166
166
  2,
167
167
  4
@@ -251,7 +251,7 @@
251
251
  },
252
252
  {
253
253
  "name": "tot_d0_sub",
254
- "description": "Base A: subtotal per region (rolls up category) \u2192 extra rows in dim0",
254
+ "description": "Base A: subtotal per region (rolls up category) extra rows in dim0",
255
255
  "shape": [
256
256
  44,
257
257
  4
@@ -261,7 +261,7 @@
261
261
  },
262
262
  {
263
263
  "name": "tot_d0_grand",
264
- "description": "Base A: grand total of dim0 (all items) \u2192 extra column in dim1",
264
+ "description": "Base A: grand total of dim0 (all items) extra column in dim1",
265
265
  "shape": [
266
266
  34,
267
267
  4
@@ -281,7 +281,7 @@
281
281
  },
282
282
  {
283
283
  "name": "tot_d1_sub",
284
- "description": "Base B: subtotal per order_status (rolls up date.year) \u2192 extra columns in dim1",
284
+ "description": "Base B: subtotal per order_status (rolls up date.year) extra columns in dim1",
285
285
  "shape": [
286
286
  18,
287
287
  36
@@ -291,7 +291,7 @@
291
291
  },
292
292
  {
293
293
  "name": "tot_d1_grand",
294
- "description": "Base B: grand total of dim1 (all items) \u2192 extra row in dim0",
294
+ "description": "Base B: grand total of dim1 (all items) extra row in dim0",
295
295
  "shape": [
296
296
  18,
297
297
  30
@@ -321,7 +321,7 @@
321
321
  },
322
322
  {
323
323
  "name": "tot_d0sub_d1grand",
324
- "description": "Base C: row subtotals per region + grand total of dim1 \u2192 extra col rows + SUM row",
324
+ "description": "Base C: row subtotals per region + grand total of dim1 extra col rows + SUM row",
325
325
  "shape": [
326
326
  44,
327
327
  16
@@ -358,5 +358,75 @@
358
358
  ],
359
359
  "result_id": "b592a3f77e55d5e3d4450891c0d5c1fbedcac173:f9ed5a4e4b8cf21716cc409cd87664ef7da3444d4f07c4864989916d420bf85f",
360
360
  "dir": "totals_both_dims"
361
+ },
362
+ {
363
+ "name": "date_year_in_rows",
364
+ "description": "Date attribute (YEAR granularity) in row dimension — Arrow path date→Timestamp parity",
365
+ "shape": [
366
+ 3,
367
+ 1
368
+ ],
369
+ "result_id": "0000000000000000000000000000000000000000:date_year_in_rows",
370
+ "dir": "date_year_in_rows"
371
+ },
372
+ {
373
+ "name": "date_month_in_rows",
374
+ "description": "Date attribute (MONTH granularity) in row dimension — Arrow path date→Timestamp parity",
375
+ "shape": [
376
+ 3,
377
+ 1
378
+ ],
379
+ "result_id": "0000000000000000000000000000000000000000:date_month_in_rows",
380
+ "dir": "date_month_in_rows"
381
+ },
382
+ {
383
+ "name": "date_day_in_rows",
384
+ "description": "Date attribute (DAY granularity) in row dimension — Arrow path date→Timestamp parity",
385
+ "shape": [
386
+ 2,
387
+ 1
388
+ ],
389
+ "result_id": "0000000000000000000000000000000000000000:date_day_in_rows",
390
+ "dir": "date_day_in_rows"
391
+ },
392
+ {
393
+ "name": "date_week_in_rows",
394
+ "description": "Date attribute (WEEK granularity) in row dimension — stays string, no Timestamp conversion",
395
+ "shape": [
396
+ 2,
397
+ 1
398
+ ],
399
+ "result_id": "0000000000000000000000000000000000000000:date_week_in_rows",
400
+ "dir": "date_week_in_rows"
401
+ },
402
+ {
403
+ "name": "date_quarter_in_rows",
404
+ "description": "Date attribute (QUARTER granularity) in row dimension — stays string, no Timestamp conversion",
405
+ "shape": [
406
+ 2,
407
+ 1
408
+ ],
409
+ "result_id": "0000000000000000000000000000000000000000:date_quarter_in_rows",
410
+ "dir": "date_quarter_in_rows"
411
+ },
412
+ {
413
+ "name": "empty_two_dim_attrs_metrics",
414
+ "description": "Standard two-dim layout (attr rows, metric cols), 0 data rows",
415
+ "shape": [
416
+ 0,
417
+ 2
418
+ ],
419
+ "result_id": "0000000000000000000000000000000000000000:empty_two_dim_attrs_metrics",
420
+ "dir": "empty_two_dim_attrs_metrics"
421
+ },
422
+ {
423
+ "name": "empty_flat_attrs_metrics",
424
+ "description": "Single-dim (flat) layout, attr and metrics co-dim, 0 data rows",
425
+ "shape": [
426
+ 0,
427
+ 2
428
+ ],
429
+ "result_id": "0000000000000000000000000000000000000000:empty_flat_attrs_metrics",
430
+ "dir": "empty_flat_attrs_metrics"
361
431
  }
362
432
  ]