From: Kyle Meyer <kyle@kyleam.com>
To: "Ludovic Courtès" <ludovic.courtes@inria.fr>
Cc: 50672@debbugs.gnu.org
Subject: bug#50672: nnpack is not reproducible
Date: Fri, 22 Oct 2021 23:32:50 -0400 [thread overview]
Message-ID: <87ee8ch0v1.fsf@kyleam.com> (raw)
In-Reply-To: <87pmrxt6tf.fsf_-_@gnu.org>
Ludovic Courtès writes:
> For the record, I tried the attached patch in an attempt to sort things
> as discussed in the issue above, but it doesn’t have the intended
> effect. There must be other unsorted dictionaries elsewhere.
Hmm, I don't think dictionaries are a likely culprit here because
Python's dict implementation preserves the insertion order as of Python
v3.6 (and that behavior is declared as part of the language spec with
v3.7).
> diff --git a/peachpy/name.py b/peachpy/name.py
> index b6a03dc..c069fc2 100644
> --- a/peachpy/name.py
> +++ b/peachpy/name.py
> @@ -95,6 +95,10 @@ class Namespace:
> self.prenames[scope_name.prename].add(scope)
>
> def assign_names(self):
> + # Step 0: sort the dictionary for deterministic output
> + self.prenames = dict(sorted(self.prenames.items(),
> + key=lambda item: "" if item[0] == None else item[0]))
> +
In cases where the order of the keys isn't specified (i.e. Python 3.5
and below), I think the end result after your change is the same: it
creates a new dictionary for sorted _input_, but things won't
necessarily come out in the same order.
I'm not familiar with PeachPy, but taking a peek at name.py, the sets
used for the values of the prenames dictionary could be the problem.
And if that's the case, one solution would be switching those values
from sets to dictionaries.
With the change below (on top of PeachPy's 257881e), nnpack builds
reliably for me across a couple of attempts:
$ guix-dev build --with-git-url=python-peachpy=$local --no-grafts --check nnpack
successfully built /gnu/store/7z4nl55gssrf9na7wsvmw1dsqgawnj2p-nnpack-0.0-1.c07e3a0.drv
successfully built /gnu/store/7z4nl55gssrf9na7wsvmw1dsqgawnj2p-nnpack-0.0-1.c07e3a0.drv
/gnu/store/4ihjil42fbk53q73gpvdakynbv9q5q09-nnpack-0.0-1.c07e3a0
diff --git a/peachpy/name.py b/peachpy/name.py
index b6a03dc..412079d 100644
--- a/peachpy/name.py
+++ b/peachpy/name.py
@@ -86,13 +86,13 @@ def add_scoped_name(self, scoped_name):
self.names[scope_name.name] = scope
else:
assert scope_name.name is None
- self.prenames.setdefault(scope_name.prename, set())
+ self.prenames.setdefault(scope_name.prename, {})
if subscoped_name:
for subscope in iter(self.prenames[scope_name.prename]):
if isinstance(subscope, Namespace) and subscope.scope_name is scope_name:
subscope.add_scoped_name(subscoped_name)
return
- self.prenames[scope_name.prename].add(scope)
+ self.prenames[scope_name.prename][scope] = None
def assign_names(self):
# Step 1: assign names to symbols with prenames with no conflicts
next prev parent reply other threads:[~2021-10-23 3:34 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-19 9:57 bug#50672: python-pytorch is not reproducible Ludovic Courtès
2021-09-21 15:17 ` Ludovic Courtès
2021-09-24 14:04 ` Ludovic Courtès
2021-09-27 13:25 ` zimoun
2021-09-28 9:24 ` Ludovic Courtès
2021-10-22 15:31 ` bug#50672: nnpack " Ludovic Courtès
2021-10-23 3:32 ` Kyle Meyer [this message]
2021-10-25 12:54 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ee8ch0v1.fsf@kyleam.com \
--to=kyle@kyleam.com \
--cc=50672@debbugs.gnu.org \
--cc=ludovic.courtes@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.