小编MBR*_*MBR的帖子

如何编写嵌套的 __init__.py 文件

我正在努力解决嵌套__init__.py在我正在编写的Python包中的问题。该包具有以下架构:

\n
module/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 submodule1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 source.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 submodule2\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 source.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 subsubmodule2\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 source.py\n
Run Code Online (Sandbox Code Playgroud)\n

我的目的是能够访问submodule2/source.pythroughmodule.submodule2.function和 in subsubmodules2/source.pythrough中定义的函数module.submodule2.subsubmodule2.function

\n

我尝试的第一件事就是__init__.py这样定义submodule2

\n
from .subsubmodule2 import *\n
Run Code Online (Sandbox Code Playgroud)\n

subsubmodules2/source.py但这样做,我得到了through module.submodule2.function(and )中定义的函数module.function

\n

如果我做:

\n
from . import subsubmodule2\n
Run Code Online (Sandbox Code Playgroud)\n

我通过module.subsubmodule2.function.

\n

我还尝试__all__在 中定义关键字__init__,但没有成功。如果我很好地理解Python 文档,我想我可以保留空__init__.py文件并且它可以工作,但根据我的理解,这也不是最佳实践。

\n

按照我的模块的预期访问这些功能的最佳方式是什么?

\n

python python-module python-3.x

6
推荐指数
1
解决办法
3715
查看次数

MPI-IO:写子阵列

我开始使用MPI-IO并试图写一个我想用它做的事情的一个非常简单的例子; 然而,即使它是一个简单的代码,我从这里和那里读到的例子中获得了一些灵感,我得到了一个我不明白的分段错误.

这段代码的逻辑非常简单:每个线程都将处理一个本地数组,该数组是我想写的全局数组的一部分.我使用MPI_Type_Create_Subarray这样做创建一个子阵列类型.然后我只是打开文件,设置视图并尝试写入数据.我在这期间得到了分段错误MPI_File_Write_All.

这是代码:

program test
  implicit none

  include "mpif.h"

  integer :: myrank, nproc, fhandle, ierr
  integer :: xpos, ypos
  integer, parameter :: loc_x=10, loc_y=10
  integer :: loc_dim
  integer :: nx=2, ny=2
  real(8), dimension(loc_x, loc_y) :: data
  integer :: written_arr
  integer, dimension(2) :: wa_size, wa_subsize, wa_start

  call MPI_Init(ierr)
  call MPI_Comm_Rank(MPI_COMM_WORLD, myrank, ierr)
  call MPI_Comm_Size(MPI_COMM_WORLD, nproc, ierr)

  xpos = mod(myrank, nx)
  ypos = mod(myrank/nx, ny)

  data = myrank

  loc_dim    = loc_x*loc_y
  wa_size    = (/ nx*loc_x, ny*loc_y /) …
Run Code Online (Sandbox Code Playgroud)

fortran mpi mpi-io

4
推荐指数
1
解决办法
1667
查看次数

使用argparse对默认参数进行自定义类型或操作

我想转换我以其他格式传递给argparse的参数; 我们的想法是传递一个数字(通常是一个浮点数)并将其转换为字符串(通常为浮点数的Fortran表示法).

首先,我尝试创建自定义类型

def FortranFloat(value):
    vfloat = float(value)
    vfloat = str(vfloat) + "d0"
    return vfloat

parser = argparse.ArgumentParser()
parser.add_argument("--xmin=", dest="xmin", type=FortranFloat, default=-2.0)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

它运作良好......如果我真的给出了--xmin=论点.否则,它只是保留-2.0,而不是-2.0d0按照我的意愿转换它.因此我认为可以更容易地给出我想要的格式的默认值,所以替换2.0'2.0d0'...有趣的是它被评估,因为它崩溃并引发以下错误

argparse.ArgumentError: argument --xmin=: invalid FortranFloat value: '-2.0d0'
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我尝试创建自定义操作

class FortranConverter(argparse.Action):
    def __call__(self, parser, namespace, values, option_strings=None):
        if type(values) is float:
            values = str(values) + "d0"
            setattr(args, self.dest, values)

parser = argparse.ArgumentParser()
parser.add_argument("--xmin=", dest="xmin", type=float, default=-2.0, action=FortranConverter)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

那也行不通.它似乎甚至没有经历我的行动(如果我在其中打印一些东西__call__,它将忽略它).

任何想法,想法或解释将不胜感激!

python argparse

4
推荐指数
1
解决办法
4289
查看次数

Fortran中的OpenMP和共享变量,不共享

我遇到了OpenMP和共享变量的问题我无法理解.我所做的一切都在Fortran 90/95中.

这是我的问题:我的main程序中定义了一个并行区域,带有子句DEFAULT(SHARED),我在其中调用了一个执行某些计算的子程序.我有一个我分配的局部变量(数组),我在其上进行计算.我期待这个数组被共享(因为该DEFAULT(SHARED)子句),但似乎并非如此.

这是我正在尝试做的一个例子,它重现了我得到的错误:

program main
  !$ use OMP_LIB
  implicit none

  integer, parameter :: nx=10, ny=10
  real(8), dimension(:,:), allocatable :: array

  !$OMP PARALLEL DEFAULT(SHARED)
  !$OMP SINGLE
  allocate(array(nx,ny))
  !$OMP END SINGLE

  !$OMP WORKSHARE
  array = 1.
  !$OMP END WORKSHARE

  call compute(array,nx,ny)

  !$OMP SINGLE
  deallocate(array)
  !$OMP END SINGLE
  !$OMP END PARALLEL

contains
  !=============================================================================
  ! SUBROUTINES
  !=============================================================================
  subroutine compute(array, nx, ny)
    !$ use OMP_LIB
    implicit none

    real(8), dimension(nx,ny) :: array
    integer :: nx, ny
    real(8), dimension(:,:), allocatable …
Run Code Online (Sandbox Code Playgroud)

fortran shared openmp

2
推荐指数
1
解决办法
1891
查看次数

标签 统计

fortran ×2

python ×2

argparse ×1

mpi ×1

mpi-io ×1

openmp ×1

python-3.x ×1

python-module ×1

shared ×1