nbconvert does *not* work as an "all builds and no interactive uses go through here" point - the dependency tree is

nbsphinx*             jupyter-nbconvert*
(Sphinx extension)    (script)
          |          /
     nbconvert*     /       ipython-directive
     (Python library)    /  (Sphinx extension)
                 |      /
                ipython
                   |
                 python

Standalone .ipynb files enter at one of the points marked *, so go through nbconvert, but ipython:: sections in Sphinx files enter at ipython-directive. Hence, if we want it in one place and to apply to builds not interactive use, that place will need to check whether an intended-as-reproducible build is currently in progress, e.g. via SOURCE_DATE_EPOCH.

Disabling the address output at source would be in Python itself (object.__repr__). A post-processor to remove them could instead be in ipython.

Santiago Torres Arias wrote:
https://github.com/sphinx-doc/sphinx/pull/3897

That's the issue that not all address output is from object.__repr__: some is from objects with their own address-including __repr__ or __str__, and may be in a different format.

This may be a reason to prefer a post-processor over a direct object.__repr__ replacement, though as noted in the link, that still won't work on nonstandard-format address output without risking false positives.

Daniel Shahaf wrote:
it would invalidate documentation that relies on
the hex addresses to demonstrate object identity.

If we want to keep this and get reproducibility, we could use a post-processor that replaces addresses by numbers assigned in the order they first appear in the document:

addresses_already_seen={}
next_address=16**2 # 0x100
for a in re.finditer(' at 0x[0-9a-f]+>',document):
    if a in addresses_already_seen:
        #replace a by addresses_already_seen[a]
    else:
        #replace a by next_address
        addresses_already_seen[a] = next_address
        next_address = next_address + 16**2

(This could in theory be an object.__repr__ replacement instead, but I suspect it's too much to be appropriate to do in such a low-level place.)

_______________________________________________
[email protected] mailing list

To change your subscription options, visit 
https://lists.reproducible-builds.org/listinfo/rb-general.

To unsubscribe, send an email to 
[email protected].

Reply via email to