Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sphinx-codeautolink improvements #281

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

scottyhq
Copy link
Contributor

@scottyhq scottyhq commented Jul 1, 2024

Based on discussion in #82

  • adds underlines to linked code docs
  • does some mapping to xarray api

Lots of warnings! Would need to add lots of manual mappings for completeness... and even then it doesn't pick up things like da.resample and da.isel below because it doesn't realize that da is a DataAarray:

da = xr.tutorial.load_dataset("air_temperature", engine="netcdf4").air
monthly = da.resample(time="ME").mean()
data = da.isel(time=0)

Even so, I think the underline and hover color are nice additions

Copy link

github-actions bot commented Jul 1, 2024

🎊 PR Preview 2e3e0f5 has been successfully built and deployed to https://xarray-contrib-xarray-tutorial-preview-pr-281.surge.sh

🕐 Build time: 0.01s

🤖 By surge-preview

Copy link

Check out this pull request on  ReviewNB

See visual diffs & provide feedback on Jupyter Notebooks.


Powered by ReviewNB

Comment on lines +81 to +87
codeautolink_inventory_map: {
# unfortunately mapping the top level doesn't work, need all methods
#"xarray.core.dataarray.DataArray": "xarray.DataArray",
"xarray.core.accessor_dt.DatetimeAccessor": "xarray.DataArray.dt",
"xarray.core.dataarray.DataArray.coarsen": "xarray.DataArray.coarsen",
"xarray.core.dataarray.DataArray.groupby": "xarray.DataArray.groupby",
"xarray.core.dataarray.DataArray.groupby_bins": "xarray.DataArray.groupby_bins",
Copy link
Contributor Author

@scottyhq scottyhq Jul 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@felix-hilden, I realize this issue (felix-hilden/sphinx-codeautolink#131 (comment) ) has been closed for a while, but curious based on your comment if it does seems straightforward to implement a simplification of ("xarray.core.dataarray.DataArray": "xarray.DataArray") to avoid having to enumerate every method?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would setting __module__ fix this? (pydata/xarray#4279)

Copy link
Contributor Author

@scottyhq scottyhq Jul 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on the above issue, if I add

import xarray 
xarray.DataArray.__module__ = "xarray"

to conf.py before building I'm getting Handler <bound method SphinxCodeAutoLink.create_references of <sphinx_codeautolink.extension.SphinxCodeAutoLink object at 0x145730710>> for event 'env-updated' threw an exception (exception: maximum recursion depth exceeded) ...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you try adding it to xarrays init.py?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi! Yeah I'm not at all opposed to having the feature that was discussed in the issue, I've just been out of the game for a while focusing on other things and I have personally no need for that. But I'm very open to contributions 👌

Personally I've opted for changing module attributes like so and it's worked well for me.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually it does look like chaning either conf.py or xarray/__init__.py works, I think the recursion error was coming from some issue with my local settings/cache...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kind of a pain to modify conf.py via jupyter book (jupyter-book/jupyter-book#858,
jupyter-book/jupyter-book#1673 (comment)) but that is probably the way to go...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's do it upstream? I think we'd like this in Xarray too.

Comment on lines +5 to +15
.sphinx-codeautolink-a:link {
border-bottom-color: lightgray;
border-bottom-style: dotted;
border-bottom-width: 1px;
}

.sphinx-codeautolink-a:hover {
border-bottom-color: rgb(255, 139, 139);
border-bottom-style: dotted;
border-bottom-width: 1px;
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dcherian @zmoon I think a subtle dotted underline is nice, personally I think the thick underlines (https://scikit-image.org/docs/stable/auto_examples/segmentation/plot_regionprops.html) are a bit distracting and distinct from the jupyterlab experience, but open to other opinions!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I concur!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A little darker would be nicer to me. It's also convention that solid lines are clickable links, so perhaps just a thin darker line?

@@ -141,13 +138,26 @@
},
"outputs": [],
"source": [
"da: xr.DataArray = xr.tutorial.load_dataset(\"air_temperature\", engine=\"netcdf4\").air\n",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need a type hint on da in order for subsequent methods to be picked up (da.resample). Also, if chaining methods only the first is picked up da.isel(time=0).plot() links to isel but not plot

Copy link
Contributor Author

@scottyhq scottyhq Jul 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Opened discussion for clarification on this felix-hilden/sphinx-codeautolink#146.

Edit: method chaining links would need some work felix-hilden/sphinx-codeautolink#147

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants