小编oso*_*maz的帖子

如果未明确定义任何过程接口,或者在Fortran 90+中的模块中,则抛出错误

在文章错误的Fortran 90程序可能会让你感到惊讶

这是以下部分,

调用Fortran 90样式例程的危险

      program main
      real, dimension(5) :: x

      x = 0.
! THIS IS WRONG
      call incb(x)
      print *, x

      end program main

      subroutine incb(a)
! this is a fortran90 style subroutine
      real, dimension(:) :: a
      a = a + 1.
      end subroutine incb
Run Code Online (Sandbox Code Playgroud)

解释子例程incb使用Fortran 90样式的假定形状数组(包含维度(:)).此类例程必须位于模块中,或者在使用它们的任何地方都具有显式接口.在这个例子中,没有一个是真的.

调用此类过程的一种正确方法是使用显式接口,如下所示:

      program main
      real, dimension(5) :: x

! THIS IS THE RIGHT WAY
      interface
         subroutine incb(a)
           real, dimension(:) :: a
         end subroutine incb
      end interface

      x = 0.
      call incb(x) …
Run Code Online (Sandbox Code Playgroud)

fortran fortran90

10
推荐指数
2
解决办法
6559
查看次数

从客户端访问Meteor.users的正确方法

users为方便起见,我在集合中定义了一些有用的字段.允许客户访问相应字段的正确方法是什么?我正在使用该autopublish包,但是Meteor.user()从客户端只显示该emails数组.

meteor

7
推荐指数
1
解决办法
3152
查看次数

什么是f2py用于构建numpy源?

当我在NumPy的源代码树中列出所有Fortran文件时,我得到:

./doc/source/f2py/scalar.f
./doc/source/f2py/string.f
./doc/source/f2py/calculate.f
./doc/source/f2py/moddata.f90
./doc/source/f2py/array.f
./doc/source/f2py/allocarr.f90
./doc/source/f2py/extcallback.f
./doc/source/f2py/common.f
./doc/source/f2py/ftype.f
./doc/source/f2py/fib3.f
./doc/source/f2py/callback.f
./doc/source/f2py/fib1.f
./doc/f2py/f2python9-final/src/examples/exp1.f
./doc/f2py/simple.f
./doc/f2py/multiarray/foo.f
./doc/f2py/hello.f
./doc/f2py/ex1/bar.f
./doc/f2py/ex1/foobar-smart.f90
./doc/f2py/ex1/foo.f
./doc/f2py/ex1/arr.f
./doc/f2py/ex1/foobar.f90
./numpy/f2py/tests/src/mixed/foo_fixed.f90
./numpy/f2py/tests/src/mixed/foo_free.f90
./numpy/f2py/tests/src/mixed/foo.f
./numpy/f2py/tests/src/size/foo.f90
./numpy/f2py/tests/src/kind/foo.f90
./numpy/f2py/tests/src/assumed_shape/precision.f90
./numpy/f2py/tests/src/assumed_shape/foo_use.f90
./numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap
./numpy/f2py/tests/src/assumed_shape/foo_free.f90
./numpy/f2py/tests/src/assumed_shape/foo_mod.f90
./numpy/f2py/src/test/bar.f
./numpy/f2py/src/test/foo.f
./numpy/f2py/src/test/foo90.f90
./numpy/f2py/src/test/wrap.f
./numpy/distutils/tests/f2py_ext/src/fib1.f
./numpy/distutils/tests/f2py_f90_ext/include/body.f90
./numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90
Run Code Online (Sandbox Code Playgroud)

所以除了f2py之外,其他人都使用Fortran.我研究了线性代数模块.对于LAPACK,有一个make_lite.py从一个LAPACK源树中仅提取必要的子程序文件,以及使用它们转换成C f2c.因此,在创建NumPy的过程中,创建它是否方便f2py?我错过了什么吗?

编辑

事实证明,SciPy中的很多软件包都使用f2py.运行

$ find . -iname '*.f*'  | cut -d'/' -f3,4 | uniq
Run Code Online (Sandbox Code Playgroud)

给我填写Fortran文件的确切目录:

linalg/src
fftpack/src
odr/odrpack
special/cdflib
special/amos
special/mach
special/specfun
integrate/quadpack
integrate/odepack
integrate/dop
integrate/linpack_lite
integrate/mach
sparse/linalg
interpolate/fitpack
optimize/minpack2
optimize/minpack
optimize/nnls
optimize/cobyla
optimize/lbfgsb
optimize/slsqp …
Run Code Online (Sandbox Code Playgroud)

python numpy f2py

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

获取GitPython中第一次提交的差异细节

在GitPython中,我可以通过调用diff()不同提交对象之间的方法来单独迭代树中每个更改的diff信息.如果我diff()使用create_patch=True关键字参数调用,则会为每个我可以通过创建的diff对象访问的更改(添加,删除,重命名)创建补丁字符串,并剖析更改.

但是,我没有父级与第一次提交进行比较.

import git
from git.compat import defenc
repo = git.Repo("path_to_my_repo")

commits = list(repo.iter_commits('master'))
commits.reverse()

for i in commits:

    if not i.parents:
        # First commit, don't know what to do
        continue
    else:
        # Has a parent
        diff = i.diff(i.parents[0], create_patch=True)

    for k in diff:
        try:
            # Get the patch message
            msg = k.diff.decode(defenc)
            print(msg)
        except UnicodeDecodeError:
            continue
Run Code Online (Sandbox Code Playgroud)

您可以使用该方法

diff = repo.git.diff_tree(i.hexsha, '--', root=True)
Run Code Online (Sandbox Code Playgroud)

但这会git diff使用给定的参数调用整个树,返回一个字符串,我无法分别获取每个文件的信息.

也许,有一种方法可以创建某种root对象.如何在存储库中获得第一个更改?

编辑

一个肮脏的解决方法似乎是通过直接使用 …

python git gitpython

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

使用Webpack Dev Server忽略文件

我正在使用Emacs编辑Webpack开发服务器监视的目录中的文件。每次我对文件进行更改时.#original_filename,即使我没有将更改保存在Emacs中,也会在同一目录(例如)中创建一个备份文件。即使我没有进行更改,这也会导致服务器的观察者注册更改。因此,每次我对文件进行更改时,服务器都会重新加载,然后在保存文件时再次进行重新加载。

这有点令人困惑和耗时。查看Webpack的文档,我发现了以下选项:

对于某些系统,监视许多文件系统可能会导致大量CPU或内存使用。可以排除诸如node_modules之类的巨大文件夹:

ignored: /node_modules/ 
Run Code Online (Sandbox Code Playgroud)

也可以使用anymatch模式:

ignored: "files/**/*.js"
Run Code Online (Sandbox Code Playgroud)

所以我修改了我的配置,如下所示,以匹配并忽略以.:开头的文件:

devServer: {
    ...
    watchOptions: {
        ignored: './src/app/**/.*',
    },
    ...
}
Run Code Online (Sandbox Code Playgroud)

我重新启动开发服务器,但观察程序仍将备份文件注册为对代码库所做的更改。我究竟做错了什么?

webpack webpack-dev-server

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

vim作为python ide

Python支持集成在最新版本的emacs中.例如,C-c C-z为我提供了一个解释器,并C-c C-c自动解释我正在处理的文件,而无需移动到其他缓冲区.(虽然emacs的方法有一些缺点)

这在vim中是否可行,或者只需两次击键即可轻松完成?我知道我可以评估一个表达式:python,但这并不是我想要的.

python vim

5
推荐指数
1
解决办法
2117
查看次数

lex:无法识别的字符串的默认规则

在ocamllex中,我可以使用_词法规则来匹配任何与先前定义的规则不匹配的字符串,并引发错误.如何在lex/flex中实现这一点?

lex flex-lexer

5
推荐指数
1
解决办法
1763
查看次数

移植旧的fortran程序以使用python + numpy

我应该用这个庞大的Fortran 77程序进行研究(我最近将它移植到Fortran 90表面).它是一个非常古老的软件,用于使用有限元方法进行建模.

  • 这是一个怪物.它大约有240,000行.
  • 自从它在Fortran 77中开始使用以来,它使用了一些非常脏的黑客进行动态内存分配; 基本上它使用C标准库中的函数,使用C和Fortran进行混合编程.我还没有完全掌握分配的工作原理.该程序可以由用户轻松扩展,用户通常需要分配一些全局可访问的数组供以后使用.这是通过具有一组内存地址来完成的,这些内存地址指向动态可分配数组起始地址.当然,在开始真正编程之前,地址数组的哪个元素指向哪些信息都取决于用户必须学习的约定.有两个地址数组,一个用于整数,另一个用于浮点.
  • 肮脏的黑客,我的意思是不一致的.例如,GNU编译器的优化算法中的更新导致程序以随机​​内存泄漏退出.
  • 该计划远非优雅.全局变量名称通常较短(3-4个字符)且含糊不清.当然,通过使用包括所有程序开关和前述阵列的公共块来实现跨例程传递数据.
  • 该程序的使用大致类似于交互式shell,尽管是一个愚蠢的程序.首先,程序本身读取输入文件,然后根据选择,将用户放入伪shell中,用户必须键入4个字符宽的命令,然后输入参数.然后解析器解析命令,并使用参数调用相应的子例程.你猜,有在这个伪解析器循环结构(一个goto富矿,而),其包装在更复杂的比它应该是在21世纪的方式子程序的行为.
  • 输入文件的格式是相同的(命令,然后是参数),因为它是相同的解析器.但是语法并不是真的一致(我的意思是它缺乏控制结构,有些命令会导致有限状态机做与其他命令相矛盾的行为;它缺乏明确的语法),不时导致最终用户发现陷阱.用户必须通过经验了解这些陷阱; 我没有在程序的任何文档中看到它们.这是一个可以使用python轻松避免的问题,甚至不需要实现解析器.

我想做的事:

  • 程序的端口部分为python,即与数值计算无关的部分.这包括
    • 在python中使用OOP方法清理和抽象API,
    • 给出有意义的变量名,
    • 将动态分配迁移到numpy或Fortran 90并丢失C部分,
    • 将非数字执行迁移到python,并使用包装数字对象f2py,因此性能没有损失.我已经告诉该节目是该死在当前状态快?希望将对数字子程序和I/O的调用移植到python不会减慢到不切实际的水平(或者它会吗?).
    • 利用python的交互式shell作为伪shell的替代品.这样,最终用户就不会有任何不一致之处.上述命令将简单地由python中定义的函数替换.这将允许用户实际访问数据.此外,用户将能够扩展程序而无需深入.

我想知道:

  • 是否f2py适合并完成包装众多子程序和公共块而没有任何混淆的任务?我只在网上看过单文件示例f2py; 我知道numpy已经用它来包装LAPACK和东西,但我需要保证这f2py是一个足以完成这项任务的工具.
  • 是否对我应该遵循的总体策略有任何建议,或者我应该避免陷阱.
  • 如何在这个python包装的Fortran 90环境中实现一个系统,以便我能够在fortran例程中修改(分配和分配)全局可访问的数组和变量.这应该优选地省略地址数组,并且我应该优选地能够将口头表示注入命名空间.这些变量最好在python和fortran中都可以访问.

笔记:

  • 我可能一直在要求太多,超出了可能范围的界限.在这种情况下,请原谅我,因为我是这方面编程的初学者; 并且毫不犹豫地纠正我.
  • 我一直在谈论的"程序"是开源的,但它是商业的,许可证不允许其分发,所以我决定不提它的名字.但是,您可以从第二句和我给出的描述中推断出它.

python fortran numpy fortran90 f2py

5
推荐指数
1
解决办法
771
查看次数

库在终端上将图形渲染为ASCII-art?

标题不言而喻.我们使用OpenGL渲染逼真的图像,但是如果我们无法连接到图形用户界面呢?

terminal graphics render ascii-art

3
推荐指数
1
解决办法
1438
查看次数

在OCaml中使用多个参数的函数

我正在尝试编写一个函数来增加int指定数量的mutable .

let increase var:int ref amount = (var := !var+amount;var);;
Run Code Online (Sandbox Code Playgroud)

这就是我提出的,但它会产生错误.这样做的正确方法是什么?

ocaml

3
推荐指数
1
解决办法
1066
查看次数