itables 2.2.4__tar.gz → 2.2.5__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 (128) hide show
  1. {itables-2.2.4 → itables-2.2.5}/LICENSE +1 -1
  2. {itables-2.2.4 → itables-2.2.5}/PKG-INFO +4 -3
  3. {itables-2.2.4 → itables-2.2.5}/docs/changelog.md +7 -0
  4. {itables-2.2.4 → itables-2.2.5}/packages/itables_for_streamlit/package-lock.json +3 -3
  5. {itables-2.2.4 → itables-2.2.5}/src/itables/downsample.py +2 -0
  6. {itables-2.2.4 → itables-2.2.5}/src/itables/javascript.py +5 -4
  7. {itables-2.2.4 → itables-2.2.5}/src/itables/version.py +1 -1
  8. {itables-2.2.4 → itables-2.2.5}/tests/test_downsample.py +7 -0
  9. itables-2.2.5/tests/test_shiny.py +29 -0
  10. {itables-2.2.4 → itables-2.2.5}/.gitattributes +0 -0
  11. {itables-2.2.4 → itables-2.2.5}/.github/codecov.yml +0 -0
  12. {itables-2.2.4 → itables-2.2.5}/.github/workflows/comment-pr.yml +0 -0
  13. {itables-2.2.4 → itables-2.2.5}/.github/workflows/continuous-integration.yml +0 -0
  14. {itables-2.2.4 → itables-2.2.5}/.github/workflows/publish-book.yml +0 -0
  15. {itables-2.2.4 → itables-2.2.5}/.github/workflows/publish.yml +0 -0
  16. {itables-2.2.4 → itables-2.2.5}/.gitignore +0 -0
  17. {itables-2.2.4 → itables-2.2.5}/.pre-commit-config.yaml +0 -0
  18. {itables-2.2.4 → itables-2.2.5}/.pylintrc +0 -0
  19. {itables-2.2.4 → itables-2.2.5}/README.md +0 -0
  20. {itables-2.2.4 → itables-2.2.5}/binder/labconfig/default_setting_overrides.json +0 -0
  21. {itables-2.2.4 → itables-2.2.5}/binder/postBuild +0 -0
  22. {itables-2.2.4 → itables-2.2.5}/binder/requirements.txt +0 -0
  23. {itables-2.2.4 → itables-2.2.5}/docs/_config.yml +0 -0
  24. {itables-2.2.4 → itables-2.2.5}/docs/_toc.yml +0 -0
  25. {itables-2.2.4 → itables-2.2.5}/docs/advanced_parameters.md +0 -0
  26. {itables-2.2.4 → itables-2.2.5}/docs/contributing.md +0 -0
  27. {itables-2.2.4 → itables-2.2.5}/docs/custom_css.md +0 -0
  28. {itables-2.2.4 → itables-2.2.5}/docs/custom_extensions.md +0 -0
  29. {itables-2.2.4 → itables-2.2.5}/docs/dark_mode.md +0 -0
  30. {itables-2.2.4 → itables-2.2.5}/docs/dash.md +0 -0
  31. {itables-2.2.4 → itables-2.2.5}/docs/developing.md +0 -0
  32. {itables-2.2.4 → itables-2.2.5}/docs/df_example.png +0 -0
  33. {itables-2.2.4 → itables-2.2.5}/docs/downsampling.md +0 -0
  34. {itables-2.2.4 → itables-2.2.5}/docs/extensions.md +0 -0
  35. {itables-2.2.4 → itables-2.2.5}/docs/formatting.md +0 -0
  36. {itables-2.2.4 → itables-2.2.5}/docs/html_export.md +0 -0
  37. {itables-2.2.4 → itables-2.2.5}/docs/images/code.png +0 -0
  38. {itables-2.2.4 → itables-2.2.5}/docs/images/colab.png +0 -0
  39. {itables-2.2.4 → itables-2.2.5}/docs/images/html.png +0 -0
  40. {itables-2.2.4 → itables-2.2.5}/docs/images/lab.png +0 -0
  41. {itables-2.2.4 → itables-2.2.5}/docs/images/notebook.png +0 -0
  42. {itables-2.2.4 → itables-2.2.5}/docs/images/pycharm.png +0 -0
  43. {itables-2.2.4 → itables-2.2.5}/docs/pandas_style.md +0 -0
  44. {itables-2.2.4 → itables-2.2.5}/docs/polars_dataframes.md +0 -0
  45. {itables-2.2.4 → itables-2.2.5}/docs/quarto/quarto_html.qmd +0 -0
  46. {itables-2.2.4 → itables-2.2.5}/docs/quarto/quarto_revealjs.qmd +0 -0
  47. {itables-2.2.4 → itables-2.2.5}/docs/quarto.md +0 -0
  48. {itables-2.2.4 → itables-2.2.5}/docs/quick_start.md +0 -0
  49. {itables-2.2.4 → itables-2.2.5}/docs/references.md +0 -0
  50. {itables-2.2.4 → itables-2.2.5}/docs/sample_dataframes.md +0 -0
  51. {itables-2.2.4 → itables-2.2.5}/docs/select.md +0 -0
  52. {itables-2.2.4 → itables-2.2.5}/docs/shiny.md +0 -0
  53. {itables-2.2.4 → itables-2.2.5}/docs/show_df.png +0 -0
  54. {itables-2.2.4 → itables-2.2.5}/docs/streamlit.md +0 -0
  55. {itables-2.2.4 → itables-2.2.5}/docs/supported_editors.md +0 -0
  56. {itables-2.2.4 → itables-2.2.5}/docs/troubleshooting.md +0 -0
  57. {itables-2.2.4 → itables-2.2.5}/docs/widget.md +0 -0
  58. {itables-2.2.4 → itables-2.2.5}/environment.yml +0 -0
  59. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/CHANGELOG.md +0 -0
  60. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/LICENSE +0 -0
  61. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/README.md +0 -0
  62. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/package-lock.json +0 -0
  63. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/package.json +0 -0
  64. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/src/index.css +0 -0
  65. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/src/index.d.ts +0 -0
  66. {itables-2.2.4 → itables-2.2.5}/packages/dt_for_itables/src/index.js +0 -0
  67. {itables-2.2.4 → itables-2.2.5}/packages/itables_anywidget/README.md +0 -0
  68. {itables-2.2.4 → itables-2.2.5}/packages/itables_anywidget/js/widget.css +0 -0
  69. {itables-2.2.4 → itables-2.2.5}/packages/itables_anywidget/js/widget.ts +0 -0
  70. {itables-2.2.4 → itables-2.2.5}/packages/itables_anywidget/package-lock.json +0 -0
  71. {itables-2.2.4 → itables-2.2.5}/packages/itables_anywidget/package.json +0 -0
  72. {itables-2.2.4 → itables-2.2.5}/packages/itables_anywidget/tsconfig.json +0 -0
  73. {itables-2.2.4 → itables-2.2.5}/packages/itables_for_streamlit/README.md +0 -0
  74. {itables-2.2.4 → itables-2.2.5}/packages/itables_for_streamlit/package.json +0 -0
  75. {itables-2.2.4 → itables-2.2.5}/packages/itables_for_streamlit/public/index.html +0 -0
  76. {itables-2.2.4 → itables-2.2.5}/packages/itables_for_streamlit/src/index.tsx +0 -0
  77. {itables-2.2.4 → itables-2.2.5}/packages/itables_for_streamlit/tsconfig.json +0 -0
  78. {itables-2.2.4 → itables-2.2.5}/packages/package-lock.json +0 -0
  79. {itables-2.2.4 → itables-2.2.5}/packages/package.json +0 -0
  80. {itables-2.2.4 → itables-2.2.5}/pyproject.toml +0 -0
  81. {itables-2.2.4 → itables-2.2.5}/src/itables/__init__.py +0 -0
  82. {itables-2.2.4 → itables-2.2.5}/src/itables/datatables_format.py +0 -0
  83. {itables-2.2.4 → itables-2.2.5}/src/itables/html/column_filters/initComplete.js +0 -0
  84. {itables-2.2.4 → itables-2.2.5}/src/itables/html/column_filters/pre_dt_code.js +0 -0
  85. {itables-2.2.4 → itables-2.2.5}/src/itables/html/datatables_template.html +0 -0
  86. {itables-2.2.4 → itables-2.2.5}/src/itables/html/dt_bundle.css +0 -0
  87. {itables-2.2.4 → itables-2.2.5}/src/itables/html/dt_bundle.js +0 -0
  88. {itables-2.2.4 → itables-2.2.5}/src/itables/html/init_datatables.html +0 -0
  89. {itables-2.2.4 → itables-2.2.5}/src/itables/interactive.py +0 -0
  90. {itables-2.2.4 → itables-2.2.5}/src/itables/itables_for_streamlit/asset-manifest.json +0 -0
  91. {itables-2.2.4 → itables-2.2.5}/src/itables/itables_for_streamlit/index.html +0 -0
  92. {itables-2.2.4 → itables-2.2.5}/src/itables/itables_for_streamlit/static/css/main.b5025928.css +0 -0
  93. {itables-2.2.4 → itables-2.2.5}/src/itables/itables_for_streamlit/static/css/main.b5025928.css.map +0 -0
  94. {itables-2.2.4 → itables-2.2.5}/src/itables/itables_for_streamlit/static/js/main.f651d116.js +0 -0
  95. {itables-2.2.4 → itables-2.2.5}/src/itables/itables_for_streamlit/static/js/main.f651d116.js.LICENSE.txt +0 -0
  96. {itables-2.2.4 → itables-2.2.5}/src/itables/itables_for_streamlit/static/js/main.f651d116.js.map +0 -0
  97. {itables-2.2.4 → itables-2.2.5}/src/itables/logo/loading.svg +0 -0
  98. {itables-2.2.4 → itables-2.2.5}/src/itables/logo/logo.svg +0 -0
  99. {itables-2.2.4 → itables-2.2.5}/src/itables/logo/text.svg +0 -0
  100. {itables-2.2.4 → itables-2.2.5}/src/itables/logo/wide.svg +0 -0
  101. {itables-2.2.4 → itables-2.2.5}/src/itables/logo/with_text.svg +0 -0
  102. {itables-2.2.4 → itables-2.2.5}/src/itables/options.py +0 -0
  103. {itables-2.2.4 → itables-2.2.5}/src/itables/sample_dfs.py +0 -0
  104. {itables-2.2.4 → itables-2.2.5}/src/itables/samples/countries.csv +0 -0
  105. {itables-2.2.4 → itables-2.2.5}/src/itables/samples/indicators.csv +0 -0
  106. {itables-2.2.4 → itables-2.2.5}/src/itables/samples/population.csv +0 -0
  107. {itables-2.2.4 → itables-2.2.5}/src/itables/shiny.py +0 -0
  108. {itables-2.2.4 → itables-2.2.5}/src/itables/streamlit.py +0 -0
  109. {itables-2.2.4 → itables-2.2.5}/src/itables/utils.py +0 -0
  110. {itables-2.2.4 → itables-2.2.5}/src/itables/widget/__init__.py +0 -0
  111. {itables-2.2.4 → itables-2.2.5}/src/itables/widget/static/widget.css +0 -0
  112. {itables-2.2.4 → itables-2.2.5}/src/itables/widget/static/widget.js +0 -0
  113. {itables-2.2.4 → itables-2.2.5}/tests/__init__.py +0 -0
  114. {itables-2.2.4 → itables-2.2.5}/tests/conftest.py +0 -0
  115. {itables-2.2.4 → itables-2.2.5}/tests/test_changelog.py +0 -0
  116. {itables-2.2.4 → itables-2.2.5}/tests/test_connected_notebook_is_small.py +0 -0
  117. {itables-2.2.4 → itables-2.2.5}/tests/test_datatables_format.py +0 -0
  118. {itables-2.2.4 → itables-2.2.5}/tests/test_documentation_notebooks_run.py +0 -0
  119. {itables-2.2.4 → itables-2.2.5}/tests/test_extension_arguments.py +0 -0
  120. {itables-2.2.4 → itables-2.2.5}/tests/test_html_in_table_header.py +0 -0
  121. {itables-2.2.4 → itables-2.2.5}/tests/test_init.py +0 -0
  122. {itables-2.2.4 → itables-2.2.5}/tests/test_javascript.py +0 -0
  123. {itables-2.2.4 → itables-2.2.5}/tests/test_json_dumps.py +0 -0
  124. {itables-2.2.4 → itables-2.2.5}/tests/test_notebook.ipynb +0 -0
  125. {itables-2.2.4 → itables-2.2.5}/tests/test_pandas_style.py +0 -0
  126. {itables-2.2.4 → itables-2.2.5}/tests/test_polars.py +0 -0
  127. {itables-2.2.4 → itables-2.2.5}/tests/test_sample_dfs.py +0 -0
  128. {itables-2.2.4 → itables-2.2.5}/tests/test_update_samples.py +0 -0
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019-2024 Marc Wouts
3
+ Copyright (c) 2019-2025 Marc Wouts
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: itables
3
- Version: 2.2.4
3
+ Version: 2.2.5
4
4
  Summary: Pandas and Polar DataFrames as interactive DataTables
5
5
  Project-URL: Homepage, https://mwouts.github.io/itables/
6
6
  Project-URL: Documentation, https://mwouts.github.io/itables
@@ -11,7 +11,7 @@ Author-email: Marc Wouts <marc.wouts@gmail.com>
11
11
  Maintainer-email: Marc Wouts <marc.wouts@gmail.com>
12
12
  License: MIT License
13
13
 
14
- Copyright (c) 2019-2024 Marc Wouts
14
+ Copyright (c) 2019-2025 Marc Wouts
15
15
 
16
16
  Permission is hereby granted, free of charge, to any person obtaining a copy
17
17
  of this software and associated documentation files (the "Software"), to deal
@@ -30,6 +30,7 @@ License: MIT License
30
30
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
31
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
32
  SOFTWARE.
33
+ License-File: LICENSE
33
34
  Keywords: DataTables,Interactive,Javascript,Pandas,Polars
34
35
  Classifier: Development Status :: 5 - Production/Stable
35
36
  Classifier: Framework :: Jupyter
@@ -1,6 +1,13 @@
1
1
  ITables ChangeLog
2
2
  =================
3
3
 
4
+ 2.2.5 (2025-02-22)
5
+ ------------------
6
+
7
+ **Fixed**
8
+ - We have removed an erroneous assertion and added tests on the warnings issued when selected rows are not displayed ([[#351](https://github.com/mwouts/itables/issues/351)])
9
+
10
+
4
11
  2.2.4 (2024-12-07)
5
12
  ------------------
6
13
 
@@ -12556,9 +12556,9 @@
12556
12556
  }
12557
12557
  },
12558
12558
  "node_modules/nanoid": {
12559
- "version": "3.3.7",
12560
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
12561
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
12559
+ "version": "3.3.8",
12560
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
12561
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
12562
12562
  "funding": [
12563
12563
  {
12564
12564
  "type": "github",
@@ -96,6 +96,7 @@ def _downsample(df, max_rows=0, max_columns=0, max_bytes=0, target_aspect_ratio=
96
96
  if len(df) > max_rows > 0:
97
97
  second_half = max_rows // 2
98
98
  first_half = max_rows - second_half
99
+ assert first_half >= second_half
99
100
  if second_half:
100
101
  try:
101
102
  df = pd.concat((df.iloc[:first_half], df.iloc[-second_half:]))
@@ -110,6 +111,7 @@ def _downsample(df, max_rows=0, max_columns=0, max_bytes=0, target_aspect_ratio=
110
111
  if len(df.columns) > max_columns > 0:
111
112
  second_half = max_columns // 2
112
113
  first_half = max_columns - second_half
114
+ assert first_half >= second_half
113
115
  if second_half:
114
116
  try:
115
117
  df = pd.concat(
@@ -599,11 +599,12 @@ def warn_if_selected_rows_are_not_visible(
599
599
  if full_row_count == data_row_count:
600
600
  return selected_rows
601
601
 
602
- half = data_row_count // 2
603
- assert data_row_count == 2 * half, data_row_count
602
+ second_half = data_row_count // 2
603
+ first_half = data_row_count - second_half
604
+ assert first_half >= second_half
604
605
 
605
- bottom_limit = half
606
- top_limit = full_row_count - half
606
+ bottom_limit = first_half
607
+ top_limit = full_row_count - second_half
607
608
 
608
609
  if warn_on_selected_rows_not_rendered and any(
609
610
  bottom_limit <= i < top_limit for i in selected_rows
@@ -1,3 +1,3 @@
1
1
  """ITables' version number"""
2
2
 
3
- __version__ = "2.2.4"
3
+ __version__ = "2.2.5"
@@ -117,3 +117,10 @@ def test_df_with_many_columns_is_downsampled_preferentially_on_columns(df, max_b
117
117
  else:
118
118
  # aspect ratio is close to 1
119
119
  assert 0.5 < len(dn) / len(dn.columns) < 2
120
+
121
+
122
+ def test_downsample_to_odd_number_of_rows():
123
+ df = pd.DataFrame({"x": range(17)})
124
+ dn, _ = downsample(df, max_rows=3)
125
+ assert len(dn) == 3
126
+ assert dn["x"].to_list() == [0, 1, 16]
@@ -0,0 +1,29 @@
1
+ import warnings
2
+
3
+ import pandas as pd
4
+ import pytest
5
+
6
+ from itables.downsample import downsample
7
+ from itables.shiny import DT
8
+
9
+
10
+ def test_select_on_downsampled_df():
11
+ """
12
+ When a DF of 17 rows is downsampled to 3 rows,
13
+ we can only select rows 0, 1, 16
14
+ """
15
+ df = pd.DataFrame({"x": range(17)})
16
+ dn, _ = downsample(df, max_rows=3)
17
+ assert len(dn) == 3
18
+
19
+ with warnings.catch_warnings():
20
+ warnings.simplefilter("error")
21
+ DT(df, maxRows=3, selected_rows=[0, 1, 16])
22
+
23
+ for row in [-1, 17]:
24
+ with pytest.raises(IndexError, match="Selected rows out of range"):
25
+ DT(df, maxRows=3, selected_rows=[row])
26
+
27
+ for row in [2, 15]:
28
+ with pytest.warns(match="no row with index between 2 and 15 can be selected"):
29
+ DT(df, maxRows=3, selected_rows=[row])
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes