debugging 调试SOMPY库函数时,调试器仅显示Python字节码

wi3ka0sx  于 2023-03-03  发布在  Python
关注(0)|答案(1)|浏览(151)

我正在尝试用python库SOMPY建立一个自组织Map(SOM)。我对原始代码做了一些修改,因为我想实现一个计算最佳匹配单元(BMU)的替代方法。但是我发现这些修改没有效果,当我尝试用调试器进入库时,我最终进入了一个格式不熟悉的文件。
为了调查这个问题,我尝试单步执行SOMFactory.build()方法,看看为什么我的更改没有执行。

import sompy 
import numpy as np 

  
test = sompy.SOMFactory.build(np.ones((20, 3)))

我预计最终会定义为SOMFactory

class SOMFactory(object):

    @staticmethod
    def build(data,
              mapsize=None,
              mask=None,
              mapshape='planar',
              lattice='rect',
              normalization='var',
              initialization='pca',
              neighborhood='gaussian',
              training='batch',
              name='sompy',
              component_names=None):
        """
        :param data: data to be clustered, represented as a matrix of n rows,
            as inputs and m cols as input features
        :param neighborhood: neighborhood object calculator.  Options are:
            - gaussian
            - bubble
            - manhattan (not implemented yet)
            - cut_gaussian (not implemented yet)
            - epanechicov (not implemented yet)

        :param normalization: normalizer object calculator. Options are:
            - var

        :param mapsize: tuple/list defining the dimensions of the som.
            If single number is provided is considered as the number of nodes.
        :param mask: mask
        :param mapshape: shape of the som. Options are:
            - planar
            - toroid (not implemented yet)
            - cylinder (not implemented yet)

        :param lattice: type of lattice. Options are:
            - rect
            - hexa

        :param initialization: method to be used for initialization of the som.
            Options are:
            - pca
            - random

        :param name: name used to identify the som
        :param training: Training mode (seq, batch)
        """
        
        print("I am in the function! ")
        
        if normalization:
            normalizer = NormalizerFactory.build(normalization)
        else:
            normalizer = None
        neighborhood_calculator = NeighborhoodFactory.build(neighborhood)
        return SOM(data, neighborhood_calculator, normalizer, mapsize, mask,
                   mapshape, lattice, initialization, training, name, component_names)

但我最终得到了一个名为sompy.py的文件,上面只显示了这个:

LOAD_FAST(normalization), POP_JUMP_IF_FALSE{16}
LOAD_GLOBAL(NormalizerFactory), LOAD_METHOD(build), LOAD_FAST(normalization), CALL_METHOD{1}, STORE_FAST(normalizer), JUMP_FORWARD(to 20)

normalizer = |16|None
LOAD_GLOBAL(NeighborhoodFactory), LOAD_METHOD(build), LOAD_FAST(neighborhood), CALL_METHOD{1}, STORE_FAST(neighborhood_calculator)
return SOM(data, neighborhood_calculator, normalizer, mapsize, mask, 
mapshape, lattice, initialization, training, name, component_names)

这是一个Python文件,但是格式对我来说很陌生。我想知道这段代码是什么,我需要做什么修改,这样文件中定义的SOMFactory类的修改才会真正生效。

iswrvxsc

iswrvxsc1#

我已经找到了解决问题的办法:调试器进入的文件是python字节码,它这样做是因为源文件不可用.为了确保源代码可用,我进入库的目录,卸载它,然后重新安装它,并使用一个标志告诉pip以可编辑模式安装包:

pip uninstall sompy 
pip install -e .

相关问题