晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib64/python3.11/site-packages/dill/tests/ |
| Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/dill/tests/test_mixins.py |
#!/usr/bin/env python
#
# Author: Mike McKerns (mmckerns @caltech and @uqfoundation)
# Copyright (c) 2008-2016 California Institute of Technology.
# Copyright (c) 2016-2023 The Uncertainty Quantification Foundation.
# License: 3-clause BSD. The full license text is available at:
# - https://github.com/uqfoundation/dill/blob/master/LICENSE
import dill
dill.settings['recurse'] = True
def wtf(x,y,z):
def zzz():
return x
def yyy():
return y
def xxx():
return z
return zzz,yyy
def quad(a=1, b=1, c=0):
inverted = [False]
def invert():
inverted[0] = not inverted[0]
def dec(f):
def func(*args, **kwds):
x = f(*args, **kwds)
if inverted[0]: x = -x
return a*x**2 + b*x + c
func.__wrapped__ = f
func.invert = invert
func.inverted = inverted
return func
return dec
@quad(a=0,b=2)
def double_add(*args):
return sum(args)
fx = sum([1,2,3])
### to make it interesting...
def quad_factory(a=1,b=1,c=0):
def dec(f):
def func(*args,**kwds):
fx = f(*args,**kwds)
return a*fx**2 + b*fx + c
return func
return dec
@quad_factory(a=0,b=4,c=0)
def quadish(x):
return x+1
quadratic = quad_factory()
def doubler(f):
def inner(*args, **kwds):
fx = f(*args, **kwds)
return 2*fx
return inner
@doubler
def quadruple(x):
return 2*x
def test_mixins():
# test mixins
assert double_add(1,2,3) == 2*fx
double_add.invert()
assert double_add(1,2,3) == -2*fx
_d = dill.copy(double_add)
assert _d(1,2,3) == -2*fx
#_d.invert() #FIXME: fails seemingly randomly
#assert _d(1,2,3) == 2*fx
assert _d.__wrapped__(1,2,3) == fx
# XXX: issue or feature? in python3.4, inverted is linked through copy
if not double_add.inverted[0]:
double_add.invert()
# test some stuff from source and pointers
ds = dill.source
dd = dill.detect
assert ds.getsource(dd.freevars(quadish)['f']) == '@quad_factory(a=0,b=4,c=0)\ndef quadish(x):\n return x+1\n'
assert ds.getsource(dd.freevars(quadruple)['f']) == '@doubler\ndef quadruple(x):\n return 2*x\n'
assert ds.importable(quadish, source=False) == 'from %s import quadish\n' % __name__
assert ds.importable(quadruple, source=False) == 'from %s import quadruple\n' % __name__
assert ds.importable(quadratic, source=False) == 'from %s import quadratic\n' % __name__
assert ds.importable(double_add, source=False) == 'from %s import double_add\n' % __name__
assert ds.importable(quadruple, source=True) == 'def doubler(f):\n def inner(*args, **kwds):\n fx = f(*args, **kwds)\n return 2*fx\n return inner\n\n@doubler\ndef quadruple(x):\n return 2*x\n'
#***** #FIXME: this needs work
result = ds.importable(quadish, source=True)
a,b,c,_,result = result.split('\n',4)
assert result == 'def quad_factory(a=1,b=1,c=0):\n def dec(f):\n def func(*args,**kwds):\n fx = f(*args,**kwds)\n return a*fx**2 + b*fx + c\n return func\n return dec\n\n@quad_factory(a=0,b=4,c=0)\ndef quadish(x):\n return x+1\n'
assert set([a,b,c]) == set(['a = 0', 'c = 0', 'b = 4'])
result = ds.importable(quadratic, source=True)
a,b,c,result = result.split('\n',3)
assert result == '\ndef dec(f):\n def func(*args,**kwds):\n fx = f(*args,**kwds)\n return a*fx**2 + b*fx + c\n return func\n'
assert set([a,b,c]) == set(['a = 1', 'c = 0', 'b = 1'])
result = ds.importable(double_add, source=True)
a,b,c,d,_,result = result.split('\n',5)
assert result == 'def quad(a=1, b=1, c=0):\n inverted = [False]\n def invert():\n inverted[0] = not inverted[0]\n def dec(f):\n def func(*args, **kwds):\n x = f(*args, **kwds)\n if inverted[0]: x = -x\n return a*x**2 + b*x + c\n func.__wrapped__ = f\n func.invert = invert\n func.inverted = inverted\n return func\n return dec\n\n@quad(a=0,b=2)\ndef double_add(*args):\n return sum(args)\n'
assert set([a,b,c,d]) == set(['a = 0', 'c = 0', 'b = 2', 'inverted = [True]'])
#*****
if __name__ == '__main__':
test_mixins()
|