NumPy-源码解析-九十四-

40 阅读1小时+

NumPy 源码解析(九十四)

.\numpy\tools\swig\test\testFarray.py

#!/usr/bin/env python3
# System imports
# 导入系统模块
from distutils.util import get_platform
import os
import sys
import unittest

# Import NumPy
# 导入 NumPy 库
import numpy as np
# 解析 NumPy 版本号
major, minor = [ int(d) for d in np.__version__.split(".")[:2] ]
# 根据 NumPy 的主版本号判断错误类型
if major == 0: BadListError = TypeError
else:          BadListError = ValueError

# Add the distutils-generated build directory to the python search path and then
# import the extension module
# 将 distutils 生成的构建目录添加到 Python 搜索路径中,并导入扩展模块
libDir = "lib.{}-{}.{}".format(get_platform(), *sys.version_info[:2])
sys.path.insert(0, os.path.join("build", libDir))
import Farray

######################################################################

class FarrayTestCase(unittest.TestCase):

    def setUp(self):
        # 设置测试用例的初始条件
        self.nrows = 5
        self.ncols = 4
        # 创建 Farray 对象
        self.array = Farray.Farray(self.nrows, self.ncols)

    def testConstructor1(self):
        "Test Farray size constructor"
        # 测试 Farray 的大小构造函数
        self.assertTrue(isinstance(self.array, Farray.Farray))

    def testConstructor2(self):
        "Test Farray copy constructor"
        # 测试 Farray 的复制构造函数
        for i in range(self.nrows):
            for j in range(self.ncols):
                self.array[i, j] = i + j
        # 创建 Farray 对象的副本
        arrayCopy = Farray.Farray(self.array)
        # 断言副本与原始对象相等
        self.assertTrue(arrayCopy == self.array)

    def testConstructorBad1(self):
        "Test Farray size constructor, negative nrows"
        # 测试 Farray 的大小构造函数,负数行数
        self.assertRaises(ValueError, Farray.Farray, -4, 4)

    def testConstructorBad2(self):
        "Test Farray size constructor, negative ncols"
        # 测试 Farray 的大小构造函数,负数列数
        self.assertRaises(ValueError, Farray.Farray, 4, -4)

    def testNrows(self):
        "Test Farray nrows method"
        # 测试 Farray 的 nrows 方法
        self.assertTrue(self.array.nrows() == self.nrows)

    def testNcols(self):
        "Test Farray ncols method"
        # 测试 Farray 的 ncols 方法
        self.assertTrue(self.array.ncols() == self.ncols)

    def testLen(self):
        "Test Farray __len__ method"
        # 测试 Farray 的 __len__ 方法
        self.assertTrue(len(self.array) == self.nrows*self.ncols)

    def testSetGet(self):
        "Test Farray __setitem__, __getitem__ methods"
        # 测试 Farray 的 __setitem__ 和 __getitem__ 方法
        m = self.nrows
        n = self.ncols
        for i in range(m):
            for j in range(n):
                self.array[i, j] = i*j
        for i in range(m):
            for j in range(n):
                self.assertTrue(self.array[i, j] == i*j)

    def testSetBad1(self):
        "Test Farray __setitem__ method, negative row"
        # 测试 Farray 的 __setitem__ 方法,负数行号
        self.assertRaises(IndexError, self.array.__setitem__, (-1, 3), 0)

    def testSetBad2(self):
        "Test Farray __setitem__ method, negative col"
        # 测试 Farray 的 __setitem__ 方法,负数列号
        self.assertRaises(IndexError, self.array.__setitem__, (1, -3), 0)

    def testSetBad3(self):
        "Test Farray __setitem__ method, out-of-range row"
        # 测试 Farray 的 __setitem__ 方法,超出范围的行号
        self.assertRaises(IndexError, self.array.__setitem__, (self.nrows+1, 0), 0)

    def testSetBad4(self):
        "Test Farray __setitem__ method, out-of-range col"
        # 测试 Farray 的 __setitem__ 方法,超出范围的列号
        self.assertRaises(IndexError, self.array.__setitem__, (0, self.ncols+1), 0)
    # 测试 Farray 的 __getitem__ 方法,检查负索引行为是否引发 IndexError 异常
    def testGetBad1(self):
        "Test Farray __getitem__ method, negative row"
        self.assertRaises(IndexError, self.array.__getitem__, (-1, 3))

    # 测试 Farray 的 __getitem__ 方法,检查负索引列是否引发 IndexError 异常
    def testGetBad2(self):
        "Test Farray __getitem__ method, negative col"
        self.assertRaises(IndexError, self.array.__getitem__, (1, -3))

    # 测试 Farray 的 __getitem__ 方法,检查超出范围的行索引是否引发 IndexError 异常
    def testGetBad3(self):
        "Test Farray __getitem__ method, out-of-range row"
        self.assertRaises(IndexError, self.array.__getitem__, (self.nrows+1, 0))

    # 测试 Farray 的 __getitem__ 方法,检查超出范围的列索引是否引发 IndexError 异常
    def testGetBad4(self):
        "Test Farray __getitem__ method, out-of-range col"
        self.assertRaises(IndexError, self.array.__getitem__, (0, self.ncols+1))

    # 测试 Farray 的 asString 方法
    def testAsString(self):
        "Test Farray asString method"
        result = """\
"""
[ [ 0, 1, 2, 3 ],
  [ 1, 2, 3, 4 ],
  [ 2, 3, 4, 5 ],
  [ 3, 4, 5, 6 ],
  [ 4, 5, 6, 7 ] ]
"""

# 遍历每个元素的行和列索引,为二维数组填充递增的整数值
for i in range(self.nrows):
    for j in range(self.ncols):
        self.array[i, j] = i+j
self.assertTrue(self.array.asString() == result)

def testStr(self):
    "Test Farray __str__ method"
    result = """\
[ [ 0, -1, -2, -3 ],
  [ 1, 0, -1, -2 ],
  [ 2, 1, 0, -1 ],
  [ 3, 2, 1, 0 ],
  [ 4, 3, 2, 1 ] ]
"""

# 遍历每个元素的行和列索引,为二维数组填充递减的整数值
for i in range(self.nrows):
    for j in range(self.ncols):
        self.array[i, j] = i-j
self.assertTrue(str(self.array) == result)

def testView(self):
    "Test Farray view method"
    
# 遍历每个元素的行和列索引,为二维数组填充递增的整数值
for i in range(self.nrows):
    for j in range(self.ncols):
        self.array[i, j] = i+j

# 调用数组的视图方法,并进行断言检查其返回的对象是否是 np.ndarray 类型
a = self.array.view()
self.assertTrue(isinstance(a, np.ndarray))

# 断言检查数组是否是列优先(Fortran)存储
self.assertTrue(a.flags.f_contiguous)

# 遍历每个元素的行和列索引,检查视图数组中的元素值是否正确
for i in range(self.nrows):
    for j in range(self.ncols):
        self.assertTrue(a[i, j] == i+j)

######################################################################

if __name__ == "__main__":

    # 构建测试套件
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(FarrayTestCase))

    # 执行测试套件
    print("Testing Classes of Module Farray")
    print("NumPy version", np.__version__)
    print()
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    sys.exit(bool(result.errors + result.failures))

.\numpy\tools\swig\test\testFlat.py

# 定义一个单元测试类 FlatTestCase,继承自 unittest.TestCase
class FlatTestCase(unittest.TestCase):

    # 初始化方法,设置默认测试方法为 runTest
    def __init__(self, methodName="runTest"):
        # 调用父类 unittest.TestCase 的初始化方法
        unittest.TestCase.__init__(self, methodName)
        # 设置类型字符串为 "double"
        self.typeStr  = "double"
        # 设置类型代码为 "d"
        self.typeCode = "d"

    # 测试方法,测试处理一维数组的函数 (type* INPLACE_ARRAY_FLAT, int DIM_FLAT)
    def testProcess1D(self):
        "Test Process function 1D array"
        # 打印类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Flat 模块中的处理函数,根据类型字符串动态调用
        process = Flat.__dict__[self.typeStr + "Process"]
        # 初始化一个空的字节串 pack_output
        pack_output = b''
        # 将 0 到 9 的数据按照类型代码打包到 pack_output 中
        for i in range(10):
            pack_output += struct.pack(self.typeCode, i)
        # 从 pack_output 中创建 NumPy 数组 x,数据类型由 self.typeCode 指定
        x = np.frombuffer(pack_output, dtype=self.typeCode)
        # 创建 y 数组作为 x 的副本
        y = x.copy()
        # 调用处理函数处理 y 数组
        process(y)
        # 断言 (x+1) 是否等于 y 的所有元素,返回 True
        self.assertEqual(np.all((x + 1) == y), True)

    # 测试方法,测试处理三维数组的函数 (type* INPLACE_ARRAY_FLAT, int DIM_FLAT)
    def testProcess3D(self):
        "Test Process function 3D array"
        # 打印类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Flat 模块中的处理函数,根据类型字符串动态调用
        process = Flat.__dict__[self.typeStr + "Process"]
        # 初始化一个空的字节串 pack_output
        pack_output = b''
        # 将 0 到 23 的数据按照类型代码打包到 pack_output 中
        for i in range(24):
            pack_output += struct.pack(self.typeCode, i)
        # 从 pack_output 中创建 NumPy 数组 x,数据类型由 self.typeCode 指定
        x = np.frombuffer(pack_output, dtype=self.typeCode)
        # 将 x 数组的形状设置为 (2, 3, 4)
        x.shape = (2, 3, 4)
        # 创建 y 数组作为 x 的副本
        y = x.copy()
        # 调用处理函数处理 y 数组
        process(y)
        # 断言 (x+1) 是否等于 y 的所有元素,返回 True
        self.assertEqual(np.all((x + 1) == y), True)

    # 测试方法,测试处理三维数组的函数,使用 FORTRAN 顺序 (type* INPLACE_ARRAY_FLAT, int DIM_FLAT)
    def testProcess3DTranspose(self):
        "Test Process function 3D array, FORTRAN order"
        # 打印类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Flat 模块中的处理函数,根据类型字符串动态调用
        process = Flat.__dict__[self.typeStr + "Process"]
        # 初始化一个空的字节串 pack_output
        pack_output = b''
        # 将 0 到 23 的数据按照类型代码打包到 pack_output 中
        for i in range(24):
            pack_output += struct.pack(self.typeCode, i)
        # 从 pack_output 中创建 NumPy 数组 x,数据类型由 self.typeCode 指定
        x = np.frombuffer(pack_output, dtype=self.typeCode)
        # 将 x 数组的形状设置为 (2, 3, 4)
        x.shape = (2, 3, 4)
        # 创建 y 数组作为 x 的副本
        y = x.copy()
        # 调用处理函数处理 y 数组的转置
        process(y.T)
        # 断言 (x.T+1) 是否等于 y 的转置的所有元素,返回 True
        self.assertEqual(np.all((x.T + 1) == y.T), True)

    # 测试方法,测试处理非连续数组的函数,预期引发 TypeError 异常
    def testProcessNoncontiguous(self):
        "Test Process function with non-contiguous array, which should raise an error"
        # 打印类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Flat 模块中的处理函数,根据类型字符串动态调用
        process = Flat.__dict__[self.typeStr + "Process"]
        # 初始化一个空的字节串 pack_output
        pack_output = b''
        # 将 0 到 23 的数据按照类型代码打包到 pack_output 中
        for i in range(24):
            pack_output += struct.pack(self.typeCode, i)
        # 从 pack_output 中创建 NumPy 数组 x,数据类型由 self.typeCode 指定
        x = np.frombuffer(pack_output, dtype=self.typeCode)
        # 将 x 数组的形状设置为 (2, 3, 4)
        x.shape = (2, 3, 4)
        # 调用处理函数处理 x[:,:,0] 子数组,预期引发 TypeError 异常
        self.assertRaises(TypeError, process, x[:,:,0])


# 定义 scharTestCase 类,继承自 FlatTestCase 类
class scharTestCase(FlatTestCase):

    # 初始化方法,设置默认测试方法为 runTest
    def __init__(self, methodName="runTest"):
        # 调用父类 FlatTestCase 的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "schar"
        self.typeStr  = "schar"
        # 设置类型代码为 "b"
        self.typeCode = "b"


# 主程序的入口点,开始执行单元测试
    # 定义初始化方法,初始化一个测试对象
    def __init__(self, methodName="runTest"):
        # 调用父类 FlatTestCase 的初始化方法,传入 methodName 参数
        FlatTestCase.__init__(self, methodName)
        # 设置实例变量 typeStr,表示数据类型为无符号字符(unsigned char)
        self.typeStr  = "uchar"
        # 设置实例变量 typeCode,表示数据类型编码为 'B'
        self.typeCode = "B"
######################################################################

# 定义一个测试类 shortTestCase,继承自 FlatTestCase
class shortTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "short"
        self.typeStr  = "short"
        # 设置类型代码为 "h"
        self.typeCode = "h"

######################################################################

# 定义一个测试类 ushortTestCase,继承自 FlatTestCase
class ushortTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "ushort"
        self.typeStr  = "ushort"
        # 设置类型代码为 "H"
        self.typeCode = "H"

######################################################################

# 定义一个测试类 intTestCase,继承自 FlatTestCase
class intTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "int"
        self.typeStr  = "int"
        # 设置类型代码为 "i"
        self.typeCode = "i"

######################################################################

# 定义一个测试类 uintTestCase,继承自 FlatTestCase
class uintTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "uint"
        self.typeStr  = "uint"
        # 设置类型代码为 "I"
        self.typeCode = "I"

######################################################################

# 定义一个测试类 longTestCase,继承自 FlatTestCase
class longTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "long"
        self.typeStr  = "long"
        # 设置类型代码为 "l"
        self.typeCode = "l"

######################################################################

# 定义一个测试类 ulongTestCase,继承自 FlatTestCase
class ulongTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "ulong"
        self.typeStr  = "ulong"
        # 设置类型代码为 "L"
        self.typeCode = "L"

######################################################################

# 定义一个测试类 longLongTestCase,继承自 FlatTestCase
class longLongTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "longLong"
        self.typeStr  = "longLong"
        # 设置类型代码为 "q"
        self.typeCode = "q"

######################################################################

# 定义一个测试类 ulongLongTestCase,继承自 FlatTestCase
class ulongLongTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "ulongLong"
        self.typeStr  = "ulongLong"
        # 设置类型代码为 "Q"
        self.typeCode = "Q"

######################################################################

# 定义一个测试类 floatTestCase,继承自 FlatTestCase
class floatTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "float"
        self.typeStr  = "float"
        # 设置类型代码为 "f"
        self.typeCode = "f"

######################################################################

# 定义一个测试类 doubleTestCase,继承自 FlatTestCase
class doubleTestCase(FlatTestCase):
    # 初始化方法,接受一个可选参数 methodName,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FlatTestCase.__init__(self, methodName)
        # 设置类型字符串为 "double"
        self.typeStr  = "double"
        # 设置类型代码为 "d"
        self.typeCode = "d"

######################################################################

# 如果作为独立模块执行
if __name__ == "__main__":

    # 创建一个测试套件对象
    suite = unittest.TestSuite()
    # 向测试套件中添加 scharTestCase 类的测试用例
    suite.addTest(unittest.makeSuite(scharTestCase))
    # 向测试套件中添加 ucharTestCase 类的测试用例
    suite.addTest(unittest.makeSuite(ucharTestCase))
    # 向测试套件中添加 shortTestCase 类的测试用例
    suite.addTest(unittest.makeSuite(shortTestCase))
    # 将 ushortTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(ushortTestCase))
    # 将 intTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(intTestCase))
    # 将 uintTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(uintTestCase))
    # 将 longTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(longTestCase))
    # 将 ulongTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(ulongTestCase))
    # 将 longLongTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(longLongTestCase))
    # 将 ulongLongTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(ulongLongTestCase))
    # 将 floatTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(floatTestCase))
    # 将 doubleTestCase 的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(doubleTestCase))
    
    # 执行测试套件
    print("Testing 1D Functions of Module Flat")
    # 打印 NumPy 的版本号
    print("NumPy version", np.__version__)
    print()
    
    # 运行测试套件,并输出详细的测试结果(verbosity=2)
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    
    # 根据测试结果(有错误或失败的测试用例),返回适当的退出状态码给操作系统
    sys.exit(bool(result.errors + result.failures))

.\numpy\tools\swig\test\testFortran.py

#!/usr/bin/env python3
# System imports
import sys  # 导入系统模块 sys
import unittest  # 导入单元测试模块 unittest

# Import NumPy
import numpy as np  # 导入 NumPy 库,并命名为 np
major, minor = [ int(d) for d in np.__version__.split(".")[:2] ]  # 解析 NumPy 版本信息
if major == 0:  # 如果主版本号为 0
    BadListError = TypeError  # 则定义 BadListError 为 TypeError
else:  # 否则
    BadListError = ValueError  # 定义 BadListError 为 ValueError

import Fortran  # 导入 Fortran 模块

######################################################################

class FortranTestCase(unittest.TestCase):
    # 初始化方法
    def __init__(self, methodName="runTests"):
        unittest.TestCase.__init__(self, methodName)
        self.typeStr  = "double"  # 设置测试用例中的数据类型字符串为 "double"
        self.typeCode = "d"       # 设置测试用例中的数据类型代码为 "d"

    # Test (type* IN_FARRAY2, int DIM1, int DIM2) typemap
    def testSecondElementFortran(self):
        "Test Fortran matrix initialized from reshaped NumPy fortranarray"
        print(self.typeStr, "... ", end=' ', file=sys.stderr)  # 打印当前数据类型字符串到标准错误输出
        second = Fortran.__dict__[self.typeStr + "SecondElement"]  # 获取 Fortran 模块中对应数据类型的第二个元素函数
        matrix = np.asfortranarray(np.arange(9).reshape(3, 3),
                                   self.typeCode)  # 生成一个 Fortran 风格的 NumPy 数组
        self.assertEqual(second(matrix), 3)  # 断言第二个元素函数对该数组的调用结果为 3

    def testSecondElementObject(self):
        "Test Fortran matrix initialized from nested list fortranarray"
        print(self.typeStr, "... ", end=' ', file=sys.stderr)  # 打印当前数据类型字符串到标准错误输出
        second = Fortran.__dict__[self.typeStr + "SecondElement"]  # 获取 Fortran 模块中对应数据类型的第二个元素函数
        matrix = np.asfortranarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]], self.typeCode)  # 生成一个 Fortran 风格的 NumPy 数组
        self.assertEqual(second(matrix), 3)  # 断言第二个元素函数对该数组的调用结果为 3

######################################################################

class scharTestCase(FortranTestCase):
    # 初始化方法
    def __init__(self, methodName="runTest"):
        FortranTestCase.__init__(self, methodName)
        self.typeStr  = "schar"  # 设置测试用例中的数据类型字符串为 "schar"
        self.typeCode = "b"      # 设置测试用例中的数据类型代码为 "b"

######################################################################

class ucharTestCase(FortranTestCase):
    # 初始化方法
    def __init__(self, methodName="runTest"):
        FortranTestCase.__init__(self, methodName)
        self.typeStr  = "uchar"  # 设置测试用例中的数据类型字符串为 "uchar"
        self.typeCode = "B"      # 设置测试用例中的数据类型代码为 "B"

######################################################################

class shortTestCase(FortranTestCase):
    # 初始化方法
    def __init__(self, methodName="runTest"):
        FortranTestCase.__init__(self, methodName)
        self.typeStr  = "short"  # 设置测试用例中的数据类型字符串为 "short"
        self.typeCode = "h"      # 设置测试用例中的数据类型代码为 "h"

######################################################################

class ushortTestCase(FortranTestCase):
    # 初始化方法
    def __init__(self, methodName="runTest"):
        FortranTestCase.__init__(self, methodName)
        self.typeStr  = "ushort"  # 设置测试用例中的数据类型字符串为 "ushort"
        self.typeCode = "H"       # 设置测试用例中的数据类型代码为 "H"

######################################################################

class intTestCase(FortranTestCase):
    # 初始化方法
    def __init__(self, methodName="runTest"):
        FortranTestCase.__init__(self, methodName)
        self.typeStr  = "int"  # 设置测试用例中的数据类型字符串为 "int"
        self.typeCode = "i"    # 设置测试用例中的数据类型代码为 "i"

######################################################################

class uintTestCase(FortranTestCase):
    # 初始化方法
    def __init__(self, methodName="runTest"):
        FortranTestCase.__init__(self, methodName)
        self.typeStr  = "uint"  # 设置测试用例中的数据类型字符串为 "uint"
        self.typeCode = "I"     # 设置测试用例中的数据类型代码为 "I"
######################################################################

class longTestCase(FortranTestCase):
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FortranTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "long"
        self.typeStr  = "long"
        # 设置测试类型码为 "l"
        self.typeCode = "l"

######################################################################

class ulongTestCase(FortranTestCase):
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FortranTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "ulong"
        self.typeStr  = "ulong"
        # 设置测试类型码为 "L"
        self.typeCode = "L"

######################################################################

class longLongTestCase(FortranTestCase):
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FortranTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "longLong"
        self.typeStr  = "longLong"
        # 设置测试类型码为 "q"
        self.typeCode = "q"

######################################################################

class ulongLongTestCase(FortranTestCase):
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FortranTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "ulongLong"
        self.typeStr  = "ulongLong"
        # 设置测试类型码为 "Q"
        self.typeCode = "Q"

######################################################################

class floatTestCase(FortranTestCase):
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FortranTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "float"
        self.typeStr  = "float"
        # 设置测试类型码为 "f"
        self.typeCode = "f"

######################################################################

class doubleTestCase(FortranTestCase):
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        FortranTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "double"
        self.typeStr  = "double"
        # 设置测试类型码为 "d"
        self.typeCode = "d"

######################################################################

if __name__ == "__main__":

    # 创建测试套件对象
    suite = unittest.TestSuite()
    # 将各个测试类添加到测试套件中
    suite.addTest(unittest.makeSuite(    scharTestCase))
    suite.addTest(unittest.makeSuite(    ucharTestCase))
    suite.addTest(unittest.makeSuite(    shortTestCase))
    suite.addTest(unittest.makeSuite(   ushortTestCase))
    suite.addTest(unittest.makeSuite(      intTestCase))
    suite.addTest(unittest.makeSuite(     uintTestCase))
    suite.addTest(unittest.makeSuite(     longTestCase))
    suite.addTest(unittest.makeSuite(    ulongTestCase))
    suite.addTest(unittest.makeSuite( longLongTestCase))
    suite.addTest(unittest.makeSuite(ulongLongTestCase))
    suite.addTest(unittest.makeSuite(    floatTestCase))
    suite.addTest(unittest.makeSuite(   doubleTestCase))

    # 执行测试套件中的测试
    print("Testing 2D Functions of Module Matrix")
    print("NumPy version", np.__version__)
    print()
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    # 根据测试结果返回相应的退出状态码
    sys.exit(bool(result.errors + result.failures))

.\numpy\tools\swig\test\testMatrix.py

# 指定 Python 解释器路径,使脚本可以在环境中独立运行
#!/usr/bin/env python3

# 导入系统相关模块
import sys
import unittest

# 导入 NumPy 库,并获取其主版本号和次版本号
import numpy as np
major, minor = [ int(d) for d in np.__version__.split(".")[:2] ]
if major == 0: BadListError = TypeError
else:          BadListError = ValueError

# 导入 Matrix 模块
import Matrix

######################################################################

# 定义测试类 MatrixTestCase,继承自 unittest.TestCase
class MatrixTestCase(unittest.TestCase):

    # 构造方法,初始化测试实例
    def __init__(self, methodName="runTests"):
        # 调用父类构造方法初始化
        unittest.TestCase.__init__(self, methodName)
        # 设置测试用例类型字符串和类型代码
        self.typeStr  = "double"
        self.typeCode = "d"

    # 测试用例,测试 det 函数的正常情况
    # Test (type IN_ARRAY2[ANY][ANY]) typemap
    def testDet(self):
        "Test det function"
        # 输出类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 模块中特定类型的 det 函数
        det = Matrix.__dict__[self.typeStr + "Det"]
        # 定义测试矩阵
        matrix = [[8, 7], [6, 9]]
        # 断言调用 det 函数后的返回值为预期值 30
        self.assertEqual(det(matrix), 30)

    # 测试用例,测试 det 函数处理不良列表的情况
    # Test (type IN_ARRAY2[ANY][ANY]) typemap
    def testDetBadList(self):
        "Test det function with bad list"
        # 输出类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 模块中特定类型的 det 函数
        det = Matrix.__dict__[self.typeStr + "Det"]
        # 定义包含非法类型的测试矩阵
        matrix = [[8, 7], ["e", "pi"]]
        # 断言调用 det 函数时会引发 BadListError 异常
        self.assertRaises(BadListError, det, matrix)

    # 测试用例,测试 det 函数处理维度错误的情况
    # Test (type IN_ARRAY2[ANY][ANY]) typemap
    def testDetWrongDim(self):
        "Test det function with wrong dimensions"
        # 输出类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 模块中特定类型的 det 函数
        det = Matrix.__dict__[self.typeStr + "Det"]
        # 定义维度不符合要求的测试矩阵
        matrix = [8, 7]
        # 断言调用 det 函数时会引发 TypeError 异常
        self.assertRaises(TypeError, det, matrix)

    # 测试用例,测试 det 函数处理尺寸错误的情况
    # Test (type IN_ARRAY2[ANY][ANY]) typemap
    def testDetWrongSize(self):
        "Test det function with wrong size"
        # 输出类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 模块中特定类型的 det 函数
        det = Matrix.__dict__[self.typeStr + "Det"]
        # 定义尺寸不符合要求的测试矩阵
        matrix = [[8, 7, 6], [5, 4, 3], [2, 1, 0]]
        # 断言调用 det 函数时会引发 TypeError 异常
        self.assertRaises(TypeError, det, matrix)

    # 测试用例,测试 det 函数处理非容器的情况
    # Test (type IN_ARRAY2[ANY][ANY]) typemap
    def testDetNonContainer(self):
        "Test det function with non-container"
        # 输出类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 模块中特定类型的 det 函数
        det = Matrix.__dict__[self.typeStr + "Det"]
        # 断言调用 det 函数时会引发 TypeError 异常,因为传入了非容器对象
        self.assertRaises(TypeError, det, None)

    # 测试用例,测试 max 函数的正常情况
    # Test (type* IN_ARRAY2, int DIM1, int DIM2) typemap
    def testMax(self):
        "Test max function"
        # 输出类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 模块中特定类型的 max 函数
        max = Matrix.__dict__[self.typeStr + "Max"]
        # 定义测试矩阵
        matrix = [[6, 5, 4], [3, 2, 1]]
        # 断言调用 max 函数后的返回值为预期值 6
        self.assertEqual(max(matrix), 6)

    # 测试用例,测试 max 函数处理不良列表的情况
    # Test (type* IN_ARRAY2, int DIM1, int DIM2) typemap
    def testMaxBadList(self):
        "Test max function with bad list"
        # 输出类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 模块中特定类型的 max 函数
        max = Matrix.__dict__[self.typeStr + "Max"]
        # 定义包含非法类型的测试矩阵
        matrix = [[6, "five", 4], ["three", 2, "one"]]
        # 断言调用 max 函数时会引发 BadListError 异常
        self.assertRaises(BadListError, max, matrix)

    # 其他测试用例待补充
    # 定义一个测试函数,用于测试在非容器对象上使用 max 函数
    def testMaxNonContainer(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的最大值函数
        max = Matrix.__dict__[self.typeStr + "Max"]
        # 断言调用该最大值函数时传入 None 会引发 TypeError 异常
        self.assertRaises(TypeError, max, None)

    # 测试函数签名为 (type* IN_ARRAY2, int DIM1, int DIM2),验证 max 函数对错误维度输入的处理
    def testMaxWrongDim(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的最大值函数
        max = Matrix.__dict__[self.typeStr + "Max"]
        # 断言调用该最大值函数时传入维度错误的列表会引发 TypeError 异常
        self.assertRaises(TypeError, max, [0, 1, 2, 3])

    # 测试函数签名为 (int DIM1, int DIM2, type* IN_ARRAY2),验证 min 函数的正常工作
    def testMin(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的最小值函数
        min = Matrix.__dict__[self.typeStr + "Min"]
        # 创建一个二维列表作为矩阵输入,并验证其最小值为 4
        matrix = [[9, 8], [7, 6], [5, 4]]
        self.assertEqual(min(matrix), 4)

    # 测试函数签名为 (int DIM1, int DIM2, type* IN_ARRAY2),验证 min 函数对包含非数值元素的列表的处理
    def testMinBadList(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的最小值函数
        min = Matrix.__dict__[self.typeStr + "Min"]
        # 创建一个包含非数值元素的二维列表,并验证调用最小值函数时会引发 BadListError 异常
        matrix = [["nine", "eight"], ["seven", "six"]]
        self.assertRaises(BadListError, min, matrix)

    # 测试函数签名为 (int DIM1, int DIM2, type* IN_ARRAY2),验证 min 函数对错误维度输入的处理
    def testMinWrongDim(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的最小值函数
        min = Matrix.__dict__[self.typeStr + "Min"]
        # 断言调用该最小值函数时传入维度错误的列表会引发 TypeError 异常
        self.assertRaises(TypeError, min, [1, 3, 5, 7, 9])

    # 测试函数签名为 (int DIM1, int DIM2, type* IN_ARRAY2),验证 min 函数在非容器对象上的处理
    def testMinNonContainer(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的最小值函数
        min = Matrix.__dict__[self.typeStr + "Min"]
        # 断言调用该最小值函数时传入 False 会引发 TypeError 异常
        self.assertRaises(TypeError, min, False)

    # 测试函数签名为 (type INPLACE_ARRAY2[ANY][ANY]),验证 scale 函数的正常工作
    def testScale(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的缩放函数
        scale = Matrix.__dict__[self.typeStr + "Scale"]
        # 创建一个 NumPy 数组作为矩阵输入,并验证缩放后的结果是否符合预期
        matrix = np.array([[1, 2, 3], [2, 1, 2], [3, 2, 1]], self.typeCode)
        scale(matrix, 4)
        # 断言缩放后矩阵的元素是否全部符合预期值
        self.assertEqual((matrix == [[4, 8, 12], [8, 4, 8], [12, 8, 4]]).all(), True)

    # 测试函数签名为 (type INPLACE_ARRAY2[ANY][ANY]),验证 scale 函数对错误维度输入的处理
    def testScaleWrongDim(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的缩放函数
        scale = Matrix.__dict__[self.typeStr + "Scale"]
        # 创建一个维度错误的 NumPy 数组,并断言调用缩放函数时会引发 TypeError 异常
        matrix = np.array([1, 2, 2, 1], self.typeCode)
        self.assertRaises(TypeError, scale, matrix)

    # 测试函数签名为 (type INPLACE_ARRAY2[ANY][ANY]),验证 scale 函数对错误大小输入的处理
    def testScaleWrongSize(self):
        # 打印当前测试类型字符串,指示正在进行的测试,输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Matrix 类中与当前类型字符串相关的缩放函数
        scale = Matrix.__dict__[self.typeStr + "Scale"]
        # 创建一个大小错误的 NumPy 数组,并断言调用缩放函数时会引发 TypeError 异常
        matrix = np.array([[1, 2], [2, 1]], self.typeCode)
        self.assertRaises(TypeError, scale, matrix)
    # Test (type INPLACE_ARRAY2[ANY][ANY]) typemap
    def testScaleWrongType(self):
        "Test scale function with wrong type"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的缩放函数
        scale = Matrix.__dict__[self.typeStr + "Scale"]
        # 创建一个 NumPy 数组作为测试矩阵,使用 'c' 类型码
        matrix = np.array([[1, 2, 3], [2, 1, 2], [3, 2, 1]], 'c')
        # 断言调用缩放函数时会引发 TypeError 异常
        self.assertRaises(TypeError, scale, matrix)
    
    # Test (type INPLACE_ARRAY2[ANY][ANY]) typemap
    def testScaleNonArray(self):
        "Test scale function with non-array"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的缩放函数
        scale = Matrix.__dict__[self.typeStr + "Scale"]
        # 创建一个普通的 Python 列表作为测试矩阵
        matrix = [[1, 2, 3], [2, 1, 2], [3, 2, 1]]
        # 断言调用缩放函数时会引发 TypeError 异常
        self.assertRaises(TypeError, scale, matrix)
    
    # Test (type* INPLACE_ARRAY2, int DIM1, int DIM2) typemap
    def testFloor(self):
        "Test floor function"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的取底函数
        floor = Matrix.__dict__[self.typeStr + "Floor"]
        # 创建一个 NumPy 数组作为测试矩阵,使用 self.typeCode 类型码
        matrix = np.array([[6, 7], [8, 9]], self.typeCode)
        # 调用取底函数,并验证矩阵的预期变化
        floor(matrix, 7)
        np.testing.assert_array_equal(matrix, np.array([[7, 7], [8, 9]]))
    
    # Test (type* INPLACE_ARRAY2, int DIM1, int DIM2) typemap
    def testFloorWrongDim(self):
        "Test floor function with wrong dimensions"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的取底函数
        floor = Matrix.__dict__[self.typeStr + "Floor"]
        # 创建一个一维 NumPy 数组作为测试矩阵,使用 self.typeCode 类型码
        matrix = np.array([6, 7, 8, 9], self.typeCode)
        # 断言调用取底函数时会引发 TypeError 异常
        self.assertRaises(TypeError, floor, matrix)
    
    # Test (type* INPLACE_ARRAY2, int DIM1, int DIM2) typemap
    def testFloorWrongType(self):
        "Test floor function with wrong type"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的取底函数
        floor = Matrix.__dict__[self.typeStr + "Floor"]
        # 创建一个 NumPy 数组作为测试矩阵,使用 'c' 类型码
        matrix = np.array([[6, 7], [8, 9]], 'c')
        # 断言调用取底函数时会引发 TypeError 异常
        self.assertRaises(TypeError, floor, matrix)
    
    # Test (type* INPLACE_ARRAY2, int DIM1, int DIM2) typemap
    def testFloorNonArray(self):
        "Test floor function with non-array"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的取底函数
        floor = Matrix.__dict__[self.typeStr + "Floor"]
        # 创建一个普通的 Python 列表作为测试矩阵
        matrix = [[6, 7], [8, 9]]
        # 断言调用取底函数时会引发 TypeError 异常
        self.assertRaises(TypeError, floor, matrix)
    
    # Test (int DIM1, int DIM2, type* INPLACE_ARRAY2) typemap
    def testCeil(self):
        "Test ceil function"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的取上函数
        ceil = Matrix.__dict__[self.typeStr + "Ceil"]
        # 创建一个 NumPy 数组作为测试矩阵,使用 self.typeCode 类型码
        matrix = np.array([[1, 2], [3, 4]], self.typeCode)
        # 调用取上函数,并验证矩阵的预期变化
        ceil(matrix, 3)
        np.testing.assert_array_equal(matrix, np.array([[1, 2], [3, 3]]))
    
    # Test (int DIM1, int DIM2, type* INPLACE_ARRAY2) typemap
    def testCeilWrongDim(self):
        "Test ceil function with wrong dimensions"
        # 打印当前类型信息到标准错误输出流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取与当前类型相关的取上函数
        ceil = Matrix.__dict__[self.typeStr + "Ceil"]
        # 创建一个一维 NumPy 数组作为测试矩阵,使用 self.typeCode 类型码
        matrix = np.array([1, 2, 3, 4], self.typeCode)
        # 断言调用取上函数时会引发 TypeError 异常
        self.assertRaises(TypeError, ceil, matrix)
    # Test (int DIM1, int DIM2, type* INPLACE_ARRAY2) typemap
    def testCeilWrongType(self):
        # 测试 ceil 函数对于维度错误的矩阵
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 ceil 函数
        ceil = Matrix.__dict__[self.typeStr + "Ceil"]
        # 创建一个以字符串 'c' 表示的数组矩阵
        matrix = np.array([[1, 2], [3, 4]], 'c')
        # 断言会抛出 TypeError 异常
        self.assertRaises(TypeError, ceil, matrix)
    
    # Test (int DIM1, int DIM2, type* INPLACE_ARRAY2) typemap
    def testCeilNonArray(self):
        # 测试 ceil 函数对于非数组输入的情况
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 ceil 函数
        ceil = Matrix.__dict__[self.typeStr + "Ceil"]
        # 创建一个普通的嵌套列表表示的矩阵
        matrix = [[1, 2], [3, 4]]
        # 断言会抛出 TypeError 异常
        self.assertRaises(TypeError, ceil, matrix)
    
    # Test (type ARGOUT_ARRAY2[ANY][ANY]) typemap
    def testLUSplit(self):
        # 测试 luSplit 函数
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 luSplit 函数
        luSplit = Matrix.__dict__[self.typeStr + "LUSplit"]
        # 对一个特定的 3x3 矩阵进行 LU 分解
        lower, upper = luSplit([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
        # 断言下三角矩阵是否符合预期
        self.assertEqual((lower == [[1, 0, 0], [4, 5, 0], [7, 8, 9]]).all(), True)
        # 断言上三角矩阵是否符合预期
        self.assertEqual((upper == [[0, 2, 3], [0, 0, 6], [0, 0, 0]]).all(), True)
######################################################################

# 创建一个名为 scharTestCase 的类,继承自 MatrixTestCase
class scharTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "schar"
        self.typeStr  = "schar"
        # 设置实例属性 typeCode 为字符 "b"
        self.typeCode = "b"

######################################################################

# 创建一个名为 ucharTestCase 的类,继承自 MatrixTestCase
class ucharTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "uchar"
        self.typeStr  = "uchar"
        # 设置实例属性 typeCode 为字符 "B"
        self.typeCode = "B"

######################################################################

# 创建一个名为 shortTestCase 的类,继承自 MatrixTestCase
class shortTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "short"
        self.typeStr  = "short"
        # 设置实例属性 typeCode 为字符 "h"
        self.typeCode = "h"

######################################################################

# 创建一个名为 ushortTestCase 的类,继承自 MatrixTestCase
class ushortTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "ushort"
        self.typeStr  = "ushort"
        # 设置实例属性 typeCode 为字符 "H"
        self.typeCode = "H"

######################################################################

# 创建一个名为 intTestCase 的类,继承自 MatrixTestCase
class intTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "int"
        self.typeStr  = "int"
        # 设置实例属性 typeCode 为字符 "i"
        self.typeCode = "i"

######################################################################

# 创建一个名为 uintTestCase 的类,继承自 MatrixTestCase
class uintTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "uint"
        self.typeStr  = "uint"
        # 设置实例属性 typeCode 为字符 "I"
        self.typeCode = "I"

######################################################################

# 创建一个名为 longTestCase 的类,继承自 MatrixTestCase
class longTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "long"
        self.typeStr  = "long"
        # 设置实例属性 typeCode 为字符 "l"
        self.typeCode = "l"

######################################################################

# 创建一个名为 ulongTestCase 的类,继承自 MatrixTestCase
class ulongTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "ulong"
        self.typeStr  = "ulong"
        # 设置实例属性 typeCode 为字符 "L"
        self.typeCode = "L"

######################################################################

# 创建一个名为 longLongTestCase 的类,继承自 MatrixTestCase
class longLongTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "longLong"
        self.typeStr  = "longLong"
        # 设置实例属性 typeCode 为字符 "q"
        self.typeCode = "q"

######################################################################

# 创建一个名为 ulongLongTestCase 的类,继承自 MatrixTestCase
class ulongLongTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "ulongLong"
        self.typeStr  = "ulongLong"
        # 设置实例属性 typeCode 为字符 "Q"
        self.typeCode = "Q"

######################################################################

# 创建一个名为 floatTestCase 的类,继承自 MatrixTestCase
class floatTestCase(MatrixTestCase):
    # 初始化方法,接受一个 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法
        MatrixTestCase.__init__(self, methodName)
        # 设置实例属性 typeStr 为字符串 "float"
        self.typeStr  = "float"
        # 设置实例属性 typeCode 为字符 "f"
        self.typeCode = "f"

######################################################################
######################################################################

class doubleTestCase(MatrixTestCase):
    # 定义一个名为 doubleTestCase 的测试用例类,继承自 MatrixTestCase
    def __init__(self, methodName="runTest"):
        # 调用父类的初始化方法,设置测试方法的名称
        MatrixTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "double"
        self.typeStr  = "double"
        # 设置测试类型代码为 "d"
        self.typeCode = "d"

######################################################################

if __name__ == "__main__":

    # 构建测试套件
    suite = unittest.TestSuite()
    # 将各个测试用例类添加到测试套件中
    suite.addTest(unittest.makeSuite(    scharTestCase))
    suite.addTest(unittest.makeSuite(    ucharTestCase))
    suite.addTest(unittest.makeSuite(    shortTestCase))
    suite.addTest(unittest.makeSuite(   ushortTestCase))
    suite.addTest(unittest.makeSuite(      intTestCase))
    suite.addTest(unittest.makeSuite(     uintTestCase))
    suite.addTest(unittest.makeSuite(     longTestCase))
    suite.addTest(unittest.makeSuite(    ulongTestCase))
    suite.addTest(unittest.makeSuite( longLongTestCase))
    suite.addTest(unittest.makeSuite(ulongLongTestCase))
    suite.addTest(unittest.makeSuite(    floatTestCase))
    suite.addTest(unittest.makeSuite(   doubleTestCase))

    # 执行测试套件
    print("Testing 2D Functions of Module Matrix")
    print("NumPy version", np.__version__)
    print()
    # 运行测试套件并获取测试结果
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    # 根据测试结果,如果有错误或者失败的测试,以非零退出码退出程序
    sys.exit(bool(result.errors + result.failures))


这段代码是一个用于测试的主程序,它构建了一个包含各种数据类型测试用例的测试套件,并执行这些测试用例。

.\numpy\tools\swig\test\testSuperTensor.py

#!/usr/bin/env python3
# System imports
import sys  # 导入系统模块sys,用于处理系统相关的功能
import unittest  # 导入unittest模块,用于编写和运行单元测试

# Import NumPy
import numpy as np  # 导入NumPy库,用于数值计算

major, minor = [ int(d) for d in np.__version__.split(".")[:2] ]
if major == 0: BadListError = TypeError  # 如果NumPy的主版本号为0,则定义BadListError为TypeError
else:          BadListError = ValueError  # 否则定义BadListError为ValueError

import SuperTensor  # 导入SuperTensor模块,假设这是一个自定义的张量处理模块

######################################################################

class SuperTensorTestCase(unittest.TestCase):

    def __init__(self, methodName="runTests"):
        unittest.TestCase.__init__(self, methodName)
        self.typeStr  = "double"  # 定义测试用例中的类型字符串为"double"
        self.typeCode = "d"       # 定义测试用例中的类型代码为"d"

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    def testNorm(self):
        "Test norm function"
        print(self.typeStr, "... ", file=sys.stderr)  # 打印当前类型字符串到标准错误流
        norm = SuperTensor.__dict__[self.typeStr + "Norm"]  # 获取SuperTensor模块中的对应类型的Norm函数
        supertensor = np.arange(2*2*2*2, dtype=self.typeCode).reshape((2, 2, 2, 2))  # 创建一个4维数组作为输入张量
        #Note: cludge to get an answer of the same type as supertensor.
        #Answer is simply sqrt(sum(supertensor*supertensor)/16)
        answer = np.array([np.sqrt(np.sum(supertensor.astype('d')*supertensor)/16.)], dtype=self.typeCode)[0]
        self.assertAlmostEqual(norm(supertensor), answer, 6)  # 断言计算的norm函数值接近预期值,精确到小数点后6位

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    def testNormBadList(self):
        "Test norm function with bad list"
        print(self.typeStr, "... ", file=sys.stderr)  # 打印当前类型字符串到标准错误流
        norm = SuperTensor.__dict__[self.typeStr + "Norm"]  # 获取SuperTensor模块中的对应类型的Norm函数
        supertensor = [[[[0, "one"], [2, 3]], [[3, "two"], [1, 0]]], [[[0, "one"], [2, 3]], [[3, "two"], [1, 0]]]]
        # 创建一个包含不合法元素的多维列表作为输入张量
        self.assertRaises(BadListError, norm, supertensor)  # 断言调用norm函数时抛出BadListError异常

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    def testNormWrongDim(self):
        "Test norm function with wrong dimensions"
        print(self.typeStr, "... ", file=sys.stderr)  # 打印当前类型字符串到标准错误流
        norm = SuperTensor.__dict__[self.typeStr + "Norm"]  # 获取SuperTensor模块中的对应类型的Norm函数
        supertensor = np.arange(2*2*2, dtype=self.typeCode).reshape((2, 2, 2))  # 创建一个3维数组作为输入张量
        self.assertRaises(TypeError, norm, supertensor)  # 断言调用norm函数时抛出TypeError异常

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    def testNormWrongSize(self):
        "Test norm function with wrong size"
        print(self.typeStr, "... ", file=sys.stderr)  # 打印当前类型字符串到标准错误流
        norm = SuperTensor.__dict__[self.typeStr + "Norm"]  # 获取SuperTensor模块中的对应类型的Norm函数
        supertensor = np.arange(3*2*2, dtype=self.typeCode).reshape((3, 2, 2))  # 创建一个不符合尺寸要求的输入张量
        self.assertRaises(TypeError, norm, supertensor)  # 断言调用norm函数时抛出TypeError异常

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    def testNormNonContainer(self):
        "Test norm function with non-container"
        print(self.typeStr, "... ", file=sys.stderr)  # 打印当前类型字符串到标准错误流
        norm = SuperTensor.__dict__[self.typeStr + "Norm"]  # 获取SuperTensor模块中的对应类型的Norm函数
        self.assertRaises(TypeError, norm, None)  # 断言调用norm函数时抛出TypeError异常

    # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    def testMax(self):
        "Test max function"
        print(self.typeStr, "... ", file=sys.stderr)  # 打印当前类型字符串到标准错误流
        max = SuperTensor.__dict__[self.typeStr + "Max"]  # 获取SuperTensor模块中的对应类型的Max函数
        supertensor = [[[[1, 2], [3, 4]], [[5, 6], [7, 8]]], [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]]
        # 创建一个多维列表作为输入张量
        self.assertEqual(max(supertensor), 8)  # 断言调用max函数计算的最大值为预期的8
    # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    def testMaxBadList(self):
        "Test max function with bad list"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的最大值函数
        max = SuperTensor.__dict__[self.typeStr + "Max"]
        # 创建一个包含非法元素的超级张量
        supertensor = [[[[1, "two"], [3, 4]], [[5, "six"], [7, 8]]], [[[1, "two"], [3, 4]], [[5, "six"], [7, 8]]]]
        # 断言调用最大值函数时会抛出 BadListError 异常
        self.assertRaises(BadListError, max, supertensor)
    
    # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    def testMaxNonContainer(self):
        "Test max function with non-container"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的最大值函数
        max = SuperTensor.__dict__[self.typeStr + "Max"]
        # 断言调用最大值函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, max, None)
    
    # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    def testMaxWrongDim(self):
        "Test max function with wrong dimensions"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的最大值函数
        max = SuperTensor.__dict__[self.typeStr + "Max"]
        # 断言调用最大值函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, max, [0, -1, 2, -3])
    
    # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
    def testMin(self):
        "Test min function"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = SuperTensor.__dict__[self.typeStr + "Min"]
        # 创建一个正常的超级张量
        supertensor = [[[[9, 8], [7, 6]], [[5, 4], [3, 2]]], [[[9, 8], [7, 6]], [[5, 4], [3, 2]]]]
        # 断言调用最小值函数返回值为预期的最小值
        self.assertEqual(min(supertensor), 2)
    
    # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
    def testMinBadList(self):
        "Test min function with bad list"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = SuperTensor.__dict__[self.typeStr + "Min"]
        # 创建一个包含非法元素的超级张量
        supertensor = [[[["nine", 8], [7, 6]], [["five", 4], [3, 2]]], [[["nine", 8], [7, 6]], [["five", 4], [3, 2]]]]
        # 断言调用最小值函数时会抛出 BadListError 异常
        self.assertRaises(BadListError, min, supertensor)
    
    # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
    def testMinNonContainer(self):
        "Test min function with non-container"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = SuperTensor.__dict__[self.typeStr + "Min"]
        # 断言调用最小值函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, min, True)
    
    # Test (int DIM1, int DIM2, int DIM3, type* IN_ARRAY3) typemap
    def testMinWrongDim(self):
        "Test min function with wrong dimensions"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = SuperTensor.__dict__[self.typeStr + "Min"]
        # 断言调用最小值函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, min, [[1, 3], [5, 7]])
    
    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    def testScale(self):
        "Test scale function"
        # 输出正在进行的测试类型到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取当前类型对应的缩放函数
        scale = SuperTensor.__dict__[self.typeStr + "Scale"]
        # 创建一个 NumPy 超级张量,用于测试
        supertensor = np.arange(3*3*3*3, dtype=self.typeCode).reshape((3, 3, 3, 3))
        # 创建预期的结果,通过复制当前张量并缩放
        answer = supertensor.copy()*4
        # 调用缩放函数
        scale(supertensor, 4)
        # 断言张量缩放后的结果符合预期
        self.assertEqual((supertensor == answer).all(), True)
    # 定义一个测试方法,用于测试在错误类型情况下调用 scale 函数
    def testScaleWrongType(self):
        # 打印当前对象的 typeStr 属性到标准错误输出流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 scale 函数
        scale = SuperTensor.__dict__[self.typeStr + "Scale"]
        # 创建一个三维的 numpy 数组作为测试输入
        supertensor = np.array([[[1, 0, 1], [0, 1, 0], [1, 0, 1]],
                          [[0, 1, 0], [1, 0, 1], [0, 1, 0]],
                          [[1, 0, 1], [0, 1, 0], [1, 0, 1]]], 'c')
        # 断言调用 scale 函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, scale, supertensor)

    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个测试方法,用于测试在错误维度情况下调用 scale 函数
    def testScaleWrongDim(self):
        # 打印当前对象的 typeStr 属性到标准错误输出流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 scale 函数
        scale = SuperTensor.__dict__[self.typeStr + "Scale"]
        # 创建一个错误维度的 numpy 数组作为测试输入
        supertensor = np.array([[1, 0, 1], [0, 1, 0], [1, 0, 1],
                          [0, 1, 0], [1, 0, 1], [0, 1, 0]], self.typeCode)
        # 断言调用 scale 函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, scale, supertensor)

    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个测试方法,用于测试在错误尺寸情况下调用 scale 函数
    def testScaleWrongSize(self):
        # 打印当前对象的 typeStr 属性到标准错误输出流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 scale 函数
        scale = SuperTensor.__dict__[self.typeStr + "Scale"]
        # 创建一个错误尺寸的 numpy 数组作为测试输入
        supertensor = np.array([[[1, 0], [0, 1], [1, 0]],
                          [[0, 1], [1, 0], [0, 1]],
                          [[1, 0], [0, 1], [1, 0]]], self.typeCode)
        # 断言调用 scale 函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, scale, supertensor)

    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个测试方法,用于测试在非数组类型情况下调用 scale 函数
    def testScaleNonArray(self):
        # 打印当前对象的 typeStr 属性到标准错误输出流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 scale 函数
        scale = SuperTensor.__dict__[self.typeStr + "Scale"]
        # 断言调用 scale 函数时会抛出 TypeError 异常,传入的参数为 True
        self.assertRaises(TypeError, scale, True)

    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 定义一个测试方法,用于测试 floor 函数的正常操作
    def testFloor(self):
        # 打印当前对象的 typeStr 属性到标准错误输出流
        print(self.typeStr, "... ", file=sys.stderr)
        # 使用 typeCode 创建一个特定类型的 numpy 数组
        supertensor = np.arange(2*2*2*2, dtype=self.typeCode).reshape((2, 2, 2, 2))
        # 复制 supertensor 以备后续比较
        answer = supertensor.copy()
        # 将 answer 数组中小于 4 的元素设置为 4
        answer[answer < 4] = 4

        # 获取对应类型的 floor 函数
        floor = SuperTensor.__dict__[self.typeStr + "Floor"]
        # 调用 floor 函数,将 supertensor 中小于 4 的元素设置为 4
        floor(supertensor, 4)
        # 使用 numpy.testing.assert_array_equal 检查 supertensor 是否等于 answer
        np.testing.assert_array_equal(supertensor, answer)

    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 定义一个测试方法,用于测试在错误类型情况下调用 floor 函数
    def testFloorWrongType(self):
        # 打印当前对象的 typeStr 属性到标准错误输出流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 floor 函数
        floor = SuperTensor.__dict__[self.typeStr + "Floor"]
        # 创建一个错误类型的 numpy 数组作为测试输入
        supertensor = np.ones(2*2*2*2, dtype='c').reshape((2, 2, 2, 2))
        # 断言调用 floor 函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, floor, supertensor)

    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 定义一个测试方法,用于测试在错误维度情况下调用 floor 函数
    def testFloorWrongDim(self):
        # 打印当前对象的 typeStr 属性到标准错误输出流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 floor 函数
        floor = SuperTensor.__dict__[self.typeStr + "Floor"]
        # 创建一个错误维度的 numpy 数组作为测试输入
        supertensor = np.arange(2*2*2, dtype=self.typeCode).reshape((2, 2, 2))
        # 断言调用 floor 函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, floor, supertensor)
    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    def testFloorNonArray(self):
        "Test floor function with non-array"
        # 打印当前类型字符串到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 floor 函数并调用,预期会抛出 TypeError 异常
        floor = SuperTensor.__dict__[self.typeStr + "Floor"]
        self.assertRaises(TypeError, floor, object)

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    def testCeil(self):
        "Test ceil function"
        # 打印当前类型字符串到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 创建一个指定类型和形状的超级张量,并复制一个相同的答案张量
        supertensor = np.arange(2*2*2*2, dtype=self.typeCode).reshape((2, 2, 2, 2))
        answer = supertensor.copy()
        # 将答案张量中大于5的元素设置为5
        answer[answer > 5] = 5
        # 获取对应类型的 ceil 函数并调用,修改 supertensor
        ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
        ceil(supertensor, 5)
        # 使用 NumPy 测试断言确保 supertensor 和答案张量相等
        np.testing.assert_array_equal(supertensor, answer)

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    def testCeilWrongType(self):
        "Test ceil function with wrong type"
        # 打印当前类型字符串到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 ceil 函数并调用,传入一个不合适类型的超级张量
        ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
        supertensor = np.ones(2*2*2*2, 'c').reshape((2, 2, 2, 2))
        # 预期会抛出 TypeError 异常
        self.assertRaises(TypeError, ceil, supertensor)

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    def testCeilWrongDim(self):
        "Test ceil function with wrong dimensions"
        # 打印当前类型字符串到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 ceil 函数并调用,传入一个维度不匹配的超级张量
        ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
        supertensor = np.arange(2*2*2, dtype=self.typeCode).reshape((2, 2, 2))
        # 预期会抛出 TypeError 异常
        self.assertRaises(TypeError, ceil, supertensor)

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    def testCeilNonArray(self):
        "Test ceil function with non-array"
        # 打印当前类型字符串到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 ceil 函数并调用,传入一个转换为列表的超级张量
        ceil = SuperTensor.__dict__[self.typeStr + "Ceil"]
        supertensor = np.arange(2*2*2*2, dtype=self.typeCode).reshape((2, 2, 2, 2)).tolist()
        # 预期会抛出 TypeError 异常
        self.assertRaises(TypeError, ceil, supertensor)

    # Test (type ARGOUT_ARRAY3[ANY][ANY][ANY]) typemap
    def testLUSplit(self):
        "Test luSplit function"
        # 打印当前类型字符串到标准错误流
        print(self.typeStr, "... ", file=sys.stderr)
        # 获取对应类型的 luSplit 函数并调用,传入一个全为1的超级张量
        luSplit = SuperTensor.__dict__[self.typeStr + "LUSplit"]
        supertensor = np.ones(2*2*2*2, dtype=self.typeCode).reshape((2, 2, 2, 2))
        # 预期 lower 和 upper 分解的结果与设定的答案相等
        answer_upper = [[[[0, 0], [0, 1]], [[0, 1], [1, 1]]], [[[0, 1], [1, 1]], [[1, 1], [1, 1]]]]
        answer_lower = [[[[1, 1], [1, 0]], [[1, 0], [0, 0]]], [[[1, 0], [0, 0]], [[0, 0], [0, 0]]]]
        lower, upper = luSplit(supertensor)
        # 使用断言确保 lower 和 answer_lower 相等
        self.assertEqual((lower == answer_lower).all(), True)
        # 使用断言确保 upper 和 answer_upper 相等
        self.assertEqual((upper == answer_upper).all(), True)
######################################################################

class scharTestCase(SuperTensorTestCase):
    # scharTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "schar"
        # 设置实例变量 typeStr 为字符串 "schar"
        
        self.typeCode = "b"
        # 设置实例变量 typeCode 为字符 "b"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class ucharTestCase(SuperTensorTestCase):
    # ucharTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "uchar"
        # 设置实例变量 typeStr 为字符串 "uchar"
        
        self.typeCode = "B"
        # 设置实例变量 typeCode 为字符 "B"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class shortTestCase(SuperTensorTestCase):
    # shortTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "short"
        # 设置实例变量 typeStr 为字符串 "short"
        
        self.typeCode = "h"
        # 设置实例变量 typeCode 为字符 "h"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class ushortTestCase(SuperTensorTestCase):
    # ushortTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "ushort"
        # 设置实例变量 typeStr 为字符串 "ushort"
        
        self.typeCode = "H"
        # 设置实例变量 typeCode 为字符 "H"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class intTestCase(SuperTensorTestCase):
    # intTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "int"
        # 设置实例变量 typeStr 为字符串 "int"
        
        self.typeCode = "i"
        # 设置实例变量 typeCode 为字符 "i"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class uintTestCase(SuperTensorTestCase):
    # uintTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "uint"
        # 设置实例变量 typeStr 为字符串 "uint"
        
        self.typeCode = "I"
        # 设置实例变量 typeCode 为字符 "I"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class longTestCase(SuperTensorTestCase):
    # longTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "long"
        # 设置实例变量 typeStr 为字符串 "long"
        
        self.typeCode = "l"
        # 设置实例变量 typeCode 为字符 "l"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class ulongTestCase(SuperTensorTestCase):
    # ulongTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "ulong"
        # 设置实例变量 typeStr 为字符串 "ulong"
        
        self.typeCode = "L"
        # 设置实例变量 typeCode 为字符 "L"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class longLongTestCase(SuperTensorTestCase):
    # longLongTestCase 类,继承自 SuperTensorTestCase 类

    def __init__(self, methodName="runTest"):
        # 初始化方法,接受一个 methodName 参数,默认为 "runTest"

        SuperTensorTestCase.__init__(self, methodName)
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数

        self.typeStr  = "longLong"
        # 设置实例变量 typeStr 为字符串 "longLong"
        
        self.typeCode = "q"
        # 设置实例变量 typeCode 为字符 "q"

        #self.result   = int(self.result)
        # 注释掉的代码,可能是待解开的功能性代码或注释

######################################################################

class ulongLongTestCase(SuperTensorTestCase):
    # ulongLongTestCase 类,继承自 SuperTensorTestCase 类

    # 此处省略了类的具体实现,可能是意图留待后续添加
    # 定义类的初始化方法,接受一个可选参数 methodName,默认为"runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类 SuperTensorTestCase 的初始化方法,并传入 methodName 参数
        SuperTensorTestCase.__init__(self, methodName)
        # 设置实例变量 typeStr 为字符串 "ulongLong"
        self.typeStr  = "ulongLong"
        # 设置实例变量 typeCode 为字符串 "Q"
        self.typeCode = "Q"
        # 注释掉的代码行,原来是设置实例变量 result 为整数化后的 self.result,已经被注释掉
        #self.result   = int(self.result)
######################################################################

class floatTestCase(SuperTensorTestCase):
    # floatTestCase 类,继承自 SuperTensorTestCase
    def __init__(self, methodName="runTest"):
        # 调用父类构造函数初始化对象
        SuperTensorTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "float"
        self.typeStr  = "float"
        # 设置测试类型代码为 "f"
        self.typeCode = "f"

######################################################################

class doubleTestCase(SuperTensorTestCase):
    # doubleTestCase 类,继承自 SuperTensorTestCase
    def __init__(self, methodName="runTest"):
        # 调用父类构造函数初始化对象
        SuperTensorTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "double"
        self.typeStr  = "double"
        # 设置测试类型代码为 "d"
        self.typeCode = "d"

######################################################################

if __name__ == "__main__":

    # 构建测试套件
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(    scharTestCase))
    suite.addTest(unittest.makeSuite(    ucharTestCase))
    suite.addTest(unittest.makeSuite(    shortTestCase))
    suite.addTest(unittest.makeSuite(   ushortTestCase))
    suite.addTest(unittest.makeSuite(      intTestCase))
    suite.addTest(unittest.makeSuite(     uintTestCase))
    suite.addTest(unittest.makeSuite(     longTestCase))
    suite.addTest(unittest.makeSuite(    ulongTestCase))
    suite.addTest(unittest.makeSuite( longLongTestCase))
    suite.addTest(unittest.makeSuite(ulongLongTestCase))
    suite.addTest(unittest.makeSuite(    floatTestCase))
    suite.addTest(unittest.makeSuite(   doubleTestCase))

    # 执行测试套件
    print("Testing 4D Functions of Module SuperTensor")
    print("NumPy version", np.__version__)
    print()
    # 运行测试套件并获取结果
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    # 根据测试结果判断是否有错误或失败,并退出程序
    sys.exit(bool(result.errors + result.failures))

.\numpy\tools\swig\test\testTensor.py

#!/usr/bin/env python3
# System imports
# 导入数学库中的平方根函数
from   math           import sqrt
# 导入系统库
import sys
# 导入单元测试框架
import unittest

# Import NumPy
# 导入 NumPy 库,并获取其主要和次要版本号
import numpy as np
major, minor = [ int(d) for d in np.__version__.split(".")[:2] ]
# 根据 NumPy 版本号设置异常类型
if major == 0: BadListError = TypeError
else:          BadListError = ValueError

# 导入自定义的 Tensor 模块
import Tensor

######################################################################

# 定义 TensorTestCase 类,继承自 unittest.TestCase
class TensorTestCase(unittest.TestCase):

    # 构造函数,初始化测试用例
    def __init__(self, methodName="runTests"):
        # 调用父类的构造函数
        unittest.TestCase.__init__(self, methodName)
        # 初始化类型字符串
        self.typeStr  = "double"
        # 初始化类型代码
        self.typeCode = "d"
        # 初始化预期结果,为计算平方根后的值
        self.result   = sqrt(28.0/8)

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    # 测试 norm 函数
    def testNorm(self):
        "Test norm function"
        # 输出类型字符串到标准错误
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Tensor 模块中对应类型的 norm 函数
        norm = Tensor.__dict__[self.typeStr + "Norm"]
        # 定义测试用的三维张量
        tensor = [[[0, 1], [2, 3]],
                  [[3, 2], [1, 0]]]
        # 根据结果类型进行断言检查
        if isinstance(self.result, int):
            self.assertEqual(norm(tensor), self.result)
        else:
            self.assertAlmostEqual(norm(tensor), self.result, 6)

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    # 测试包含不良数据的 norm 函数
    def testNormBadList(self):
        "Test norm function with bad list"
        # 输出类型字符串到标准错误
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Tensor 模块中对应类型的 norm 函数
        norm = Tensor.__dict__[self.typeStr + "Norm"]
        # 定义包含不良数据的测试三维张量
        tensor = [[[0, "one"], [2, 3]],
                  [[3, "two"], [1, 0]]]
        # 检查是否引发预期的异常
        self.assertRaises(BadListError, norm, tensor)

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    # 测试维度错误的 norm 函数
    def testNormWrongDim(self):
        "Test norm function with wrong dimensions"
        # 输出类型字符串到标准错误
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Tensor 模块中对应类型的 norm 函数
        norm = Tensor.__dict__[self.typeStr + "Norm"]
        # 定义维度错误的测试二维张量
        tensor = [[0, 1, 2, 3],
                  [3, 2, 1, 0]]
        # 检查是否引发预期的异常
        self.assertRaises(TypeError, norm, tensor)

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    # 测试大小错误的 norm 函数
    def testNormWrongSize(self):
        "Test norm function with wrong size"
        # 输出类型字符串到标准错误
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Tensor 模块中对应类型的 norm 函数
        norm = Tensor.__dict__[self.typeStr + "Norm"]
        # 定义大小错误的测试三维张量
        tensor = [[[0, 1, 0], [2, 3, 2]],
                  [[3, 2, 3], [1, 0, 1]]]
        # 检查是否引发预期的异常
        self.assertRaises(TypeError, norm, tensor)

    # Test (type IN_ARRAY3[ANY][ANY][ANY]) typemap
    # 测试非容器类型的 norm 函数
    def testNormNonContainer(self):
        "Test norm function with non-container"
        # 输出类型字符串到标准错误
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Tensor 模块中对应类型的 norm 函数
        norm = Tensor.__dict__[self.typeStr + "Norm"]
        # 检查是否引发预期的异常
        self.assertRaises(TypeError, norm, None)

    # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 测试 max 函数
    def testMax(self):
        "Test max function"
        # 输出类型字符串到标准错误
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Tensor 模块中对应类型的 max 函数
        max = Tensor.__dict__[self.typeStr + "Max"]
        # 定义测试用的三维张量
        tensor = [[[1, 2], [3, 4]],
                  [[5, 6], [7, 8]]]
        # 检查最大值计算是否正确
        self.assertEqual(max(tensor), 8)

    # Test (type* IN_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 定义一个测试方法,用于测试在存在不良列表情况下的最大函数
    def testMaxBadList(self):
        # 打印当前类型字符串,作为测试标识输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的最大值函数
        max = Tensor.__dict__[self.typeStr + "Max"]
        # 创建一个三维列表,其中包含混合类型的元素
        tensor = [[[1, "two"], [3, 4]],
                  [[5, "six"], [7, 8]]]
        # 断言调用最大值函数时抛出不良列表错误
        self.assertRaises(BadListError, max, tensor)

    # 测试具有非容器类型参数的最大函数
    def testMaxNonContainer(self):
        # 打印当前类型字符串,作为测试标识输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的最大值函数
        max = Tensor.__dict__[self.typeStr + "Max"]
        # 断言调用最大值函数时抛出类型错误,传入参数为 None
        self.assertRaises(TypeError, max, None)

    # 测试具有错误维度的最大函数
    def testMaxWrongDim(self):
        # 打印当前类型字符串,作为测试标识输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的最大值函数
        max = Tensor.__dict__[self.typeStr + "Max"]
        # 断言调用最大值函数时抛出类型错误,传入参数为一维列表
        self.assertRaises(TypeError, max, [0, -1, 2, -3])

    # 测试最小函数
    def testMin(self):
        # 打印当前类型字符串,作为测试标识输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = Tensor.__dict__[self.typeStr + "Min"]
        # 创建一个三维列表,包含整数元素
        tensor = [[[9, 8], [7, 6]],
                  [[5, 4], [3, 2]]]
        # 断言调用最小值函数返回的结果为 2
        self.assertEqual(min(tensor), 2)

    # 测试具有不良列表的最小函数
    def testMinBadList(self):
        # 打印当前类型字符串,作为测试标识输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = Tensor.__dict__[self.typeStr + "Min"]
        # 创建一个三维列表,其中包含混合类型的元素
        tensor = [[["nine", 8], [7, 6]],
                  [["five", 4], [3, 2]]]
        # 断言调用最小值函数时抛出不良列表错误
        self.assertRaises(BadListError, min, tensor)

    # 测试具有非容器类型参数的最小函数
    def testMinNonContainer(self):
        # 打印当前类型字符串,作为测试标识输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = Tensor.__dict__[self.typeStr + "Min"]
        # 断言调用最小值函数时抛出类型错误,传入参数为布尔值 True
        self.assertRaises(TypeError, min, True)

    # 测试具有错误维度的最小函数
    def testMinWrongDim(self):
        # 打印当前类型字符串,作为测试标识输出到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的最小值函数
        min = Tensor.__dict__[self.typeStr + "Min"]
        # 断言调用最小值函数时抛出类型错误,传入参数为二维列表
        self.assertRaises(TypeError, min, [[1, 3], [5, 7]])

    # 测试 (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个名为 testScale 的测试方法,用于测试 scale 函数
    def testScale(self):
        # 打印测试类型的字符串,输出到标准错误流中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 根据类型字符串获取对应的 scale 函数
        scale = Tensor.__dict__[self.typeStr + "Scale"]
        # 创建一个三维 NumPy 数组作为测试用例,使用给定的类型码
        tensor = np.array([[[1, 0, 1], [0, 1, 0], [1, 0, 1]],
                          [[0, 1, 0], [1, 0, 1], [0, 1, 0]],
                          [[1, 0, 1], [0, 1, 0], [1, 0, 1]]], self.typeCode)
        # 调用 scale 函数对 tensor 进行缩放操作
        scale(tensor, 4)
        # 使用断言检查 tensor 是否等于预期的值
        self.assertEqual((tensor == [[[4, 0, 4], [0, 4, 0], [4, 0, 4]],
                                      [[0, 4, 0], [4, 0, 4], [0, 4, 0]],
                                      [[4, 0, 4], [0, 4, 0], [4, 0, 4]]]).all(), True)

    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个名为 testScaleWrongType 的测试方法,测试 scale 函数对于错误类型的处理
    def testScaleWrongType(self):
        # 打印测试类型的字符串,输出到标准错误流中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 根据类型字符串获取对应的 scale 函数
        scale = Tensor.__dict__[self.typeStr + "Scale"]
        # 创建一个三维 NumPy 数组作为测试用例,使用错误的类型码 'c'
        tensor = np.array([[[1, 0, 1], [0, 1, 0], [1, 0, 1]],
                          [[0, 1, 0], [1, 0, 1], [0, 1, 0]],
                          [[1, 0, 1], [0, 1, 0], [1, 0, 1]]], 'c')
        # 使用断言检查 scale 函数是否能正确抛出 TypeError 异常
        self.assertRaises(TypeError, scale, tensor)

    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个名为 testScaleWrongDim 的测试方法,测试 scale 函数对于错误维度的处理
    def testScaleWrongDim(self):
        # 打印测试类型的字符串,输出到标准错误流中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 根据类型字符串获取对应的 scale 函数
        scale = Tensor.__dict__[self.typeStr + "Scale"]
        # 创建一个二维 NumPy 数组作为测试用例,使用给定的类型码
        tensor = np.array([[1, 0, 1], [0, 1, 0], [1, 0, 1],
                          [0, 1, 0], [1, 0, 1], [0, 1, 0]], self.typeCode)
        # 使用断言检查 scale 函数是否能正确抛出 TypeError 异常
        self.assertRaises(TypeError, scale, tensor)

    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个名为 testScaleWrongSize 的测试方法,测试 scale 函数对于错误大小的处理
    def testScaleWrongSize(self):
        # 打印测试类型的字符串,输出到标准错误流中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 根据类型字符串获取对应的 scale 函数
        scale = Tensor.__dict__[self.typeStr + "Scale"]
        # 创建一个二维 NumPy 数组作为测试用例,使用给定的类型码
        tensor = np.array([[[1, 0], [0, 1], [1, 0]],
                          [[0, 1], [1, 0], [0, 1]],
                          [[1, 0], [0, 1], [1, 0]]], self.typeCode)
        # 使用断言检查 scale 函数是否能正确抛出 TypeError 异常
        self.assertRaises(TypeError, scale, tensor)

    # Test (type INPLACE_ARRAY3[ANY][ANY][ANY]) typemap
    # 定义一个名为 testScaleNonArray 的测试方法,测试 scale 函数对于非数组输入的处理
    def testScaleNonArray(self):
        # 打印测试类型的字符串,输出到标准错误流中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 根据类型字符串获取对应的 scale 函数
        scale = Tensor.__dict__[self.typeStr + "Scale"]
        # 使用断言检查 scale 函数是否能正确抛出 TypeError 异常,传入 True 作为参数
        self.assertRaises(TypeError, scale, True)

    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 定义一个名为 testFloor 的测试方法,测试 floor 函数
    def testFloor(self):
        # 打印测试类型的字符串,输出到标准错误流中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 根据类型字符串获取对应的 floor 函数
        floor = Tensor.__dict__[self.typeStr + "Floor"]
        # 创建一个三维 NumPy 数组作为测试用例,使用给定的类型码
        tensor = np.array([[[1, 2], [3, 4]],
                          [[5, 6], [7, 8]]], self.typeCode)
        # 调用 floor 函数对 tensor 进行 floor 操作,将大于等于 4 的元素替换为 4
        floor(tensor, 4)
        # 使用 NumPy 的断言函数检查 tensor 是否与预期值相等
        np.testing.assert_array_equal(tensor, np.array([[[4, 4], [4, 4]],
                                                      [[5, 6], [7, 8]]]))

    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 测试 floor 函数对于错误类型的输入
    def testFloorWrongType(self):
        # 打印类型字符串,指示测试正在进行中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 floor 函数
        floor = Tensor.__dict__[self.typeStr + "Floor"]
        # 创建一个三维 NumPy 数组,使用 'c' 表示以 C 风格存储
        tensor = np.array([[[1, 2], [3, 4]],
                          [[5, 6], [7, 8]]], 'c')
        # 断言调用 floor 函数时会引发 TypeError 异常
        self.assertRaises(TypeError, floor, tensor)

    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 测试 floor 函数对于维度错误的输入
    def testFloorWrongDim(self):
        # 打印类型字符串,指示测试正在进行中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 floor 函数
        floor = Tensor.__dict__[self.typeStr + "Floor"]
        # 创建一个二维 NumPy 数组,使用 self.typeCode 表示数据类型
        tensor = np.array([[1, 2], [3, 4], [5, 6], [7, 8]], self.typeCode)
        # 断言调用 floor 函数时会引发 TypeError 异常
        self.assertRaises(TypeError, floor, tensor)

    # Test (type* INPLACE_ARRAY3, int DIM1, int DIM2, int DIM3) typemap
    # 测试 floor 函数对于非数组输入
    def testFloorNonArray(self):
        # 打印类型字符串,指示测试正在进行中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 floor 函数
        floor = Tensor.__dict__[self.typeStr + "Floor"]
        # 断言调用 floor 函数时会引发 TypeError 异常,输入为 object 类型
        self.assertRaises(TypeError, floor, object)

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    # 测试 ceil 函数的正常使用
    def testCeil(self):
        # 打印类型字符串,指示测试正在进行中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 ceil 函数
        ceil = Tensor.__dict__[self.typeStr + "Ceil"]
        # 创建一个三维 NumPy 数组,使用 self.typeCode 表示数据类型
        tensor = np.array([[[9, 8], [7, 6]],
                          [[5, 4], [3, 2]]], self.typeCode)
        # 调用 ceil 函数对 tensor 进行操作
        ceil(tensor, 5)
        # 使用 NumPy 的断言方法验证数组是否符合预期
        np.testing.assert_array_equal(tensor, np.array([[[5, 5], [5, 5]],
                                                      [[5, 4], [3, 2]]]))

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    # 测试 ceil 函数对于错误类型的输入
    def testCeilWrongType(self):
        # 打印类型字符串,指示测试正在进行中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 ceil 函数
        ceil = Tensor.__dict__[self.typeStr + "Ceil"]
        # 创建一个三维 NumPy 数组,使用 'c' 表示以 C 风格存储
        tensor = np.array([[[9, 8], [7, 6]],
                          [[5, 4], [3, 2]]], 'c')
        # 断言调用 ceil 函数时会引发 TypeError 异常
        self.assertRaises(TypeError, ceil, tensor)

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    # 测试 ceil 函数对于维度错误的输入
    def testCeilWrongDim(self):
        # 打印类型字符串,指示测试正在进行中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 ceil 函数
        ceil = Tensor.__dict__[self.typeStr + "Ceil"]
        # 创建一个二维 NumPy 数组,使用 self.typeCode 表示数据类型
        tensor = np.array([[9, 8], [7, 6], [5, 4], [3, 2]], self.typeCode)
        # 断言调用 ceil 函数时会引发 TypeError 异常
        self.assertRaises(TypeError, ceil, tensor)

    # Test (int DIM1, int DIM2, int DIM3, type* INPLACE_ARRAY3) typemap
    # 测试 ceil 函数对于非数组输入
    def testCeilNonArray(self):
        # 打印类型字符串,指示测试正在进行中
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取当前类型对应的 ceil 函数
        ceil = Tensor.__dict__[self.typeStr + "Ceil"]
        # 创建一个嵌套列表表示的三维数组
        tensor = [[[9, 8], [7, 6]],
                  [[5, 4], [3, 2]]]
        # 断言调用 ceil 函数时会引发 TypeError 异常
        self.assertRaises(TypeError, ceil, tensor)

    # Test (type ARGOUT_ARRAY3[ANY][ANY][ANY]) typemap
    # 这个测试用例的注释未提供,可能需要补充
    def testLUSplit(self):
        "Test luSplit function"
        # 打印测试类型字符串到标准错误流,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        
        # 获取当前类型的 luSplit 函数
        luSplit = Tensor.__dict__[self.typeStr + "LUSplit"]
        
        # 对输入张量进行 LU 分解,分别得到下三角矩阵 lower 和上三角矩阵 upper
        lower, upper = luSplit([[[1, 1], [1, 1]],
                                [[1, 1], [1, 1]]])
        
        # 断言下三角矩阵 lower 是否与预期相等
        self.assertEqual((lower == [[[1, 1], [1, 0]],
                                     [[1, 0], [0, 0]]]).all(), True)
        
        # 断言上三角矩阵 upper 是否与预期相等
        self.assertEqual((upper == [[[0, 0], [0, 1]],
                                     [[0, 1], [1, 1]]]).all(), True)
######################################################################

class scharTestCase(TensorTestCase):
    # scharTestCase 类,继承自 TensorTestCase 类,用于测试有符号字符类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "schar"
        self.typeCode = "b"
        self.result   = int(self.result)

######################################################################

class ucharTestCase(TensorTestCase):
    # ucharTestCase 类,继承自 TensorTestCase 类,用于测试无符号字符类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "uchar"
        self.typeCode = "B"
        self.result   = int(self.result)

######################################################################

class shortTestCase(TensorTestCase):
    # shortTestCase 类,继承自 TensorTestCase 类,用于测试短整型类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "short"
        self.typeCode = "h"
        self.result   = int(self.result)

######################################################################

class ushortTestCase(TensorTestCase):
    # ushortTestCase 类,继承自 TensorTestCase 类,用于测试无符号短整型类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "ushort"
        self.typeCode = "H"
        self.result   = int(self.result)

######################################################################

class intTestCase(TensorTestCase):
    # intTestCase 类,继承自 TensorTestCase 类,用于测试整型类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "int"
        self.typeCode = "i"
        self.result   = int(self.result)

######################################################################

class uintTestCase(TensorTestCase):
    # uintTestCase 类,继承自 TensorTestCase 类,用于测试无符号整型类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "uint"
        self.typeCode = "I"
        self.result   = int(self.result)

######################################################################

class longTestCase(TensorTestCase):
    # longTestCase 类,继承自 TensorTestCase 类,用于测试长整型类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "long"
        self.typeCode = "l"
        self.result   = int(self.result)

######################################################################

class ulongTestCase(TensorTestCase):
    # ulongTestCase 类,继承自 TensorTestCase 类,用于测试无符号长整型类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "ulong"
        self.typeCode = "L"
        self.result   = int(self.result)

######################################################################

class longLongTestCase(TensorTestCase):
    # longLongTestCase 类,继承自 TensorTestCase 类,用于测试长长整型类型的测试用例
    def __init__(self, methodName="runTest"):
        # 初始化方法,调用父类的初始化方法,并设置类型字符串、类型代码和结果值
        TensorTestCase.__init__(self, methodName)
        self.typeStr  = "longLong"
        self.typeCode = "q"
        self.result   = int(self.result)

######################################################################

class ulongLongTestCase(TensorTestCase):
    # ulongLongTestCase 类,继承自 TensorTestCase 类,用于测试无符号长长整型类型的测试用例
    # 初始化方法,用于创建对象实例
    def __init__(self, methodName="runTest"):
        # 调用父类 TensorTestCase 的初始化方法,传入当前对象实例和方法名
        TensorTestCase.__init__(self, methodName)
        # 设置对象实例的 typeStr 属性为字符串 "ulongLong"
        self.typeStr  = "ulongLong"
        # 设置对象实例的 typeCode 属性为字符串 "Q"
        self.typeCode = "Q"
        # 将对象实例的 result 属性转换为整数类型
        self.result   = int(self.result)
######################################################################

# 定义一个继承自 TensorTestCase 的浮点数测试用例类
class floatTestCase(TensorTestCase):
    # 初始化方法,接受一个可选的 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类 TensorTestCase 的初始化方法
        TensorTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "float"
        self.typeStr  = "float"
        # 设置测试类型代码为 "f"
        self.typeCode = "f"

######################################################################

# 定义一个继承自 TensorTestCase 的双精度浮点数测试用例类
class doubleTestCase(TensorTestCase):
    # 初始化方法,接受一个可选的 methodName 参数,默认为 "runTest"
    def __init__(self, methodName="runTest"):
        # 调用父类 TensorTestCase 的初始化方法
        TensorTestCase.__init__(self, methodName)
        # 设置测试类型字符串为 "double"
        self.typeStr  = "double"
        # 设置测试类型代码为 "d"

######################################################################

# 确保当前文件是主程序时执行以下代码块
if __name__ == "__main__":

    # 构建测试套件
    suite = unittest.TestSuite()
    # 将各个测试用例类添加到测试套件中
    suite.addTest(unittest.makeSuite(    scharTestCase))
    suite.addTest(unittest.makeSuite(    ucharTestCase))
    suite.addTest(unittest.makeSuite(    shortTestCase))
    suite.addTest(unittest.makeSuite(   ushortTestCase))
    suite.addTest(unittest.makeSuite(      intTestCase))
    suite.addTest(unittest.makeSuite(     uintTestCase))
    suite.addTest(unittest.makeSuite(     longTestCase))
    suite.addTest(unittest.makeSuite(    ulongTestCase))
    suite.addTest(unittest.makeSuite( longLongTestCase))
    suite.addTest(unittest.makeSuite(ulongLongTestCase))
    suite.addTest(unittest.makeSuite(    floatTestCase))
    suite.addTest(unittest.makeSuite(   doubleTestCase))

    # 执行测试套件
    print("Testing 3D Functions of Module Tensor")
    # 打印 NumPy 版本信息
    print("NumPy version", np.__version__)
    print()
    # 运行测试套件,并获取测试结果
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    # 根据测试结果,退出程序并返回是否有错误或失败的布尔值
    sys.exit(bool(result.errors + result.failures))

.\numpy\tools\swig\test\testVector.py

#!/usr/bin/env python3
# System imports
import sys
import unittest

# Import NumPy
import numpy as np
major, minor = [ int(d) for d in np.__version__.split(".")[:2] ]
if major == 0: BadListError = TypeError
else:          BadListError = ValueError

# Import Vector module
import Vector

######################################################################

class VectorTestCase(unittest.TestCase):

    def __init__(self, methodName="runTest"):
        unittest.TestCase.__init__(self, methodName)
        self.typeStr  = "double"
        self.typeCode = "d"

    # Test the (type IN_ARRAY1[ANY]) typemap
    def testLength(self):
        "Test length function"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的长度函数并测试
        length = Vector.__dict__[self.typeStr + "Length"]
        self.assertEqual(length([5, 12, 0]), 13)

    # Test the (type IN_ARRAY1[ANY]) typemap
    def testLengthBadList(self):
        "Test length function with bad list"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的长度函数并测试,预期抛出 BadListError 异常
        length = Vector.__dict__[self.typeStr + "Length"]
        self.assertRaises(BadListError, length, [5, "twelve", 0])

    # Test the (type IN_ARRAY1[ANY]) typemap
    def testLengthWrongSize(self):
        "Test length function with wrong size"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的长度函数并测试,预期抛出 TypeError 异常
        length = Vector.__dict__[self.typeStr + "Length"]
        self.assertRaises(TypeError, length, [5, 12])

    # Test the (type IN_ARRAY1[ANY]) typemap
    def testLengthWrongDim(self):
        "Test length function with wrong dimensions"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的长度函数并测试,预期抛出 TypeError 异常
        length = Vector.__dict__[self.typeStr + "Length"]
        self.assertRaises(TypeError, length, [[1, 2], [3, 4]])

    # Test the (type IN_ARRAY1[ANY]) typemap
    def testLengthNonContainer(self):
        "Test length function with non-container"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的长度函数并测试,预期抛出 TypeError 异常
        length = Vector.__dict__[self.typeStr + "Length"]
        self.assertRaises(TypeError, length, None)

    # Test the (type* IN_ARRAY1, int DIM1) typemap
    def testProd(self):
        "Test prod function"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的乘积函数并测试
        prod = Vector.__dict__[self.typeStr + "Prod"]
        self.assertEqual(prod([1, 2, 3, 4]), 24)

    # Test the (type* IN_ARRAY1, int DIM1) typemap
    def testProdBadList(self):
        "Test prod function with bad list"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的乘积函数并测试,预期抛出 BadListError 异常
        prod = Vector.__dict__[self.typeStr + "Prod"]
        self.assertRaises(BadListError, prod, [[1, "two"], ["e", "pi"]])

    # Test the (type* IN_ARRAY1, int DIM1) typemap
    def testProdWrongDim(self):
        "Test prod function with wrong dimensions"
        # 输出测试类型和测试开始信息到标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的乘积函数并测试,预期抛出 TypeError 异常
        prod = Vector.__dict__[self.typeStr + "Prod"]
        self.assertRaises(TypeError, prod, [[1, 2], [8, 9]])

    # Test the (type* IN_ARRAY1, int DIM1) typemap
    # 测试非容器对象的 prod 函数
    def testProdNonContainer(self):
        "Test prod function with non-container"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 prod 函数
        prod = Vector.__dict__[self.typeStr + "Prod"]
        # 断言调用 prod 函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, prod, None)

    # 测试 sum 函数,参数为 (int DIM1, type* IN_ARRAY1) typemap
    def testSum(self):
        "Test sum function"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 sum 函数
        sum = Vector.__dict__[self.typeStr + "Sum"]
        # 断言 sum 函数对 [5, 6, 7, 8] 的计算结果为 26
        self.assertEqual(sum([5, 6, 7, 8]), 26)

    # 测试 sum 函数,参数为 (int DIM1, type* IN_ARRAY1) typemap,使用错误的列表
    def testSumBadList(self):
        "Test sum function with bad list"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 sum 函数
        sum = Vector.__dict__[self.typeStr + "Sum"]
        # 断言调用 sum 函数时会抛出 BadListError 异常,因为列表包含非数值类型元素
        self.assertRaises(BadListError, sum, [3, 4, 5, "pi"])

    # 测试 sum 函数,参数为 (int DIM1, type* IN_ARRAY1) typemap,使用错误的维度
    def testSumWrongDim(self):
        "Test sum function with wrong dimensions"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 sum 函数
        sum = Vector.__dict__[self.typeStr + "Sum"]
        # 断言调用 sum 函数时会抛出 TypeError 异常,因为输入的是二维列表而不是一维列表
        self.assertRaises(TypeError, sum, [[3, 4], [5, 6]])

    # 测试 sum 函数,参数为 (int DIM1, type* IN_ARRAY1) typemap,使用非容器对象
    def testSumNonContainer(self):
        "Test sum function with non-container"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 sum 函数
        sum = Vector.__dict__[self.typeStr + "Sum"]
        # 断言调用 sum 函数时会抛出 TypeError 异常,因为输入参数是 True,而不是可迭代对象
        self.assertRaises(TypeError, sum, True)

    # 测试 reverse 函数,参数为 (type INPLACE_ARRAY1[ANY]) typemap
    def testReverse(self):
        "Test reverse function"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 reverse 函数
        reverse = Vector.__dict__[self.typeStr + "Reverse"]
        # 创建一个包含 [1, 2, 4] 的 NumPy 数组,并进行反转操作
        vector = np.array([1, 2, 4], self.typeCode)
        reverse(vector)
        # 断言 vector 是否等于 [4, 2, 1] 的所有元素,即反转是否成功
        self.assertEqual((vector == [4, 2, 1]).all(), True)

    # 测试 reverse 函数,参数为 (type INPLACE_ARRAY1[ANY]) typemap,使用错误的维度
    def testReverseWrongDim(self):
        "Test reverse function with wrong dimensions"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 reverse 函数
        reverse = Vector.__dict__[self.typeStr + "Reverse"]
        # 创建一个二维 NumPy 数组作为参数,断言调用 reverse 函数时会抛出 TypeError 异常
        vector = np.array([[1, 2], [3, 4]], self.typeCode)
        self.assertRaises(TypeError, reverse, vector)

    # 测试 reverse 函数,参数为 (type INPLACE_ARRAY1[ANY]) typemap,使用错误的大小
    def testReverseWrongSize(self):
        "Test reverse function with wrong size"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 reverse 函数
        reverse = Vector.__dict__[self.typeStr + "Reverse"]
        # 创建一个包含 [9, 8, 7, 6, 5, 4] 的 NumPy 数组作为参数,断言调用 reverse 函数时会抛出 TypeError 异常
        vector = np.array([9, 8, 7, 6, 5, 4], self.typeCode)
        self.assertRaises(TypeError, reverse, vector)

    # 测试 reverse 函数,参数为 (type INPLACE_ARRAY1[ANY]) typemap,使用错误的类型
    def testReverseWrongType(self):
        "Test reverse function with wrong type"
        # 打印测试类型字符串到标准错误,不换行
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取对应类型的 reverse 函数
        reverse = Vector.__dict__[self.typeStr + "Reverse"]
        # 创建一个包含 [1, 2, 4] 的 NumPy 数组,但指定错误的类型 'c',断言调用 reverse 函数时会抛出 TypeError 异常
        vector = np.array([1, 2, 4], 'c')
        self.assertRaises(TypeError, reverse, vector)
    def testReverseNonArray(self):
        "Test reverse function with non-array"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的反转函数
        reverse = Vector.__dict__[self.typeStr + "Reverse"]
        # 断言调用反转函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, reverse, [2, 4, 6])

    # Test the (type* INPLACE_ARRAY1, int DIM1) typemap
    def testOnes(self):
        "Test ones function"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的ones函数
        ones = Vector.__dict__[self.typeStr + "Ones"]
        # 创建一个全零的向量数组
        vector = np.zeros(5, self.typeCode)
        # 调用ones函数将向量数组填充为全1
        ones(vector)
        # 使用 NumPy 测试工具断言向量数组与期望的全1数组相等
        np.testing.assert_array_equal(vector, np.array([1, 1, 1, 1, 1]))

    # Test the (type* INPLACE_ARRAY1, int DIM1) typemap
    def testOnesWrongDim(self):
        "Test ones function with wrong dimensions"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的ones函数
        ones = Vector.__dict__[self.typeStr + "Ones"]
        # 创建一个维度为(5, 5)的全零向量数组
        vector = np.zeros((5, 5), self.typeCode)
        # 断言调用ones函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, ones, vector)

    # Test the (type* INPLACE_ARRAY1, int DIM1) typemap
    def testOnesWrongType(self):
        "Test ones function with wrong type"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的ones函数
        ones = Vector.__dict__[self.typeStr + "Ones"]
        # 创建一个类型为'c'的向量数组
        vector = np.zeros((5, 5), 'c')
        # 断言调用ones函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, ones, vector)

    # Test the (type* INPLACE_ARRAY1, int DIM1) typemap
    def testOnesNonArray(self):
        "Test ones function with non-array"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的ones函数
        ones = Vector.__dict__[self.typeStr + "Ones"]
        # 断言调用ones函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, ones, [2, 4, 6, 8])

    # Test the (int DIM1, type* INPLACE_ARRAY1) typemap
    def testZeros(self):
        "Test zeros function"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的zeros函数
        zeros = Vector.__dict__[self.typeStr + "Zeros"]
        # 创建一个全1的向量数组
        vector = np.ones(5, self.typeCode)
        # 调用zeros函数将向量数组填充为全0
        zeros(vector)
        # 使用 NumPy 测试工具断言向量数组与期望的全0数组相等
        np.testing.assert_array_equal(vector, np.array([0, 0, 0, 0, 0]))

    # Test the (int DIM1, type* INPLACE_ARRAY1) typemap
    def testZerosWrongDim(self):
        "Test zeros function with wrong dimensions"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的zeros函数
        zeros = Vector.__dict__[self.typeStr + "Zeros"]
        # 创建一个维度为(5, 5)的全1向量数组
        vector = np.ones((5, 5), self.typeCode)
        # 断言调用zeros函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, zeros, vector)

    # Test the (int DIM1, type* INPLACE_ARRAY1) typemap
    def testZerosWrongType(self):
        "Test zeros function with wrong type"
        # 输出测试类型字符串到标准错误流
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取指定类型的zeros函数
        zeros = Vector.__dict__[self.typeStr + "Zeros"]
        # 创建一个类型为'c'的全1向量数组
        vector = np.ones(6, 'c')
        # 断言调用zeros函数时会抛出 TypeError 异常
        self.assertRaises(TypeError, zeros, vector)
    # 定义一个测试方法,测试当参数不是数组时的情况
    def testZerosNonArray(self):
        "Test zeros function with non-array"
        # 打印当前类型字符串,指示测试开始,使用标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Vector 类的对应类型加上 "Zeros" 的方法,并引发 TypeError 异常,期望传入参数为列表
        zeros = Vector.__dict__[self.typeStr + "Zeros"]
        self.assertRaises(TypeError, zeros, [1, 3, 5, 7, 9])

    # 测试 (type ARGOUT_ARRAY1[ANY]) 类型映射的 typemap
    def testEOSplit(self):
        "Test eoSplit function"
        # 打印当前类型字符串,指示测试开始,使用标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Vector 类的对应类型加上 "EOSplit" 的方法,并测试其返回的 even 和 odd 是否符合预期
        eoSplit = Vector.__dict__[self.typeStr + "EOSplit"]
        even, odd = eoSplit([1, 2, 3])
        self.assertEqual((even == [1, 0, 3]).all(), True)
        self.assertEqual((odd  == [0, 2, 0]).all(), True)

    # 测试 (type* ARGOUT_ARRAY1, int DIM1) 类型映射的 typemap
    def testTwos(self):
        "Test twos function"
        # 打印当前类型字符串,指示测试开始,使用标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Vector 类的对应类型加上 "Twos" 的方法,并测试其返回的向量是否为全是 2 的数组
        twos = Vector.__dict__[self.typeStr + "Twos"]
        vector = twos(5)
        self.assertEqual((vector == [2, 2, 2, 2, 2]).all(), True)

    # 测试 (type* ARGOUT_ARRAY1, int DIM1) 类型映射的 typemap,验证传入非整数维度时的行为
    def testTwosNonInt(self):
        "Test twos function with non-integer dimension"
        # 打印当前类型字符串,指示测试开始,使用标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Vector 类的对应类型加上 "Twos" 的方法,并引发 TypeError 异常,期望传入参数为整数
        twos = Vector.__dict__[self.typeStr + "Twos"]
        self.assertRaises(TypeError, twos, 5.0)

    # 测试 (int DIM1, type* ARGOUT_ARRAY1) 类型映射的 typemap
    def testThrees(self):
        "Test threes function"
        # 打印当前类型字符串,指示测试开始,使用标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Vector 类的对应类型加上 "Threes" 的方法,并测试其返回的向量是否为全是 3 的数组
        threes = Vector.__dict__[self.typeStr + "Threes"]
        vector = threes(6)
        self.assertEqual((vector == [3, 3, 3, 3, 3, 3]).all(), True)

    # 测试 (type* ARGOUT_ARRAY1, int DIM1) 类型映射的 typemap,验证传入非整数维度时的行为
    def testThreesNonInt(self):
        "Test threes function with non-integer dimension"
        # 打印当前类型字符串,指示测试开始,使用标准错误输出
        print(self.typeStr, "... ", end=' ', file=sys.stderr)
        # 获取 Vector 类的对应类型加上 "Threes" 的方法,并引发 TypeError 异常,期望传入参数为整数
        threes = Vector.__dict__[self.typeStr + "Threes"]
        self.assertRaises(TypeError, threes, "threes")
######################################################################

class scharTestCase(VectorTestCase):
    # scharTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'schar'
        self.typeStr  = "schar"
        # 设置类型代码为 'b'
        self.typeCode = "b"

######################################################################

class ucharTestCase(VectorTestCase):
    # ucharTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'uchar'
        self.typeStr  = "uchar"
        # 设置类型代码为 'B'
        self.typeCode = "B"

######################################################################

class shortTestCase(VectorTestCase):
    # shortTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'short'
        self.typeStr  = "short"
        # 设置类型代码为 'h'
        self.typeCode = "h"

######################################################################

class ushortTestCase(VectorTestCase):
    # ushortTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'ushort'
        self.typeStr  = "ushort"
        # 设置类型代码为 'H'
        self.typeCode = "H"

######################################################################

class intTestCase(VectorTestCase):
    # intTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'int'
        self.typeStr  = "int"
        # 设置类型代码为 'i'
        self.typeCode = "i"

######################################################################

class uintTestCase(VectorTestCase):
    # uintTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'uint'
        self.typeStr  = "uint"
        # 设置类型代码为 'I'
        self.typeCode = "I"

######################################################################

class longTestCase(VectorTestCase):
    # longTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'long'
        self.typeStr  = "long"
        # 设置类型代码为 'l'
        self.typeCode = "l"

######################################################################

class ulongTestCase(VectorTestCase):
    # ulongTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'ulong'
        self.typeStr  = "ulong"
        # 设置类型代码为 'L'
        self.typeCode = "L"

######################################################################

class longLongTestCase(VectorTestCase):
    # longLongTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'longLong'
        self.typeStr  = "longLong"
        # 设置类型代码为 'q'
        self.typeCode = "q"

######################################################################

class ulongLongTestCase(VectorTestCase):
    # ulongLongTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'ulongLong'
        self.typeStr  = "ulongLong"
        # 设置类型代码为 'Q'
        self.typeCode = "Q"

######################################################################

class floatTestCase(VectorTestCase):
    # floatTestCase 类继承自 VectorTestCase 类
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的初始化方法
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 'float'
        self.typeStr  = "float"
        # 设置类型代码为 'f'
        self.typeCode = "f"

######################################################################
######################################################################

class doubleTestCase(VectorTestCase):
    # 定义 doubleTestCase 类,继承自 VectorTestCase
    def __init__(self, methodName="runTest"):
        # 调用父类 VectorTestCase 的构造函数初始化
        VectorTestCase.__init__(self, methodName)
        # 设置类型字符串为 "double"
        self.typeStr  = "double"
        # 设置类型代码为 "d"
        self.typeCode = "d"

######################################################################

if __name__ == "__main__":
    # 如果作为主程序运行

    # 创建一个测试套件
    suite = unittest.TestSuite()
    # 将各个类型的测试用例添加到测试套件中
    suite.addTest(unittest.makeSuite(    scharTestCase))
    suite.addTest(unittest.makeSuite(    ucharTestCase))
    suite.addTest(unittest.makeSuite(    shortTestCase))
    suite.addTest(unittest.makeSuite(   ushortTestCase))
    suite.addTest(unittest.makeSuite(      intTestCase))
    suite.addTest(unittest.makeSuite(     uintTestCase))
    suite.addTest(unittest.makeSuite(     longTestCase))
    suite.addTest(unittest.makeSuite(    ulongTestCase))
    suite.addTest(unittest.makeSuite( longLongTestCase))
    suite.addTest(unittest.makeSuite(ulongLongTestCase))
    suite.addTest(unittest.makeSuite(    floatTestCase))
    suite.addTest(unittest.makeSuite(   doubleTestCase))

    # 执行测试套件中的测试用例
    print("Testing 1D Functions of Module Vector")
    # 打印 NumPy 的版本号
    print("NumPy version", np.__version__)
    print()
    # 运行测试并获取测试结果
    result = unittest.TextTestRunner(verbosity=2).run(suite)
    # 根据测试结果,如果有错误或失败,以非零状态退出,否则以零状态退出
    sys.exit(bool(result.errors + result.failures))

.\numpy\tools\swig\test\Vector.cxx

// 包含标准库头文件:stdlib.h(包含通用函数)、math.h(包含数学函数)、iostream(输入输出流)
#include <stdlib.h>
#include <math.h>
#include <iostream>
// 引入自定义头文件 "Vector.h"
#include "Vector.h"

// 定义宏 TEST_FUNCS,生成一系列函数,用于处理给定类型的一维数组
#define TEST_FUNCS(TYPE, SNAME) \
\
// 计算向量长度,接受长度为3的向量数组作为参数
TYPE SNAME ## Length(TYPE vector[3]) {                   \
  double result = 0;                                     \
  // 计算向量的模长
  for (int i=0; i<3; ++i) result += vector[i]*vector[i]; \
  return (TYPE)sqrt(result);                        \
}                                                        \
\
// 计算数组元素的乘积,接受指向数组的指针和数组大小作为参数
TYPE SNAME ## Prod(TYPE * series, int size) {     \
  TYPE result = 1;                                \
  // 计算数组元素的乘积
  for (int i=0; i<size; ++i) result *= series[i]; \
  return result;                                  \
}                                                 \
\
// 计算数组元素的总和,接受数组大小和指向数组的指针作为参数
TYPE SNAME ## Sum(int size, TYPE * series) {      \
  TYPE result = 0;                                \
  // 计算数组元素的总和
  for (int i=0; i<size; ++i) result += series[i]; \
  return result;                                  \
}                                                 \
\
// 将数组中的元素反转,接受长度为3的数组作为参数
void SNAME ## Reverse(TYPE array[3]) { \
  TYPE temp = array[0];               \
  array[0] = array[2];                 \
  array[2] = temp;                     \
}                                      \
\
// 将数组中的所有元素设置为1,接受指向数组的指针和数组大小作为参数
void SNAME ## Ones(TYPE * array, int size) { \
  // 将数组中所有元素设置为1
  for (int i=0; i<size; ++i) array[i] = 1;   \
}                                            \
\
// 将数组中的所有元素设置为0,接受数组大小和指向数组的指针作为参数
void SNAME ## Zeros(int size, TYPE * array) { \
  // 将数组中所有元素设置为0
  for (int i=0; i<size; ++i) array[i] = 0;    \
}                                             \
\
// 将一个长度为3的向量数组拆分为奇数位和偶数位数组,接受源向量、偶数位数组和奇数位数组作为参数
void SNAME ## EOSplit(TYPE vector[3], TYPE even[3], TYPE odd[3]) { \
  for (int i=0; i<3; ++i) {                       \
    // 将偶数位元素复制到偶数位数组
    if (i % 2 == 0) {                           \
      even[i] = vector[i];                       \
      // 将奇数位元素设置为0
      odd[ i] = 0;                           \
    } else {                               \
      even[i] = 0;                           \  # 如果当前索引处的元素为偶数,则将 even 数组对应位置置为 0
      odd[ i] = vector[i];                       \  # 如果当前索引处的元素为奇数,则将 odd 数组对应位置设置为 vector 数组当前位置的值
    }                                   \  # 结束 if-else 分支
  }                                   \  # 结束 for 循环
# 定义一个以给定类型和名称为前缀的函数,将给定数组中的所有元素设置为2
void SNAME ## Twos(TYPE* twoVec, int size) {
  # 循环遍历数组,将每个元素设置为2
  for (int i=0; i<size; ++i) twoVec[i] = 2;
}

# 定义一个以给定名称为前缀的函数,将给定数组中的所有元素设置为3
void SNAME ## Threes(int size, TYPE* threeVec) {
  # 循环遍历数组,将每个元素设置为3
  for (int i=0; i<size; ++i) threeVec[i] = 3;
}

# 以下是为不同数据类型定义测试函数的宏展开
TEST_FUNCS(signed char       , schar    )
TEST_FUNCS(unsigned char     , uchar    )
TEST_FUNCS(short             , short    )
TEST_FUNCS(unsigned short    , ushort   )
TEST_FUNCS(int               , int      )
TEST_FUNCS(unsigned int      , uint     )
TEST_FUNCS(long              , long     )
TEST_FUNCS(unsigned long     , ulong    )
TEST_FUNCS(long long         , longLong )
TEST_FUNCS(unsigned long long, ulongLong)
TEST_FUNCS(float             , float    )
TEST_FUNCS(double            , double   )


每个函数和宏的作用已经通过注释清楚地描述了出来,不改变代码的结构和缩进。

.\numpy\tools\swig\test\Vector.h

#ifndef VECTOR_H
#define VECTOR_H

// 定义了一系列与一维数组操作相关的函数原型的宏
//
//     TYPE SNAMELength( TYPE vector[3]);
//     TYPE SNAMEProd(   TYPE * series, int size);
//     TYPE SNAMESum(    int size, TYPE * series);
//     void SNAMEReverse(TYPE array[3]);
//     void SNAMEOnes(   TYPE * array,  int size);
//     void SNAMEZeros(  int size, TYPE * array);
//     void SNAMEEOSplit(TYPE vector[3], TYPE even[3], TYPE odd[3]);
//     void SNAMETwos(   TYPE * twoVec, int size);
//     void SNAMEThrees( int size, TYPE * threeVec);
//
// 对于指定的类型 TYPE(例如:short、unsigned int、long long 等),使用简称 SNAME
// (例如:short、uint、longLong 等)定义这些函数原型。宏会根据给定的 TYPE/SNAME 组合
// 进行扩展。生成的函数用于测试 numpy 接口,分别为:
//
//  * 针对固定长度的一维输入数组
//  * 针对一维输入数组
//  * 针对一维输入数组,数据在最后
//  * 针对固定长度的一维原地操作数组
//  * 针对一维原地操作数组
//  * 针对一维原地操作数组,数据在最后
//  * 针对固定长度的一维输出数组
//  * 针对一维输出数组
//  * 针对一维输出数组,数据在最后
//
#define TEST_FUNC_PROTOS(TYPE, SNAME) \
\
TYPE SNAME ## Length( TYPE vector[3]); \
TYPE SNAME ## Prod(   TYPE * series, int size); \
TYPE SNAME ## Sum(    int size, TYPE * series); \
void SNAME ## Reverse(TYPE array[3]); \
void SNAME ## Ones(   TYPE * array,  int size); \
void SNAME ## Zeros(  int size, TYPE * array); \
void SNAME ## EOSplit(TYPE vector[3], TYPE even[3], TYPE odd[3]); \
void SNAME ## Twos(   TYPE * twoVec, int size); \
void SNAME ## Threes( int size, TYPE * threeVec); \

// 使用宏扩展,生成不同类型的函数原型
TEST_FUNC_PROTOS(signed char       , schar    )
TEST_FUNC_PROTOS(unsigned char     , uchar    )
TEST_FUNC_PROTOS(short             , short    )
TEST_FUNC_PROTOS(unsigned short    , ushort   )
TEST_FUNC_PROTOS(int               , int      )
TEST_FUNC_PROTOS(unsigned int      , uint     )
TEST_FUNC_PROTOS(long              , long     )
TEST_FUNC_PROTOS(unsigned long     , ulong    )
TEST_FUNC_PROTOS(long long         , longLong )
TEST_FUNC_PROTOS(unsigned long long, ulongLong)
TEST_FUNC_PROTOS(float             , float    )
TEST_FUNC_PROTOS(double            , double   )

#endif

.\numpy\tools\wheels\check_license.py

#!/usr/bin/env python
"""
check_license.py [MODULE]

Check the presence of a LICENSE.txt in the installed module directory,
and that it appears to contain text prevalent for a NumPy binary
distribution.

"""
import sys  # 导入 sys 模块,用于访问系统相关的功能
import re  # 导入 re 模块,用于正则表达式操作
import argparse  # 导入 argparse 模块,用于解析命令行参数
import pathlib  # 导入 pathlib 模块,用于处理文件路径

def check_text(text):
    # 检查文本是否包含 "Copyright (c)" 并且符合预期的二进制分发文本模式
    ok = "Copyright (c)" in text and re.search(
        r"This binary distribution of \w+ also bundles the following software",
        text,
    )
    return ok

def main():
    p = argparse.ArgumentParser(usage=__doc__.rstrip())
    p.add_argument("module", nargs="?", default="numpy")
    args = p.parse_args()

    # 从 sys.path 中移除空字符串项
    sys.path.pop(0)

    # 寻找指定模块的路径
    __import__(args.module)
    mod = sys.modules[args.module]

    # LICENSE.txt 通常安装在 .dist-info 目录中,因此在此查找它
    sitepkgs = pathlib.Path(mod.__file__).parent.parent
    distinfo_path = [s for s in sitepkgs.glob("numpy-*.dist-info")][0]

    # 检查许可证文本
    license_txt = distinfo_path / "LICENSE.txt"
    with open(license_txt, encoding="utf-8") as f:
        text = f.read()

    # 调用 check_text 函数检查许可证文本是否符合预期
    ok = check_text(text)
    if not ok:
        print(
            "ERROR: License text {} does not contain expected "
            "text fragments\n".format(license_txt)
        )
        print(text)
        sys.exit(1)

    sys.exit(0)

if __name__ == "__main__":
    main()