The Computer Language
Benchmarks Game

spectral-norm Python 3 #5 program

source code

# The Computer Language Benchmarks Game
# https://salsa.debian.org/benchmarksgame-team/benchmarksgame/

# Contributed by Sebastien Loisel
# Fixed by Isaac Gouy
# Sped up by Josh Goldfoot
# Dirtily sped up by Simon Descarpentries
# Concurrency by Jason Stitt
# 2to3

from multiprocessing import Pool
from math            import sqrt

from sys             import argv

def eval_A (i, j):
    return 1.0 / ((i + j) * (i + j + 1) / 2 + i + 1)

def eval_A_times_u (u):
    args = ((i,u) for i in range(len(u)))
    return pool.map(part_A_times_u, args)

def eval_At_times_u (u):
    args = ((i,u) for i in range(len(u)))
    return pool.map(part_At_times_u, args)

def eval_AtA_times_u (u):
    return eval_At_times_u (eval_A_times_u (u))

def part_A_times_u(xxx_todo_changeme):
    (i,u) = xxx_todo_changeme
    partial_sum = 0
    for j, u_j in enumerate(u):
        partial_sum += eval_A (i, j) * u_j
    return partial_sum

def part_At_times_u(xxx_todo_changeme1):
    (i,u) = xxx_todo_changeme1
    partial_sum = 0
    for j, u_j in enumerate(u):
        partial_sum += eval_A (j, i) * u_j
    return partial_sum

def main():
    n = int(argv[1])
    u = [1] * n

    for dummy in range (10):
        v = eval_AtA_times_u (u)
        u = eval_AtA_times_u (v)

    vBv = vv = 0

    for ue, ve in zip (u, v):
        vBv += ue * ve
        vv  += ve * ve

    print("%0.9f" % (sqrt(vBv/vv)))

if __name__ == '__main__':
    pool = Pool(processes=4)
    main()
    
    

notes, command-line, and program output

NOTES:
64-bit Ubuntu quad core
Python 3.8.0


Tue, 15 Oct 2019 22:20:24 GMT

MAKE:
mv spectralnorm.python3-5.python3 spectralnorm.python3-5.py
pytype .
ninja: Entering directory `/home/dunham/benchmarksgame_quadcore/spectralnorm/tmp/.pytype'
[1/1] check spectralnorm.python3-5
FAILED: /home/dunham/benchmarksgame_quadcore/spectralnorm/tmp/.pytype/pyi/spectralnorm.python3-5.pyi 
pytype-single --imports_info /home/dunham/benchmarksgame_quadcore/spectralnorm/tmp/.pytype/imports/spectralnorm.python3-5.imports --module-name spectralnorm.python3-5 -V 3.8 -o /home/dunham/benchmarksgame_quadcore/spectralnorm/tmp/.pytype/pyi/spectralnorm.python3-5.pyi --analyze-annotated --nofail --quick /home/dunham/benchmarksgame_quadcore/spectralnorm/tmp/spectralnorm.python3-5.py
Python versions > 3.7 are not yet supported.
ninja: build stopped: subcommand failed.
Computing dependencies
Analyzing 1 sources with 0 local dependencies
make: [/home/dunham/8000-benchmarksgame/nanobench/makefiles/u64q.programs.Makefile:513: spectralnorm.python3-5.python3_run] Error 1 (ignored)

6.76s to complete and log all make actions

COMMAND LINE:
/opt/src/Python-3.8.0/bin/python3 -OO spectralnorm.python3-5.py 3000

TIMED OUT after 1200s


PROGRAM OUTPUT:
1.274224153