私はPyContract ( PyContractsではなく) を使用して、遺伝的アルゴリズム フレームワークの契約による設計を実装しています。
メインモジュールはGA.py
で、 から関数を呼び出しますcrossover.py
( と呼びましょうfoocross
)。の前提条件式と事後条件式を書きましたfoocross
。
main
さて、 GA.pyで実行するときにこれらの条件をチェックしたいと思います。foocross
コントラクトがチェックされているかどうかをテストするために誤った前提条件を導入しましたが、チェックされていないようです。契約がチェックされていることを確認するにはどうすればよいですか?
これが私のコードの最小限のセクションです:
# GA.py
def main():
# some code
crossover.foocross(params)
# some more code
if __name__ == "__main__":
main()
#crossover.py
def injectionco(p1, p2, chrom):
"""
pre:
isinstance(p1, int) # this should raise an error. p1 is never an int
isinstance(p2, list)
isinstance(chrom, int)
forall(p1, lambda elem: any(isinstance(elem, i.__class__) for i in p2))
forall(p2, lambda elem: any(isinstance(elem, i.__class__) for i in p1))
len(p1) == len(p2)
post:
p1 is __old__.p1
p2 is __old__.p2
p1 == __old__.p1
p2 == __old__.p2
isinstance(__return__, p1.__class__) # returns an individual
len(__return__) == len(p1)
id(__return__) not in [id(p1), id(p2)]
forall(__return__, lambda elem: __return__.count(elem) == 1)
"""
#code
return #something
PS: これは私が書くのが非常に難しい質問でした。なぜなら、(フレームワークがかなり複雑なため) 多くのコードを取り除く必要があり、契約による設計は初めてだったからです。したがって、この質問に答えるのに役立つ情報を見逃していた場合は、お問い合わせください。喜んで詳細情報を提供します:)