unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
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




  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

  List information: https://guix.gnu.org/

* 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 public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).