gpt4 book ai didi

python - 递归规则(规则)的等价关系的实现

转载 作者:太空宇宙 更新时间:2023-11-03 15:54:24 24 4
gpt4 key购买 nike

我正在研究如何实现类似于 rrule.jstoText()fromText() 方法的重复规则的人性化文本表示形式。 ;但是,我想在 dateutil.rrule 上构建的 Python 中实现它。

测试此类方法,检查它们是否彼此“相反”,即根据另一个方法的结果调用一个方法,并检查结果是否与原始输入相同。这让我想到了一个问题:两个 rrule 对象等效到底意味着什么?

最新版本的 dateutil.rrule 2.6.0 似乎没有用于 rrule 类的 __eq__ 方法(请参阅source code)。等价似乎也不像所有属性的等价那么简单,因为有时不同的 freq 参数仍然会导致相同的重复。 (例如,如果选择 byweekday=FRfreq=DAILYfreq=WEEKLY 会导致相同的重复时间;请参阅下面的屏幕截图rrule.js demo)。

有人知道规则的等价关系的实现吗? (它不必是Python)。

enter image description here

enter image description here

最佳答案

Does anyone know of an implementation of an equivalence relation for rrules? (It doesn't have to be in Python).

不,因为据我所知,不可能有可靠的东西。对于有限规则(具有 COUNT 或 UNTIL),您可以比较它们的出现集 - 如果两个集合相同,它们将是“等效的”。但对于无限规则你不能这样做。

您的示例:“如果选择 byweekday=FR,freq=DAILY 和 freq=WEEKLY 会导致相同的重复时间”并不总是正确且无法推广。例如,更改频率。

FREQ=DAILY;BYDAY=FR;INTERVAL=2
FREQ=WEEKLY;BYDAY=FR;INTERVAL=2

或者向“byweekday”添加更多天数并与 BYSETPOS 结合使用。

FREQ=DAILY;BYDAY=MO,FR;BYSETPOS=-1
FREQ=WEEKLY;BYDAY=MO,FR;BYSETPOS=-1

等等...

Testing such methods checking that they are each other's 'inverse', that is, calling one on the result of the other and checking that the result is equivalent to the original input.

话虽这么说,如果您的问题是关于测试,我认为您走错了路。

只需采用一条规则,生成文本,解析文本并将新对象与原始对象进行比较,以确保它们等于。为什么你需要担心“同等”?没有理由生成文本表示会突然改变频率,不是吗?

另一种方法是独立测试这两种方法,只是承认“自然语言”表示是模糊的,并且这两种方法不能严格地相互逆。取一组“规则=>文本版本”的数据集并测试生成。然后取另一个“文本版本=>规则”的数据集并测试解析器。

关于python - 递归规则(规则)的等价关系的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com