Module sortedness.wtau
README
Building: CYTHONIZE=1 ; poetry run cythonize -a -i ./src/sortedness/wtau/wtau.pyx
Expand source code
#  Copyright (c) 2023. Davi Pereira dos Santos
#  This file is part of the sortedness project.
#  Please respect the license - more about this in the section (*) below.
#
#  sortedness is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  sortedness is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with sortedness.  If not, see <http://www.gnu.org/licenses/>.
#
#  (*) Removing authorship by any means, e.g. by distribution of derived
#  works or verbatim, obfuscated, compiled or rewritten versions of any
#  part of this work is illegal and it is unethical regarding the effort and
#  time spent here.
#
"""
README
======
Building:
CYTHONIZE=1 ; poetry run cythonize -a -i ./src/sortedness/wtau/wtau.pyx
"""
from itertools import repeat, tee
import pathos.multiprocessing as mp
from numpy import lexsort, array, empty
def parwtau(scoresX, scoresX_, npoints, R=True, parallel=True, **kwargs):
    """**kwargs is for ProcessingPool, e.g.: npcus=8"""
    npositions = len(scoresX)
    if len(scoresX.shape) != 2:
        lex = lexsort((scoresX_, scoresX))
        perms_source = (lex.copy() for i in range(npoints))
    # else:
    #     perms_source = (lexsort((scoresX_[i], scoresX[i])) for i in range(npoints))
    perms, perms_for_r = tee(perms_source)
    add = R is True
    def genR(perms_gen, scores):
        for i in range(npoints):
            # print("s", i)
            p = next(perms_gen)
            # if R is True or R is None:
            #     r = p.copy()
            #     # print(r)
            #     _invert_in_place(r)
            if R is not False:
                r = R[:, i]
            # else:
            #     r = arange(npositions, dtype=intp)
            yield r
    exchanges_weights = (array([0.0]) for i in range(npoints))
    temps = (empty(npositions, dtype=int) for i in range(npoints))
    pmap = mp.ProcessingPool(**kwargs).imap if parallel else map
    if not add:
        jobs = repeat(scoresX), repeat(scoresX_), genR(perms_for_r, scoresX), repeat(npositions), perms, exchanges_weights, temps
        from .wtau import _weightedrankedtau  # Source wtau.pyx becomes wtau.c and shared so
        return array(list(pmap(_weightedrankedtau, *jobs)))
    # def f(scoresX, scoresX_, rank, rank_, perm, perm_, exchanges_weight, temp):
    #     return (_weightedrankedtau(scoresX, scoresX_, rank, npositions, perm, exchanges_weight, temp) +
    #             _weightedrankedtau(scoresX_, scoresX, rank_, npositions, perm_, exchanges_weight, temp)) / 2
    #
    # scores = lambda M: (M[i] for i in range(npoints))
    # if len(scoresX_.shape) == 2:
    #     perms_source_ = (lexsort((scoresX[i], scoresX_[i])).copy() for i in range(npoints))
    # else:
    #     lex = lexsort((scoresX, scoresX_))
    #     perms_source_ = (lex.copy() for i in range(npoints))
    # perms_, perms_for_r_ = tee(perms_source_)
    # jobs = scores(scoresX), scores(scoresX_), genR(perms_for_r, scoresX), genR(perms_for_r_, scoresX_), perms, perms_, exchanges_weights, temps
    # return array(list(pmap(f, *jobs)))
parwtau.isparwtau = True
Sub-modules
sortedness.wtau.wtau- 
Copyright (c) 2001-2002 Enthought, Inc. 2003-2023, SciPy Developers. All rights reserved …
 
Functions
def parwtau(scoresX, scoresX_, npoints, R=True, parallel=True, **kwargs)- 
**kwargs is for ProcessingPool, e.g.: npcus=8
Expand source code
def parwtau(scoresX, scoresX_, npoints, R=True, parallel=True, **kwargs): """**kwargs is for ProcessingPool, e.g.: npcus=8""" npositions = len(scoresX) if len(scoresX.shape) != 2: lex = lexsort((scoresX_, scoresX)) perms_source = (lex.copy() for i in range(npoints)) # else: # perms_source = (lexsort((scoresX_[i], scoresX[i])) for i in range(npoints)) perms, perms_for_r = tee(perms_source) add = R is True def genR(perms_gen, scores): for i in range(npoints): # print("s", i) p = next(perms_gen) # if R is True or R is None: # r = p.copy() # # print(r) # _invert_in_place(r) if R is not False: r = R[:, i] # else: # r = arange(npositions, dtype=intp) yield r exchanges_weights = (array([0.0]) for i in range(npoints)) temps = (empty(npositions, dtype=int) for i in range(npoints)) pmap = mp.ProcessingPool(**kwargs).imap if parallel else map if not add: jobs = repeat(scoresX), repeat(scoresX_), genR(perms_for_r, scoresX), repeat(npositions), perms, exchanges_weights, temps from .wtau import _weightedrankedtau # Source wtau.pyx becomes wtau.c and shared so return array(list(pmap(_weightedrankedtau, *jobs))) # def f(scoresX, scoresX_, rank, rank_, perm, perm_, exchanges_weight, temp): # return (_weightedrankedtau(scoresX, scoresX_, rank, npositions, perm, exchanges_weight, temp) + # _weightedrankedtau(scoresX_, scoresX, rank_, npositions, perm_, exchanges_weight, temp)) / 2 # # scores = lambda M: (M[i] for i in range(npoints)) # if len(scoresX_.shape) == 2: # perms_source_ = (lexsort((scoresX[i], scoresX_[i])).copy() for i in range(npoints)) # else: # lex = lexsort((scoresX, scoresX_)) # perms_source_ = (lex.copy() for i in range(npoints)) # perms_, perms_for_r_ = tee(perms_source_) # jobs = scores(scoresX), scores(scoresX_), genR(perms_for_r, scoresX), genR(perms_for_r_, scoresX_), perms, perms_, exchanges_weights, temps # return array(list(pmap(f, *jobs)))