Skip to content

DOC/MAINT: Add copyright notice to qmc.primes_from_2_to#13927

Merged
rgommers merged 3 commits intoscipy:masterfrom
tupui:copyright
Apr 24, 2021
Merged

DOC/MAINT: Add copyright notice to qmc.primes_from_2_to#13927
rgommers merged 3 commits intoscipy:masterfrom
tupui:copyright

Conversation

@tupui
Copy link
Copy Markdown
Member

@tupui tupui commented Apr 23, 2021

The code from scipy.stats._qmc.from_2_to was taken from StackOverflow under a CC-BY-SA license. I contacted the author and got his permission to use his code under our 3-clause BSD license.

I also added a slight note in the licensing section of the doc about code from StackOverflow.

Raw Email
Delivered-To: roy.pamphile@gmail.com
Received: by 2002:a05:6a20:7915:b029:1b:369f:6ac3 with SMTP id
 b21csp639186pzg; Thu, 22 Apr 2021 23:01:35 -0700 (PDT)
X-Received: by 2002:a25:330a:: with SMTP id z10mr3155345ybz.123.1619157695681;
 Thu, 22 Apr 2021 23:01:35 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1619157695; cv=none; d=google.com;
 s=arc-20160816;
 b=TxyFVsldVHWUwTLrK9zXfWmNgYM0EOx25UPR/j7I9aiicQwO+RP+CWIV+A/PMrgAv+
 2gUDbBbj/reCXHWZKpHP9Ic4DdvEFNLOb1A0IokPFCn+kEhU2Z8AvxJ9phmOMgDuoRmt
 EHqmCXlYBcEH0ccrndoAZLyibCXzsrH3nkT69UatmhTc+sKTT+1pAV5SljviYwPPm2Zw
 +Emkj1Y19TXs8eMRi8qm9KpVvE36yM7gaFs02HntXvZ7GlYt6F1bhVW2RENeUPgids7M
 w402aRSpbcE4VY3rVnHX4lzxhNB+5JIjZL+fGyMgIWymjiAKVumY2T/l10L52MkWhV6h mz+A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;
 s=arc-20160816;
 h=to:subject:message-id:date:from:in-reply-to:references:mime-version
 :dkim-signature; bh=pU1MkLXxcMkBqel9cHuxgcXAcW5Kc2eKQFyAlT6TWVw=;
 b=xG6msD6qoY07roIltBU9BDw7GSgRJUITGOOav7moDGUsfVOZu2/2pWQqDss8SEUeT0
 0JYZvWMNDUV3Y4MUFjlrHPQXDILss3ee5ygi+RLlJt3hyhud/t9CvdVx/U+Xu1evYdKy
 fXbPTTtMbp1lz9oN7kkERx68ULSIRwBW/nOKO5MPsGvxHDqg2CMqP42RQ8NWGXxyoUYP
 33yhxy+E3gstR9nyicXjsKAb+1AbCgnjxBWfGj8JFLFONZsd7RUtPrieTum9UWY41DO9
 VMzEIjCjGasPWGjDoUMFreZvENsXrL2xDZ8/l5mrDsIvEP0XE0jka508h+zfvGCCJMjs pa2Q==
ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com
 header.s=20161025 header.b=QjTE9+3D; spf=pass (google.com: domain of
 astroultraman@gmail.com designates 209.85.220.41 as permitted sender)
 smtp.mailfrom=astroultraman@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE
 dis=NONE) header.from=gmail.com
Return-Path: <astroultraman@gmail.com>
Received: from mail-sor-f41.google.com (mail-sor-f41.google.com.
 [209.85.220.41]) by mx.google.com with SMTPS id
 n140sor2657687yba.38.2021.04.22.23.01.35 for <roy.pamphile@gmail.com> (Google
 Transport Security); Thu, 22 Apr 2021 23:01:35 -0700 (PDT)
Received-SPF: pass (google.com: domain of astroultraman@gmail.com designates
 209.85.220.41 as permitted sender) client-ip=209.85.220.41;
Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com
 header.s=20161025 header.b=QjTE9+3D; spf=pass (google.com: domain of
 astroultraman@gmail.com designates 209.85.220.41 as permitted sender)
 smtp.mailfrom=astroultraman@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE
 dis=NONE) header.from=gmail.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to;
 bh=pU1MkLXxcMkBqel9cHuxgcXAcW5Kc2eKQFyAlT6TWVw=;
 b=QjTE9+3D1MJmFZbdfEmZsNXxeBxHbTXh5XANW/2O64OTUBmedYau+VPiVn2mNXw8ir
 DcHXs1y0pSTNEDf2y40txfQ/3gsnD9FOszcNvUt+wVB0wqCACCmb7ONPmuUhjg/O/tFl
 49iMVaLler3gtNxBuVf7xsllkFgiy6vglF5pcvCRTM6b1xtup1QzDn/pU80sjWOHDuge
 Xw3/G1ZjvLU88n9ok41AkXn44K0WtsDq0xDm+E4V3yODsMD3WROolbGzx8hw8XZZg3Q2
 9O9T6EbAWwfVOjWufQA+8nInl3BAb/ILunJy+UAbuq44Lr9/qThEVSH5FA47R6CqfWbr SnYA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net;
 s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to; bh=pU1MkLXxcMkBqel9cHuxgcXAcW5Kc2eKQFyAlT6TWVw=;
 b=m5XpTDe6jaN9Dl2yXJe5nJO9xazvwf5K0pVU+yI4h5wg+AxrlbMb8uCc8aDxpKIZJ2
 fo9DB/QbivkxVGCe3IyNWYxmYMXQOFVI+Q71e91mxGowr7H8f1IwZtwksvVddwNdptIE
 Bi9ij5UWEYO2frDZpPpmt522WHUeqksh/xolUQuKd7s47GXS/TovG2cvVQzMQB+7XmXy
 4HIKtg0kfojZSGL/5Tlf2ydo6dFLXA0ivbwKrNKXMcJgNKHRYOLDvuNAwCqkE9xB0+ii
 pT/i9oXDc/58gC/iiflSSU6zls+aqRel++Hp0xsxZXlQnoTQNdK04fqXC7AhhNvn6kp+ 21xg==
X-Gm-Message-State: AOAM533Ev/J4EWfIcfprWtVC0Vl0vGL7osMciwR80h6Zj3KJMCfz5mrL
 y5NVkX153QluJi5LtZHWetMfJci08SNCjU5B3kXl+3pQidg=
X-Google-Smtp-Source: ABdhPJwfkW0yZO1o1Oh9PgfEJ4isGJd64XKmkPa3t0bnGcRZAYfQp3YUjL4V86gtYmoi55U0jwP2iCjSn49yvOPQTEo=
X-Received: by 2002:a25:a2cf:: with SMTP id c15mr3203942ybn.318.1619157693387;
 Thu, 22 Apr 2021 23:01:33 -0700 (PDT)
MIME-Version: 1.0
References: <F25F3986-B3DA-47EB-B15C-DEA10B372DD5@gmail.com>
In-Reply-To: <F25F3986-B3DA-47EB-B15C-DEA10B372DD5@gmail.com>
From: Bruno Astrolino <astroultraman@gmail.com>
Date: Fri, 23 Apr 2021 02:01:21 -0400
Message-ID: <CABJ2WiUAwmqTTR6yy7r5yH49WYVuC8r-UGb9N67x_HaVp4seyA@mail.gmail.com>
Subject: Re: Relicensing sieve code to SciPy
To: Pamphile Roy <roy.pamphile@gmail.com>
Content-Type: multipart/alternative; boundary="00000000000026589c05c09d87bc"

--00000000000026589c05c09d87bc
Content-Type: text/plain; charset="UTF-8"

Hy my name is Bruno Astrolino and that's my original code, fell free to use
as you like. I am glad to help.

On Thu, Apr 22, 2021, 11:37 Pamphile Roy <roy.pamphile@gmail.com> wrote:

> Hi,
>
> I am a SciPy core developer and we would like to use a solution you posted
> on StackOverflow to compute prime numbers:
>
> https://stackoverflow.com/a/3035188/6522112
>
> def primes_from_2_to(n):
>     sieve = np.ones(n // 3 + (n % 6 == 2), dtype=bool)
>     for i in range(1, int(n ** 0.5) // 3 + 1):
>         k = 3 * i + 1 | 1
>         sieve[k * k // 3::2 * k] = False
>         sieve[k * (k - 2 * (i & 1) + 4) // 3::2 * k] = False
>     return np.r_[2, 3, ((3 * np.nonzero(sieve)[0][1:] + 1) | 1)]
>
>
> Provided you are the original author of this code, could you allow us to
> use this in SciPy (which is BSD 3 clause), just a positive reply to this
> email would be enough.
> If you are not the author and owner of the copyright, could you point me
> to the original author?
>
> Thanks in advance for your help and support to SciPy.
>
>
> Sincerely,
>
> Pamphile Roy
> @tupui
>
>

--00000000000026589c05c09d87bc
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">Hy my name is Bruno Astrolino and that&#39;s my original =
code, fell free to use as you like. I am glad to help.</div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, Apr 22, 2021=
, 11:37 Pamphile Roy &lt;<a href=3D"mailto:roy.pamphile@gmail.com">roy.pamp=
hile@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" st=
yle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div =
style=3D"word-wrap:break-word;line-break:after-white-space"><div>Hi,</div><=
div><br></div><div>I am a SciPy core developer and we would like to use a s=
olution you posted on StackOverflow to compute prime numbers:</div><div><br=
></div><div><a href=3D"https://stackoverflow.com/a/3035188/6522112" target=
=3D"_blank" rel=3D"noreferrer">https://stackoverflow.com/a/3035188/6522112<=
/a></div><div><br></div><div><pre style=3D"background-color:#ffffff;color:#=
333333;font-family:&#39;Dank Mono&#39;,monospace;font-size:11,3pt"><span st=
yle=3D"color:#a71d5d">def </span><span style=3D"color:#795da3">primes_from_=
2_to</span><span style=3D"color:#63a35c">(</span><span style=3D"color:#0086=
b3">n</span><span style=3D"color:#63a35c">)</span><span style=3D"color:#a71=
d5d">:</span><span style=3D"color:#969896;font-style:italic"><br></span><sp=
an style=3D"color:#969896;font-style:italic">    </span>sieve <span style=
=3D"color:#a71d5d">=3D </span>np<span style=3D"color:#63a35c">.</span><span=
 style=3D"color:#0086b3">ones</span><span style=3D"color:#63a35c">(</span><=
span style=3D"color:#0086b3">n </span><span style=3D"color:#a71d5d">// </sp=
an><span style=3D"color:#0086b3">3 </span><span style=3D"color:#a71d5d">+ <=
/span><span style=3D"color:#63a35c">(</span><span style=3D"color:#0086b3">n=
 </span><span style=3D"color:#a71d5d">% </span><span style=3D"color:#0086b3=
">6 </span><span style=3D"color:#a71d5d">=3D=3D </span><span style=3D"color=
:#0086b3">2</span><span style=3D"color:#63a35c">), </span><span style=3D"co=
lor:#0086b3">dtype</span><span style=3D"color:#a71d5d">=3D</span><span styl=
e=3D"color:#0086b3">bool</span><span style=3D"color:#63a35c">)<br></span><s=
pan style=3D"color:#63a35c">    </span><span style=3D"color:#a71d5d">for </=
span>i <span style=3D"color:#a71d5d">in </span><span style=3D"color:#0086b3=
">range</span><span style=3D"color:#63a35c">(</span><span style=3D"color:#0=
086b3">1</span><span style=3D"color:#63a35c">, </span><span style=3D"color:=
#0086b3">int</span><span style=3D"color:#63a35c">(</span><span style=3D"col=
or:#0086b3">n </span><span style=3D"color:#a71d5d">** </span><span style=3D=
"color:#0086b3">0.5</span><span style=3D"color:#63a35c">) </span><span styl=
e=3D"color:#a71d5d">// </span><span style=3D"color:#0086b3">3 </span><span =
style=3D"color:#a71d5d">+ </span><span style=3D"color:#0086b3">1</span><spa=
n style=3D"color:#63a35c">)</span><span style=3D"color:#a71d5d">:<br></span=
><span style=3D"color:#a71d5d">        </span>k <span style=3D"color:#a71d5=
d">=3D </span><span style=3D"color:#0086b3">3 </span><span style=3D"color:#=
a71d5d">* </span>i <span style=3D"color:#a71d5d">+ </span><span style=3D"co=
lor:#0086b3">1 </span><span style=3D"color:#a71d5d">| </span><span style=3D=
"color:#0086b3">1<br></span><span style=3D"color:#0086b3">        </span>si=
eve<span style=3D"color:#63a35c">[</span>k <span style=3D"color:#a71d5d">* =
</span>k <span style=3D"color:#a71d5d">// </span><span style=3D"color:#0086=
b3">3</span><span style=3D"color:#a71d5d">::</span><span style=3D"color:#00=
86b3">2 </span><span style=3D"color:#a71d5d">* </span>k<span style=3D"color=
:#63a35c">] </span><span style=3D"color:#a71d5d">=3D False<br></span><span =
style=3D"color:#a71d5d">        </span>sieve<span style=3D"color:#63a35c">[=
</span>k <span style=3D"color:#a71d5d">* </span><span style=3D"color:#63a35=
c">(</span>k <span style=3D"color:#a71d5d">- </span><span style=3D"color:#0=
086b3">2 </span><span style=3D"color:#a71d5d">* </span><span style=3D"color=
:#63a35c">(</span>i <span style=3D"color:#a71d5d">&amp; </span><span style=
=3D"color:#0086b3">1</span><span style=3D"color:#63a35c">) </span><span sty=
le=3D"color:#a71d5d">+ </span><span style=3D"color:#0086b3">4</span><span s=
tyle=3D"color:#63a35c">) </span><span style=3D"color:#a71d5d">// </span><sp=
an style=3D"color:#0086b3">3</span><span style=3D"color:#a71d5d">::</span><=
span style=3D"color:#0086b3">2 </span><span style=3D"color:#a71d5d">* </spa=
n>k<span style=3D"color:#63a35c">] </span><span style=3D"color:#a71d5d">=3D=
 False<br></span><span style=3D"color:#a71d5d">    return </span>np<span st=
yle=3D"color:#63a35c">.</span>r_<span style=3D"color:#63a35c">[</span><span=
 style=3D"color:#0086b3">2</span><span style=3D"color:#63a35c">, </span><sp=
an style=3D"color:#0086b3">3</span><span style=3D"color:#63a35c">, ((</span=
><span style=3D"color:#0086b3">3 </span><span style=3D"color:#a71d5d">* </s=
pan>np<span style=3D"color:#63a35c">.</span><span style=3D"color:#0086b3">n=
onzero</span><span style=3D"color:#63a35c">(</span>sieve<span style=3D"colo=
r:#63a35c">)[</span><span style=3D"color:#0086b3">0</span><span style=3D"co=
lor:#63a35c">][</span><span style=3D"color:#0086b3">1</span><span style=3D"=
color:#a71d5d">:</span><span style=3D"color:#63a35c">] </span><span style=
=3D"color:#a71d5d">+ </span><span style=3D"color:#0086b3">1</span><span sty=
le=3D"color:#63a35c">) </span><span style=3D"color:#a71d5d">| </span><span =
style=3D"color:#0086b3">1</span><span style=3D"color:#63a35c">)]</span></pr=
e><div><br></div></div><div>Provided you are the original author of this co=
de, could you allow us to use this in SciPy (which is BSD 3 clause), just a=
 positive reply to this email would be enough.</div><div>If you are not the=
 author and owner of the copyright, could you point me to the original auth=
or?</div><div><br></div><div>Thanks in advance for your help and support to=
 SciPy.</div><div><br></div><div><br></div><div>Sincerely,</div><div><br></=
div><div>Pamphile Roy</div><div>@tupui</div><div><br></div></div></blockquo=
te></div>

--00000000000026589c05c09d87bc--

@tupui tupui added Documentation Issues related to the SciPy documentation. Also check https://github.com/scipy/scipy.org maintenance Items related to regular maintenance tasks labels Apr 23, 2021
@tupui tupui added this to the 1.7.0 milestone Apr 23, 2021
@tupui tupui requested a review from rgommers April 23, 2021 09:01
@tupui tupui self-assigned this Apr 23, 2021
Comment thread doc/source/dev/core-dev/licensing.rst.inc
@ilayn
Copy link
Copy Markdown
Member

ilayn commented Apr 23, 2021

Not to steal any credit, (the core is left intact) but because previously having bitten by it, r_ is often slower than allocating array directly for some reason I don't know.

def primesfrom2to(n):
    """ Input n>=6, Returns a array of primes, 2 <= p < n """
    sieve = np.ones(n//3 + (n % 6 == 2), dtype=bool)
    for i in range(1, int(sqrt(n))//3+1):
        if sieve[i]:
            k = 3*i+1 | 1
            sieve[k*k//3::2*k] = False
            sieve[k*(k-2*(i & 1)+4)//3::2*k] = False
    t = (3*np.nonzero(sieve)[0][1:]+1) | 1
    res = np.empty(len(t)+2, dtype=int)
    res[:2] = [2, 3]
    res[2:] = t
    return res

There are some more places to gain some more speed with bit manipulations etc. but I don't think it's worth it to klingonize it.

@tupui
Copy link
Copy Markdown
Member Author

tupui commented Apr 23, 2021

@ilayn Great if you can improve it. I thing though it should be another PR. Here it's just about properly crediting something I copied.

But feel free to commit on the branch.

If you would rewrite it, I would also propose to add a method parameter as to propose things like sieve of Atkin. And as the current implementation is quite fast, it would make then sense to go to compiled code.

Copy link
Copy Markdown
Member

@rgommers rgommers left a comment

Choose a reason for hiding this comment

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

LGTM, thanks @tupui. And thanks @rkern for the licensing expertise!

@rgommers rgommers merged commit 6b07604 into scipy:master Apr 24, 2021
@tupui tupui deleted the copyright branch April 24, 2021 14:04
patnr added a commit to patnr/scipy that referenced this pull request May 3, 2021
* master: (164 commits)
  DOC: Add Karl Pearson's reference to chi-square test (scipy#13971)
  BLD: fix build warnings for causal/anticausal pointers in ndimage
  MAINT: stats: Fix unused imports and a few other issues related to imports.
  DOC: fix typo
  MAINT: Remove duplicate calculations in sokalmichener
  BUG: spatial: fix weight handling of `distance.sokalmichener`.
  DOC: update Readme (scipy#13910)
  MAINT: QMCEngine d input validation (scipy#13940)
  MAINT: forward port 1.6.3 relnotes
  REL: add PEP 621 (project metadata in pyproject.toml) support
  EHN: signal: make `get_window` supports `general_cosine` and `general_hamming` window functions. (scipy#13934)
  ENH/DOC: pydata sphinx theme polishing (scipy#13814)
  DOC/MAINT: Add copyright notice to qmc.primes_from_2_to (scipy#13927)
  BUG: DOC: signal: fix need argument config and add missing doc link for `signal.get_window`
  DOC: fix subsets docstring (scipy#13926)
  BUG: signal: fix get_window argument handling and add tests. (scipy#13879)
  ENH: stats: add 'alternative' parameter to ansari (scipy#13650)
  BUG: Reactivate conda environment in init
  MAINT: use dict built-in rather than OrderedDict
  Revert "CI: Add nightly release of NumPy in linux workflows (scipy#13876)" (scipy#13909)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Documentation Issues related to the SciPy documentation. Also check https://github.com/scipy/scipy.org maintenance Items related to regular maintenance tasks

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants