hvplot 0.11.1__tar.gz → 0.11.2a1__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 (197) hide show
  1. {hvplot-0.11.1 → hvplot-0.11.2a1}/.github/workflows/test.yaml +6 -4
  2. hvplot-0.11.2a1/.pre-commit-config.yaml +41 -0
  3. {hvplot-0.11.1 → hvplot-0.11.2a1}/PKG-INFO +1 -1
  4. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Explorer.ipynb +1 -1
  5. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Geographic_Data.ipynb +2 -2
  6. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/NetworkX.ipynb +5 -5
  7. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/_version.py +2 -2
  8. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/converter.py +22 -19
  9. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/plotting/scatter_matrix.py +2 -1
  10. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testcharts.py +11 -0
  11. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testgeowithoutgv.py +21 -0
  12. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testui.py +7 -0
  13. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testutil.py +6 -0
  14. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/ui.py +4 -11
  15. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/util.py +21 -0
  16. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot.egg-info/PKG-INFO +1 -1
  17. {hvplot-0.11.1 → hvplot-0.11.2a1}/pyproject.toml +1 -7
  18. hvplot-0.11.1/.pre-commit-config.yaml +0 -48
  19. {hvplot-0.11.1 → hvplot-0.11.2a1}/.git-blame-ignore-revs +0 -0
  20. {hvplot-0.11.1 → hvplot-0.11.2a1}/.git_archival.txt +0 -0
  21. {hvplot-0.11.1 → hvplot-0.11.2a1}/.gitattributes +0 -0
  22. {hvplot-0.11.1 → hvplot-0.11.2a1}/.github/CONTRIBUTING.md +0 -0
  23. {hvplot-0.11.1 → hvplot-0.11.2a1}/.github/FUNDING.yml +0 -0
  24. {hvplot-0.11.1 → hvplot-0.11.2a1}/.github/workflows/build.yaml +0 -0
  25. {hvplot-0.11.1 → hvplot-0.11.2a1}/.github/workflows/docs.yaml +0 -0
  26. {hvplot-0.11.1 → hvplot-0.11.2a1}/.gitignore +0 -0
  27. {hvplot-0.11.1 → hvplot-0.11.2a1}/CHANGELOG.md +0 -0
  28. {hvplot-0.11.1 → hvplot-0.11.2a1}/CODE_OF_CONDUCT.md +0 -0
  29. {hvplot-0.11.1 → hvplot-0.11.2a1}/LICENSE +0 -0
  30. {hvplot-0.11.1 → hvplot-0.11.2a1}/README.md +0 -0
  31. {hvplot-0.11.1 → hvplot-0.11.2a1}/binder/environment.yml +0 -0
  32. {hvplot-0.11.1 → hvplot-0.11.2a1}/binder/postBuild +0 -0
  33. {hvplot-0.11.1 → hvplot-0.11.2a1}/conda.recipe/meta.yaml +0 -0
  34. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/custom.css +0 -0
  35. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/favicon.ico +0 -0
  36. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/bokeh.gif +0 -0
  37. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/dask.gif +0 -0
  38. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/explorer.gif +0 -0
  39. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/geo.gif +0 -0
  40. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/geopandas.gif +0 -0
  41. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/intake.gif +0 -0
  42. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/interactive_hvplot.gif +0 -0
  43. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/interactive_pandas.gif +0 -0
  44. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/interactive_xarray.gif +0 -0
  45. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/large_data.gif +0 -0
  46. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/layout.gif +0 -0
  47. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/matplotlib.png +0 -0
  48. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/networkx.gif +0 -0
  49. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/overlay.png +0 -0
  50. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/pandas.gif +0 -0
  51. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/plotly.gif +0 -0
  52. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/widgets.gif +0 -0
  53. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/home/xarray.gif +0 -0
  54. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/images/heat_and_trees.png +0 -0
  55. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/images/portfolio.png +0 -0
  56. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/logo.png +0 -0
  57. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/logo_horizontal.svg +0 -0
  58. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/_static/logo_stacked.svg +0 -0
  59. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/about.md +0 -0
  60. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/assets/console.png +0 -0
  61. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/assets/console_server.gif +0 -0
  62. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/assets/diagram.png +0 -0
  63. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/assets/diagram.svg +0 -0
  64. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/assets/hvplot-wm.png +0 -0
  65. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/assets/streamz_demo.gif +0 -0
  66. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/conf.py +0 -0
  67. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/conftest.py +0 -0
  68. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/developer_guide/index.md +0 -0
  69. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/getting_started/explorer.ipynb +0 -0
  70. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/getting_started/hvplot.ipynb +0 -0
  71. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/getting_started/index.md +0 -0
  72. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/getting_started/installation.md +0 -0
  73. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/getting_started/interactive.ipynb +0 -0
  74. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/governance/project-docs/CONTRIBUTING.md +0 -0
  75. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/governance/project-docs/GOVERNANCE.md +0 -0
  76. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/governance/project-docs/LICENSE.md +0 -0
  77. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/governance/project-docs/MEMBERS.md +0 -0
  78. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/index.md +0 -0
  79. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/geopandas/points.ipynb +0 -0
  80. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/geopandas/polygons.ipynb +0 -0
  81. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/andrewscurves.ipynb +0 -0
  82. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/area.ipynb +0 -0
  83. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/bar.ipynb +0 -0
  84. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/barh.ipynb +0 -0
  85. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/bivariate.ipynb +0 -0
  86. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/box.ipynb +0 -0
  87. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/errorbars.ipynb +0 -0
  88. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/heatmap.ipynb +0 -0
  89. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/hexbin.ipynb +0 -0
  90. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/hist.ipynb +0 -0
  91. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/kde.ipynb +0 -0
  92. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/labels.ipynb +0 -0
  93. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/lagplot.ipynb +0 -0
  94. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/line.ipynb +0 -0
  95. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/ohlc.ipynb +0 -0
  96. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/parallelcoordinates.ipynb +0 -0
  97. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/paths.ipynb +0 -0
  98. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/scatter.ipynb +0 -0
  99. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/scattermatrix.ipynb +0 -0
  100. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/step.ipynb +0 -0
  101. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/table.ipynb +0 -0
  102. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/tabular/violin.ipynb +0 -0
  103. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/bar.ipynb +0 -0
  104. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/contour.ipynb +0 -0
  105. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/contourf.ipynb +0 -0
  106. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/hist.ipynb +0 -0
  107. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/image.ipynb +0 -0
  108. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/kde.ipynb +0 -0
  109. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/line.ipynb +0 -0
  110. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/quadmesh.ipynb +0 -0
  111. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/rgb.ipynb +0 -0
  112. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/vectorfield.ipynb +0 -0
  113. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/reference/xarray/violin.ipynb +0 -0
  114. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/releases.md +0 -0
  115. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/roadmap.md +0 -0
  116. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/topics.md +0 -0
  117. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Customization.ipynb +0 -0
  118. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Gridded_Data.ipynb +0 -0
  119. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Integrations.ipynb +0 -0
  120. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Interactive.ipynb +0 -0
  121. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Introduction.ipynb +0 -0
  122. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Large_Timeseries.ipynb +0 -0
  123. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Pandas_API.ipynb +0 -0
  124. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Plotting.ipynb +0 -0
  125. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Plotting_Extensions.ipynb +0 -0
  126. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Plotting_with_Matplotlib.ipynb +0 -0
  127. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Plotting_with_Plotly.ipynb +0 -0
  128. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Statistical_Plots.ipynb +0 -0
  129. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Streaming.ipynb +0 -0
  130. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Subplots.ipynb +0 -0
  131. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Timeseries_Data.ipynb +0 -0
  132. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Viewing.ipynb +0 -0
  133. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/Widgets.ipynb +0 -0
  134. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/images/simple.svg +0 -0
  135. {hvplot-0.11.1 → hvplot-0.11.2a1}/doc/user_guide/index.md +0 -0
  136. {hvplot-0.11.1 → hvplot-0.11.2a1}/envs/py3.10-tests.yaml +0 -0
  137. {hvplot-0.11.1 → hvplot-0.11.2a1}/envs/py3.11-docs.yaml +0 -0
  138. {hvplot-0.11.1 → hvplot-0.11.2a1}/envs/py3.11-tests.yaml +0 -0
  139. {hvplot-0.11.1 → hvplot-0.11.2a1}/envs/py3.12-tests.yaml +0 -0
  140. {hvplot-0.11.1 → hvplot-0.11.2a1}/envs/py3.9-tests.yaml +0 -0
  141. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/__init__.py +0 -0
  142. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/backend_transforms.py +0 -0
  143. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/cudf.py +0 -0
  144. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/dask.py +0 -0
  145. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/data/crime.csv +0 -0
  146. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/datasets.yaml +0 -0
  147. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/duckdb.py +0 -0
  148. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/fugue.py +0 -0
  149. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/ibis.py +0 -0
  150. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/intake.py +0 -0
  151. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/interactive.py +0 -0
  152. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/networkx.py +0 -0
  153. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/pandas.py +0 -0
  154. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/plotting/__init__.py +0 -0
  155. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/plotting/andrews_curves.py +0 -0
  156. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/plotting/core.py +0 -0
  157. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/plotting/lag_plot.py +0 -0
  158. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/plotting/parallel_coordinates.py +0 -0
  159. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/polars.py +0 -0
  160. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/sample_data.py +0 -0
  161. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/streamz.py +0 -0
  162. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/__init__.py +0 -0
  163. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/conftest.py +0 -0
  164. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/data/README.md +0 -0
  165. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/data/RGB-red.byte.tif +0 -0
  166. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/plotting/__init__.py +0 -0
  167. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/plotting/testcore.py +0 -0
  168. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/plotting/testohlc.py +0 -0
  169. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/plotting/testscattermatrix.py +0 -0
  170. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/test_links.py +0 -0
  171. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testbackend_transforms.py +0 -0
  172. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testfugue.py +0 -0
  173. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testgeo.py +0 -0
  174. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testgridplots.py +0 -0
  175. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testhelp.py +0 -0
  176. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testibis.py +0 -0
  177. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testinteractive.py +0 -0
  178. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testnetworkx.py +0 -0
  179. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testoperations.py +0 -0
  180. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testoptions.py +0 -0
  181. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testoverrides.py +0 -0
  182. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testpanel.py +0 -0
  183. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testpatch.py +0 -0
  184. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testplotting.py +0 -0
  185. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/teststatplots.py +0 -0
  186. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/teststreaming.py +0 -0
  187. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/testtransforms.py +0 -0
  188. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/tests/util.py +0 -0
  189. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/utilities.py +0 -0
  190. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot/xarray.py +0 -0
  191. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot.egg-info/SOURCES.txt +0 -0
  192. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot.egg-info/dependency_links.txt +0 -0
  193. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot.egg-info/entry_points.txt +0 -0
  194. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot.egg-info/requires.txt +0 -0
  195. {hvplot-0.11.1 → hvplot-0.11.2a1}/hvplot.egg-info/top_level.txt +0 -0
  196. {hvplot-0.11.1 → hvplot-0.11.2a1}/scripts/update_conda_envs.py +0 -0
  197. {hvplot-0.11.1 → hvplot-0.11.2a1}/setup.cfg +0 -0
@@ -150,7 +150,7 @@ jobs:
150
150
  matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
151
151
  defaults:
152
152
  run:
153
- shell: bash -l {0}
153
+ shell: bash -e {0}
154
154
  steps:
155
155
  - uses: actions/checkout@v4
156
156
  with:
@@ -159,9 +159,11 @@ jobs:
159
159
  with:
160
160
  python-version: ${{ matrix.python-version }}
161
161
  - name: install with geo
162
- run: pip install -v --prefer-binary -e '.[tests, examples-tests, geo, hvdev, hvdev-geo, dev-extras]'
163
- - name: pip list
164
- run: pip list
162
+ run: python -m pip install -v --prefer-binary -e '.[tests, examples-tests, geo, hvdev, hvdev-geo, dev-extras]'
163
+ - name: python version and pip list
164
+ run: |
165
+ python --version --version
166
+ python -m pip list
165
167
  - name: bokeh sampledata
166
168
  if: ${{ matrix.python-version == '3.9'}}
167
169
  run: bokeh sampledata
@@ -0,0 +1,41 @@
1
+ default_stages: [pre-commit]
2
+ repos:
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: v5.0.0
5
+ hooks:
6
+ - id: check-builtin-literals
7
+ - id: check-case-conflict
8
+ - id: check-docstring-first
9
+ - id: check-executables-have-shebangs
10
+ - id: check-toml
11
+ - id: detect-private-key
12
+ - id: end-of-file-fixer
13
+ exclude: (\.min\.js$|\.svg$)
14
+ - id: trailing-whitespace
15
+ - repo: https://github.com/astral-sh/ruff-pre-commit
16
+ rev: v0.7.2
17
+ hooks:
18
+ - id: ruff
19
+ - id: ruff-format
20
+ exclude: \.ipynb$
21
+ - repo: https://github.com/hoxbro/clean_notebook
22
+ rev: v0.1.15
23
+ hooks:
24
+ - id: clean-notebook
25
+ args: [-i, tags]
26
+ - repo: https://github.com/codespell-project/codespell
27
+ rev: v2.3.0
28
+ hooks:
29
+ - id: codespell
30
+ exclude: (\.min\.js$|\.svg$|\.html$)
31
+ additional_dependencies:
32
+ - tomli
33
+ - repo: local
34
+ hooks:
35
+ - id: update_conda_envs
36
+ name: Update conda envs
37
+ entry: python scripts/update_conda_envs.py
38
+ language: python
39
+ additional_dependencies: [pyproject2conda]
40
+ files: "(pyproject.toml|update_conda_envs)"
41
+ pass_filenames: false
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hvplot
3
- Version: 0.11.1
3
+ Version: 0.11.2a1
4
4
  Summary: A high-level plotting API for the PyData ecosystem built on HoloViews.
5
5
  Author-email: Philipp Rudiger <developers@holoviz.org>
6
6
  Maintainer-email: HoloViz developers <developers@holoviz.org>
@@ -50,7 +50,7 @@
50
50
  "id": "2f572b55-5002-4b81-9c92-6a2b56e2cde2",
51
51
  "metadata": {},
52
52
  "source": [
53
- "For an explorer to be displayed in a notebook you need to load the hvPlot extension, which happens automatically when you execute an import like `import hvplot.pandas`. You could also just run `hvplot.extension('bokeh')`. If instead of building Bokeh plots you would rather build Matplotlib or Plotly plots, simply execute once `hvplot.extension('matplotlib')` or `hvplot.extension('matplotlib')` before displaying the explorer."
53
+ "For an explorer to be displayed in a notebook you need to load the hvPlot extension, which happens automatically when you execute an import like `import hvplot.pandas`. You could also just run `hvplot.extension('bokeh')`. If instead of building Bokeh plots you would rather build Matplotlib or Plotly plots, simply execute once `hvplot.extension('matplotlib')` or `hvplot.extension('plotly')` before displaying the explorer."
54
54
  ]
55
55
  },
56
56
  {
@@ -60,7 +60,7 @@
60
60
  "source": [
61
61
  "## Tiled web map\n",
62
62
  "\n",
63
- "A [tiled web map](https://en.wikipedia.org/wiki/Tiled_web_map), or tile map, is an interactive map displayed on a web browser that is divided into small, pre-rendered image tiles, allowing for efficient loading and seamless navigation across various zoom levels and geographic areas. hvPlot allows to add a tile map as a basemap to a plot with the `tiles` parameter. Importantly, `tiles` is a parameter that can be used **without installing GeoViews**.\n",
63
+ "A [tiled web map](https://en.wikipedia.org/wiki/Tiled_web_map), or tile map, is an interactive map displayed on a web browser that is divided into small, pre-rendered image tiles, allowing for efficient loading and seamless navigation across various zoom levels and geographic areas. hvPlot allows us to add a tile map as a basemap to a plot with the `tiles` parameter. Importantly, `tiles` is a parameter that can be used **without installing GeoViews**.\n",
64
64
  "\n",
65
65
  "We'll display this dataframe of all US airports (including military bases overseas), the points are expressed in latitude/longitude coordinates:"
66
66
  ]
@@ -80,7 +80,7 @@
80
80
  "source": [
81
81
  "We'll first start by displaying the airports **without GeoViews** with tiles by setting `tiles=True`. \n",
82
82
  "\n",
83
- "Under the hood, hvPlot projects lat/lon to easting/northing ([EPSG:4326](https://epsg.io/4326) to [EPSG:3857](https://epsg.io/3857)) coordinates without additional package dependencies if it detects that the values falls within expected lat/lon ranges, **unless the data is lazily loaded (dask / ibis).**\n",
83
+ "Under the hood, hvPlot projects lat/lon to easting/northing ([EPSG:4326](https://epsg.io/4326) to [EPSG:3857](https://epsg.io/3857)) coordinates without additional package dependencies if it detects that the values falls within expected lat/lon ranges, **unless the data is lazily loaded (dask / ibis), or the data is a spatialpandas object.**\n",
84
84
  "\n",
85
85
  "Note, **this feature is only available after `hvplot>=0.11.0`**; older versions, `hvplot<0.11.0`, require manual projection (see below)."
86
86
  ]
@@ -270,10 +270,10 @@
270
270
  "\n",
271
271
  "print(\"radius: %d\" % nx.radius(G))\n",
272
272
  "print(\"diameter: %d\" % nx.diameter(G))\n",
273
- "print(\"eccentricity: %s\" % nx.eccentricity(G))\n",
274
- "print(\"center: %s\" % nx.center(G))\n",
275
- "print(\"periphery: %s\" % nx.periphery(G))\n",
276
- "print(\"density: %s\" % nx.density(G))\n",
273
+ "print(f\"eccentricity: {nx.eccentricity(G)}\")\n",
274
+ "print(f\"center: {nx.center(G)}\")\n",
275
+ "print(f\"periphery: {nx.periphery(G)}\")\n",
276
+ "print(f\"density: {nx.density(G)}\")\n",
277
277
  "\n",
278
278
  "hvnx.draw(G, with_labels=True)"
279
279
  ]
@@ -757,7 +757,7 @@
757
757
  " edge_width=5.0\n",
758
758
  " )\n",
759
759
  " other_edges.append(edge)\n",
760
- " plots.append((g*edges*hv.Overlay(other_edges)).relabel(\"p = %6.3f\" % (p)))\n",
760
+ " plots.append((g*edges*hv.Overlay(other_edges)).relabel(f\"p = {p:6.3f}\"))\n",
761
761
  "\n",
762
762
  "hv.Layout(plots).cols(2)"
763
763
  ]
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.11.1'
16
- __version_tuple__ = version_tuple = (0, 11, 1)
15
+ __version__ = version = '0.11.2a1'
16
+ __version_tuple__ = version_tuple = (0, 11, 2)
@@ -76,6 +76,8 @@ from .util import (
76
76
  process_derived_datetime_pandas,
77
77
  _convert_col_names_to_str,
78
78
  import_datashader,
79
+ import_geoviews,
80
+ is_mpl_cmap,
79
81
  )
80
82
  from .utilities import hvplot_extension
81
83
 
@@ -646,6 +648,10 @@ class HoloViewsConverter:
646
648
 
647
649
  self.dynamic = dynamic
648
650
  self.geo = any([geo, crs, global_extent, projection, project, coastline, features])
651
+ # Try importing geoviews if geo-features requested
652
+ if self.geo or self.datatype == 'geopandas':
653
+ import_geoviews()
654
+
649
655
  self.crs = self._process_crs(data, crs) if self.geo else None
650
656
  self.output_projection = self.crs
651
657
  self.project = project
@@ -655,17 +661,6 @@ class HoloViewsConverter:
655
661
  self.tiles_opts = tiles_opts or {}
656
662
  self.sort_date = sort_date
657
663
 
658
- # Import geoviews if geo-features requested
659
- if self.geo or self.datatype == 'geopandas':
660
- try:
661
- import geoviews # noqa
662
- except ImportError:
663
- raise ImportError(
664
- 'In order to use geo-related features '
665
- 'the geoviews library must be available. '
666
- 'It can be installed with:\n conda '
667
- 'install geoviews'
668
- )
669
664
  if self.geo:
670
665
  if self.kind not in self._geo_types:
671
666
  param.main.param.warning(
@@ -1420,7 +1415,7 @@ class HoloViewsConverter:
1420
1415
  valid_opts = []
1421
1416
 
1422
1417
  cmap_opts = ('cmap', 'colormap', 'color_key')
1423
- categories = [
1418
+ categorical_cmaps = [
1424
1419
  'accent',
1425
1420
  'category',
1426
1421
  'dark',
@@ -1485,7 +1480,13 @@ class HoloViewsConverter:
1485
1480
  if 'color' in style_opts:
1486
1481
  color = style_opts['color']
1487
1482
  elif not isinstance(cmap, dict):
1488
- if cmap and any(c in cmap for c in categories):
1483
+ # Checks if any of the categorical cmaps matches cmap;
1484
+ # uses any() instead of `cmap in categorical_cmaps` to handle reversed colormaps (suffixed with `_r`).
1485
+ # If cmap is LinearSegmentedColormap, get the name attr, else return the str typed cmap.
1486
+ if (isinstance(cmap, str) or is_mpl_cmap(cmap)) and any(
1487
+ categorical_cmap in getattr(cmap, 'name', cmap)
1488
+ for categorical_cmap in categorical_cmaps
1489
+ ):
1489
1490
  color = process_cmap(cmap or self._default_cmaps['categorical'], categorical=True)
1490
1491
  else:
1491
1492
  color = cmap
@@ -2170,12 +2171,13 @@ class HoloViewsConverter:
2170
2171
  elif not is_geodataframe(data) and (x is None or y is None):
2171
2172
  return data, x, y
2172
2173
 
2173
- if is_geodataframe(data):
2174
- if data.crs is not None:
2175
- data = data.to_crs(epsg=3857)
2176
- return data, x, y
2177
- elif not is_lazy_data(data):
2174
+ if is_lazy_data(data):
2178
2175
  # To prevent eager evaluation: https://github.com/holoviz/hvplot/pull/1432
2176
+ pass
2177
+ elif is_geodataframe(data):
2178
+ if getattr(data, 'crs', None) is not None:
2179
+ data = data.to_crs(epsg=3857)
2180
+ else:
2179
2181
  min_x = np.min(data[x])
2180
2182
  max_x = np.max(data[x])
2181
2183
  min_y = np.min(data[y])
@@ -2193,7 +2195,8 @@ class HoloViewsConverter:
2193
2195
  data[new_y] = northing
2194
2196
  if is_xarray(data):
2195
2197
  data = data.swap_dims({x: new_x, y: new_y})
2196
- return data, new_x, new_y
2198
+ x = new_x
2199
+ y = new_y
2197
2200
  return data, x, y
2198
2201
 
2199
2202
  def chart(self, element, x, y, data=None):
@@ -113,10 +113,11 @@ def scatter_matrix(
113
113
  raise ValueError('dynspread or spread need rasterize or datashade to be set to True.')
114
114
 
115
115
  if rasterize:
116
+ import datashader as ds
116
117
  import holoviews.operation.datashader as hd
117
118
 
118
119
  if dynspread or spread:
119
- if hd.ds_version < Version('0.12.0'):
120
+ if Version(ds.__version__) < Version('0.12.0'):
120
121
  raise RuntimeError(
121
122
  'Any version of datashader less than 0.12.0 does '
122
123
  'not support rasterize with dynspread or spread.'
@@ -606,3 +606,14 @@ class TestChart1DDask(TestChart1D):
606
606
 
607
607
  def test_table_multi_index_displayed(self):
608
608
  raise SkipTest('Dask does not support MultiIndex Dataframes.')
609
+
610
+
611
+ def test_cmap_LinearSegmentedColormap():
612
+ # test for https://github.com/holoviz/hvplot/pull/1461
613
+ xr = pytest.importorskip('xarray')
614
+ mpl = pytest.importorskip('matplotlib')
615
+ import hvplot.xarray # noqa
616
+
617
+ data = np.arange(25).reshape(5, 5)
618
+ xr_da = xr.DataArray(data)
619
+ xr_da.hvplot.image(cmap=mpl.colormaps['viridis'])
@@ -8,12 +8,19 @@ import numpy as np
8
8
  import pandas as pd
9
9
  import pytest
10
10
 
11
+ from hvplot.util import is_geodataframe
12
+
11
13
  try:
12
14
  import dask.dataframe as dd
13
15
  import hvplot.dask # noqa
14
16
  except ImportError:
15
17
  dd = None
16
18
 
19
+ try:
20
+ import spatialpandas as spd
21
+ except ModuleNotFoundError:
22
+ spd = None
23
+
17
24
 
18
25
  bk_renderer = hv.Store.renderers['bokeh']
19
26
 
@@ -83,3 +90,17 @@ class TestAnnotationNotGeo:
83
90
  assert isinstance(plot.get(0), hv.Tiles)
84
91
  bk_plot = bk_renderer.get_plot(plot)
85
92
  assert bk_plot.projection == 'mercator'
93
+
94
+ @pytest.mark.skipif(spd is None, reason='spatialpandas not installed')
95
+ def test_plot_without_crs(self):
96
+ square = spd.geometry.Polygon([(0.0, 0), (0, 1), (1, 1), (1, 0)])
97
+ sdf = spd.GeoDataFrame({'geometry': spd.GeoSeries([square, square]), 'name': ['A', 'B']})
98
+ plot = sdf.hvplot.polygons(tiles=True)
99
+
100
+ assert len(plot) == 2
101
+ assert is_geodataframe(sdf)
102
+ assert not hasattr(sdf, 'crs')
103
+ assert isinstance(plot.get(0), hv.Tiles)
104
+ assert isinstance(plot.get(1), hv.Polygons)
105
+ bk_plot = bk_renderer.get_plot(plot)
106
+ assert bk_plot.projection == 'mercator' # projection enabled due to `tiles=True`
@@ -1,5 +1,6 @@
1
1
  import re
2
2
  from textwrap import dedent
3
+ from unittest.mock import patch
3
4
 
4
5
  import numpy as np
5
6
  import holoviews as hv
@@ -415,3 +416,9 @@ def test_max_rows_sample():
415
416
  ui = hvplot.explorer(df, x='x', y='y', by=['#'], kind='scatter')
416
417
  assert len(ui._data) == MAX_ROWS
417
418
  assert not ui._data.equals(df.head(MAX_ROWS))
419
+
420
+
421
+ def test_explorer_geo_no_import_error_when_false():
422
+ da = ds_air_temperature['air'].isel(time=0)
423
+ with patch('hvplot.util.import_geoviews', return_value=None):
424
+ assert hvplot.explorer(da, x='lon', y='lat', geo=False)
@@ -18,6 +18,7 @@ from unittest import TestCase, SkipTest
18
18
 
19
19
  from hvplot.util import (
20
20
  check_crs,
21
+ import_geoviews,
21
22
  is_list_like,
22
23
  process_crs,
23
24
  process_xarray,
@@ -383,3 +384,8 @@ def test_is_geodataframe_spatialpandas_dask():
383
384
  def test_is_geodataframe_classic_dataframe():
384
385
  df = pd.DataFrame({'geometry': [None, None], 'name': ['A', 'B']})
385
386
  assert not is_geodataframe(df)
387
+
388
+
389
+ @pytest.mark.geo
390
+ def test_geoviews_is_available():
391
+ assert import_geoviews()
@@ -10,7 +10,7 @@ from panel.viewable import Viewer
10
10
 
11
11
  from .converter import HoloViewsConverter as _hvConverter
12
12
  from .plotting import hvPlot as _hvPlot
13
- from .util import is_geodataframe, is_xarray, instantiate_crs_str
13
+ from .util import is_geodataframe, is_xarray, instantiate_crs_str, import_geoviews
14
14
 
15
15
  # Defaults
16
16
  KINDS = {
@@ -361,17 +361,10 @@ class Geographic(Controls):
361
361
  _widgets_kwargs = {'geo': {'type': pn.widgets.Toggle}}
362
362
 
363
363
  def __init__(self, data, **params):
364
- gv_available = False
365
- try:
366
- import geoviews # noqa
367
-
368
- gv_available = True
369
- except ImportError:
370
- pass
371
-
372
364
  geo_params = GEO_KEYS + ['geo']
373
- if not gv_available and any(p in params for p in geo_params):
374
- raise ImportError('GeoViews must be installed to enable the geographic options.')
365
+ gv_available = None
366
+ if any(params.get(p) for p in geo_params):
367
+ gv_available = import_geoviews()
375
368
  super().__init__(data, **params)
376
369
  if not gv_available:
377
370
  for p in geo_params:
@@ -729,6 +729,18 @@ def import_datashader():
729
729
  return datashader
730
730
 
731
731
 
732
+ def import_geoviews():
733
+ geoviews = None
734
+ try:
735
+ import geoviews
736
+ except ModuleNotFoundError:
737
+ raise ModuleNotFoundError(
738
+ 'The `geoviews` package must be installed in order to use '
739
+ 'geographic features. Install it with pip or conda.'
740
+ ) from None
741
+ return geoviews
742
+
743
+
732
744
  def relabel(hv_obj, **kwargs):
733
745
  """Conditionally relabel a HoloViews object"""
734
746
  if kwargs:
@@ -750,3 +762,12 @@ def relabel_redim(hv_obj, relabel_kwargs, redim_kwargs):
750
762
  if redim_kwargs:
751
763
  hv_obj = hv_obj.redim(**redim_kwargs)
752
764
  return hv_obj
765
+
766
+
767
+ def is_mpl_cmap(obj):
768
+ """Check if the object is a Matplotlib LinearSegmentedColormap."""
769
+ if 'matplotlib' not in sys.modules:
770
+ return False
771
+ from matplotlib.colors import LinearSegmentedColormap
772
+
773
+ return isinstance(obj, LinearSegmentedColormap)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hvplot
3
- Version: 0.11.1
3
+ Version: 0.11.2a1
4
4
  Summary: A high-level plotting API for the PyData ecosystem built on HoloViews.
5
5
  Author-email: Philipp Rudiger <developers@holoviz.org>
6
6
  Maintainer-email: HoloViz developers <developers@holoviz.org>
@@ -196,7 +196,7 @@ filterwarnings = [
196
196
  ]
197
197
 
198
198
  [tool.codespell]
199
- ignore-words-list = "ser"
199
+ ignore-words-list = "ser,assertIn"
200
200
  skip = "doc/generate_modules.py"
201
201
  write-changes = true
202
202
 
@@ -211,12 +211,6 @@ extend-select = [
211
211
  [tool.ruff.format]
212
212
  quote-style = "single"
213
213
 
214
- [tool.nbqa.addopts]
215
- # E402 Module level import not at top of file
216
- ruff = [
217
- "--extend-ignore=E402"
218
- ]
219
-
220
214
  [tool.pyproject2conda.dependencies]
221
215
  geoviews = { skip = true, packages = "geoviews-core >=1.9.0" }
222
216
  # It should be ibis-framework[duckdb], but it works anyway.
@@ -1,48 +0,0 @@
1
- # This is the configuration for pre-commit, a local framework for managing pre-commit hooks
2
- # Check out the docs at: https://pre-commit.com/
3
-
4
- default_stages: [commit]
5
- repos:
6
- - repo: https://github.com/nbQA-dev/nbQA
7
- rev: 1.8.5
8
- hooks:
9
- - id: nbqa-ruff
10
- additional_dependencies: [ruff==0.3.7]
11
- - repo: https://github.com/pre-commit/pre-commit-hooks
12
- rev: v4.6.0
13
- hooks:
14
- - id: check-builtin-literals
15
- - id: check-case-conflict
16
- - id: check-docstring-first
17
- - id: check-executables-have-shebangs
18
- - id: check-toml
19
- - id: detect-private-key
20
- - id: end-of-file-fixer
21
- exclude: (\.min\.js$|\.svg$)
22
- - id: trailing-whitespace
23
- - repo: https://github.com/astral-sh/ruff-pre-commit
24
- rev: v0.3.7
25
- hooks:
26
- - id: ruff
27
- - id: ruff-format
28
- - repo: https://github.com/hoxbro/clean_notebook
29
- rev: v0.1.14
30
- hooks:
31
- - id: clean-notebook
32
- args: [-i, tags]
33
- - repo: https://github.com/codespell-project/codespell
34
- rev: v2.2.6
35
- hooks:
36
- - id: codespell
37
- exclude: (\.min\.js$|\.svg$|\.html$)
38
- additional_dependencies:
39
- - tomli
40
- - repo: local
41
- hooks:
42
- - id: update_conda_envs
43
- name: Update conda envs
44
- entry: python scripts/update_conda_envs.py
45
- language: python
46
- additional_dependencies: [pyproject2conda]
47
- files: '(pyproject.toml|update_conda_envs)'
48
- pass_filenames: false
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