all messages for Guix-related lists mirrored at yhetil.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

* 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.