|
什么是传染病动力学?numpy和matplotlib用python实现传染病模型SI模型SIS模型SIR模型SEIR模型 什么是传染病动力学?最近,在报道疫情的众多新闻中,相信大家也看到过一些来预测新型冠状病毒会导致感染肺炎的人数。你一定好奇,这个人数要怎么预测呢?预测人数又有什么用呢? 事实上,从学科方向来说,这类研究属于传染病动力学,就是用数学模型去描述传染病在人群中传播的规律,从而预测患病人数,进而指导政府制定措施和政策去控制传染病的传播。2 v9 z7 `# u8 D q0 o% s* ?5 \
这类研究最早可追溯到18世纪Daniel Bernoulli对天花的研究,而我们今天所要介绍的SIR模型是1927年Kermack与McKendrick在为了研究伦敦黑死病而提出的,是传染病动力学中最基础的模型。 介绍了传染病模型的背景信息,不知道现在你对传染病模型更有兴趣,还是执着地对python更有兴趣呢?不论哪种,这篇文章会满足你所有的好奇心。 numpy和matplotlib首先,安装一下这节课我们需要使用的两个python包,numpy和matplotlib。
5 K: b7 T% h- \( Rnumpy-是python进行科学和矩阵运算最常用的包。 用numpy建立一维数组,存储和计算每天传染病人数的数据。 ) {& l" I5 ]( H$ Q
import numpy as np import matplotlib.pyplot as plt 用matplotlib绘制传染病人数随天数变化的曲线,给出模型预测人数变化的直观认识。 好啦,下面开始用python实现传染病模型吧。 用python实现传染病模型为了让大家能够更好地理解,我们先不直接说SIR模型,我们从最简单的开始。 SI模型首先想象这样一个场景,一个城市有 个人,假设没有人出生和死亡,忽然有一天有 个人感染了病毒成为了患者,如果每天每个患者能够有效传染 个人,那么第二天患病人数是多少呢?最简单的答案是: ,也就是说每天都会新增 个患者。那这样以来,在无限远的将来会有无穷多的人被感染,显然这是不合理的,那错在哪里?仔细思考,你一定发现了,已经患病的人就不能再被传染了,所以我们有必要把人群分为两类,易感者(S-susceptiable)和感染者(I-infective)(你猜的没错,这就是SIR中S和I的含义,R的含义之后介绍再讲)。为了之后方便计算我们记易感者和感染者在人群中的比例为 ,那么 。我们重新考虑上面的问题,顺便来个示意图: Image Name这样的话,每天新增的患者数为 ,也就是总传染人数乘以易感者所占的人群比例。) ^8 F8 |" h% F/ v# @- Q
那么每天的感染者比例的增加量就是 。我们假设城市有一千万(N=10的7次方)人,每个患者每天接触感染每天0.8人(lamda=0.8),初始感染人数为45人(i0 = 45/N),我们来模拟70天(T=70)的情况。 # population/ X% z; v& D4 g" f" ?
N = 1e7) a9 d+ C. U* c
# simuation Time / Day8 E4 _: T/ t0 T# o& s! K( T
T = 70
( C; x+ g7 S" K9 n7 y# susceptiable ratio
: ?9 r: [- v* Y4 rs = np.zeros([T])/ u- v8 ~( q# @
# infective ratio, I$ d& F. Q: i/ D6 W
i = np.zeros([T])
) E1 _6 P8 b" @5 Z: B# contact rate
: ]# f6 j+ D5 z1 V P/ H" w: {lamda = 0.80 I5 g8 `$ d( x8 h: b" R
! d% f8 r/ [7 s2 k7 _+ W( h- D
# initial infective people
; t/ N. |4 L( e3 a1 f$ K( di[0] = 45.0 / N
U# S D. h# ~) I/ l0 j9 n
3 F# F4 \& P1 e, p4 }for t in range(T-1):
2 r0 Y1 j4 e. ~6 v' l: b i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t])4 r* ]' Y1 ~! K* J
8 V9 N" K% n5 f3 K7 w: Q7 e
6 Q) s9 c! j& A6 F d% ^6 N4 W3 ^6 N5 \0 N% ]$ W) j
相信其他语句大家都明白,新知识是这两行:
, l. D6 e3 R/ p7 J
2 E2 L- r$ |5 ^8 ]. S7 z* e8 S/ Q, L b
s = np.zeros([T])
/ D0 C' a! B0 ^2 e5 B2 s7 Ii = np.zeros([T])% `5 a- J: d4 ]( o- H- O
, L3 B$ o+ f, B: }. Z这两句话的意思是一样的,就是利用numpy(已被我们重新命名为np)的函数(zeros())来建立一个所有元素都是零的数组,而给的参数决定了这个数组的维度。比如:
/ v1 E5 T* U! e \$ c& M* l' L$ S1 N* `
a = np.zeros([2,3])& v5 M" i6 J, Z1 T( p; N$ X4 j J
a$ n, g5 p E1 u4 } Y. J
) d, E6 h/ q* x
array([[0., 0., 0.],: Q5 i+ K+ Y }
[0., 0., 0.]])
' h1 |6 m6 p1 w$ `8 v, I' A: x* C
; T8 ^5 C1 @2 e: _
9 u: X c3 d- C) a$ Jarray([0., 0., 0., 0., 0.])
4 {% B' g( B" \/ `- y3 Z9 L% K
$ L8 B! j Q7 ?2 r. \ i4 _$ ?- _& n8 Q% p
类似的还有产生元素全部是1的数组的函数np.ones():. ^& U$ }# _6 o+ E
' z+ C* i7 j1 [( A# k- G, k
a = np.ones([5])0 {9 ~0 v: g% {( b/ H2 t
a
3 F! j9 t! M; u
) R5 b9 S& M1 _! R& J# oarray([1., 1., 1., 1., 1.])
0 v5 @# L" D* C, W. b j3 m
- n0 ^6 W+ @! Y# g) ~
, T' A9 [1 @: h( \' la = np.ones([2,3])
: X' h# j: C( T0 \. \1 pa
0 z( v+ C8 M# U% G
* Z" j* U% _; j$ z. w
. }1 R5 Q) a: Garray([[1., 1., 1.],
/ C# e" {- g$ S9 t$ G2 X( B* ^" ^ [1., 1., 1.]]); I. J6 t# \3 C" E& i9 w v
( I. D0 A$ g. x5 r
7 Q; l2 V) L! ^9 lplt.plot(i); Y/ m9 V; d. C& Q8 e4 [. L
1 f& `3 f6 h. X! D/ a7 X6 n
3 p7 ]. G9 z2 t7 z8 s( F1 L9 x
[<matplotlib.lines.Line2D at 0x7f0c2768d6d8>]
( j( }. F! A9 A6 ?! f+ Z b, u+ v" E8 r F0 a7 W
- X; g, `3 ^6 c G. z2 b
5 R" q: ~% T( T1 U% f# ?( ]
+ a& R. p5 _0 B5 F% v. C8 s! }
2 I" \% ?" b% W- _/ e3 X+ M实现SI模型的核心代码是第三个cell的第11,12行:
1 X, W( N& t$ U' N
4 t, Y6 C$ y$ t1 L+ Yfor t in range(T-1):6 S6 P! C: [* n( D! S% h T6 x
i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t]): k: _5 _0 a- }% K/ v) C: Y
7 q8 r6 ^. ]2 _- z0 _( ]就是我们建立的数学模型,利用python的for循环语句累加迭代的方式把每天的增加量叠加到感染者比例上。 运行代码完成计算,我们利用matplotlib的pyplot来画出感染者的随天数的变化曲线: ' O- r& A8 Z- ]5 r @+ K v) o/ [
fig, ax = plt.subplots(figsize=(8,4))
# \; }3 h# X6 [/ a3 ?ax.plot(i, c='r', lw=2)
* }& ^) J3 h$ _, Wax.set_xlabel('Day',fontsize=20)% C" o, S0 X' _1 I
ax.set_ylabel('Infective Ratio', fontsize=20)+ o% ^" k, c: [( d2 k" A
ax.grid(1) C0 i, u/ N* e8 d) l, ]
plt.xticks(fontsize=20)( z: R+ E% }. p; A8 |4 ~4 t. w( p
plt.yticks(fontsize=20);9 E) i: l+ {0 W0 ?# Q& l7 }
1 u) r, ]3 |" N* ]* E# g
3 l" [6 W# B" e
![]()
1 e2 N4 s; A" N& o6 h$ u2 G/ b7 }/ p" Z+ L7 |1 J1 t
从这个结果看到,大约在25天左右,全部人群都会变成感染者,感染率 。
) x# n5 v- [, x8 j6 [0 o/ }在程序中我们假设每天每个患者传染0.8个人,你可以改变lamda的值,观察全部人群感染的天数的变化。# y# J9 @1 L9 b
认真思考你会知道,lamda的现实意义就是该城市的卫生水平,衡量的是消毒,隔离这些措施执行得怎么样。回到传染病模型,按照SI模型计算的结果,我们全人类都会患病,这好可怕!原因是我们忽略了一个很重要的因素,那就是我们有奋斗在一线的医护人员,我们会被治愈!所以SI模型只适合研究具有高传染风险又不能被治愈的病(比如HIV)。 但是对于其他病,我们是可以靠医疗和自身免疫系统康复的,那么紧接着的一个问题就是,被治愈后还会再被传染上嘛?根据这个问题的回答不同,我们有了两个不同的模型,SIR 和 SIS。现在可以揭晓,SIR的R的含义了,就是移出者(Removed),现实含义就是指被治愈后不会再被感染的人。而SIS表示治愈后仍然还是易感者。下面我们用python来分别实现这两个模型。 SIS模型为了实现这个模型,我们需要引入新的一个参数,治愈率 。好啦,先上我们的新示意图: Image Name和SI模型做比较,区别就是计算感染者的增加数时要减去被治愈的人数。% S- P! o/ ^/ E( c- Q* ]$ Q
所以这时候每天的增加的感染者为: ,$ G Y X+ s) W$ ]5 P" Q, G! e
增加的感染率为: 。
$ P6 M( E) t3 V* z2 N模型完成啦,修改python代码:5 N& h" d" z( {! x" R4 [
# susceptiable ratio
" S8 H9 v. \! Qs = np.zeros([T])
6 k6 Z4 L( Q. D7 [& n# infective ratio1 Z8 K5 }: V5 k' \
i = np.zeros([T])6 V4 x$ y5 I$ K
: I: n q0 h8 {5 }7 n+ A( [9 ^
# contact rate, @/ a3 C% ^# L5 b# G" U
lamda = 1.0) `# K, |3 l! l6 F/ y. w
# recover rate2 E, W. k0 [* ^
gamma = 0.5
/ i1 v% j s$ K- ^& x, g& K5 W. S0 Q: ~+ X0 N& U
# initial infective people
x+ i: a8 Y# a$ r: \9 Vi[0] = 45.0 / N
9 E* {" s% e4 b& I
( Y( l& m. M& Y3 W' S" b+ mfor t in range(T-1): h6 @0 e' E; l* C$ J
i[t + 1] = i[t] + i[t] * lamda * (1.0 - i[t]) - gamma*i[t]
7 y L5 |) \. D
" L$ O) J, D! ~5 a$ t& D! B6 {! }' T' o& i* x
8 y9 ~1 s; Y( Y1 X" t
运行代码,我们画出曲线(代码和SI模型的画图完全一样):
5 d3 c9 l9 y3 y- Z: ^: W9 T, Q# J0 X
9 l3 b2 j8 q3 h& z; y% N3 efig, ax = plt.subplots(figsize=(8,4))" F. d1 {) ]% R* a
ax.plot(i, c='r', lw=2)
1 }- c; _5 \! B4 a1 R+ O4 ^6 gax.set_xlabel('Day',fontsize=20)
2 m6 n$ x3 F+ f; }ax.set_ylabel('Infective Ratio', fontsize=20)
/ g7 l, _" Q, [ j2 o# _ax.grid(1)7 N0 o! A4 v9 ]/ \7 Q
plt.xticks(fontsize=20)
% M6 W& u: _6 a; nplt.yticks(fontsize=20);
, j8 b+ r0 _1 D4 ?5 E% g/ a" P. N U. h4 J z3 w1 S- z# g
+ J0 ]& ^, J; a, `
1 `+ j o- {. \# z i
( U" d9 c# e8 [0 }: p3 a% ?行代码,我们画出曲线(代码和SI模型的画图完全一样)
3 T9 @' J0 Y: q7 e可以看到,达到最大感染率的时间退后10天左右,最后感染和治愈达到动态平衡,人群中有始终有一半的人感染着。所以,SIS模型适合研究具有传染性和反复性的流行病,比如常见流感。同样的,感兴趣的话,改变lamda和gamma的值,观察曲线的变化。和lamda不同的是,gamma的现实意义就是对这种疾病的治疗水平。 SIR模型加入了移出者,被治愈的病人不会再被传染,先上我们的新示意图: Image NameSIR 模型0 ]- Y! n8 b( n
注意到这里,人群被分成了三类,不再只有I和S,所以相比于之前的模型,我们需要找到新的约束关系。现在我们需要分别计算三种人每天的增加量了: 3 I Z8 f8 P& _5 O; k" ?
- 易感者:每天都在被传染,所以一直在减少,减少量为被传染的人数:
- 感染者:增加了被感染的人,减少了治愈的人:
- 移出者:增加了治愈的人: % Q9 B/ }% q, e6 ^
建模完成,修改python代码,并且假设人群普遍易感,新型疾病,初始没有移出者。 ' @1 T% r6 G |
# population
5 u8 m% z3 {; v$ IN = 1e7 + 10 + 5' r9 i+ m9 o- l8 Q; n
# simuation Time / Day
# j) P, M" P, BT = 170; u" z: n/ U6 e1 g( B* V' E) A
# susceptiable ratio
# F1 D& d6 }' z' H% bs = np.zeros([T])2 ^. s9 h5 {2 m
# infective ratio; g' e" I& {, o+ N
i = np.zeros([T])
1 I7 _5 {/ W9 I2 Y# remove ratio
/ n- }, E/ ]1 T3 L5 Er = np.zeros([T])+ W* {( v! m: R$ a
2 S1 N. v$ a. G. R8 C# contact rate
) i; [/ d( i+ Z, U9 t8 }lamda = 0.2586
# ?) ~( d# h, x; a# recover rate
5 s9 R. d& {4 p) Agamma = 0.0821
8 b3 G0 V8 `+ e6 W) y" I, ]) J" j' q# y7 w, l4 X4 O
# initial infective people
( D- Q# G8 d2 N( [1 Bi[0] = 10.0 / N
5 G& k y# u/ s. T, n J' rs[0] = 1e7 / N( M9 U9 c' F* d {
for t in range(T-1):0 k$ H: z2 r! ^# O. L+ r6 e% f
i[t + 1] = i[t] + i[t] * lamda * s[t] - gamma*i[t]
4 }( M7 d2 i- A. y3 [% k7 h s[t + 1] = s[t] - lamda * s[t] * i[t]
% z8 {' u' ~1 |+ p; m r[t + 1] = r[t] + gamma*i[t]
2 }( v% X, ^; h9 X9 ?1 N3 X
3 S. m+ E) _0 H: U1 ?+ f, Z, gfig, ax = plt.subplots(figsize=(10,6))
( i' o( J+ A" H+ ]* a5 o; z. j* K5 dax.plot(s, c='b', lw=2, label='S')
: {4 _3 Z `! iax.plot(i, c='r', lw=2, label='I')
; ]1 T8 N& s1 Max.plot(r, c='g', lw=2, label='R')
G) D# m2 v4 K) tax.set_xlabel('Day',fontsize=20)5 x/ j9 a0 ?. ?8 N* ?1 I0 ^
ax.set_ylabel('Infective Ratio', fontsize=20)
$ I. F# h8 M7 jax.grid(1): H) E) `. p. A+ L Q8 O, a$ N
plt.xticks(fontsize=20)2 l- y' e+ c' Q: O8 R. U
plt.yticks(fontsize=20)* I/ T6 I# s# n3 N, [* B& N: C5 {& ^
plt.legend();
# q3 Q- n8 R; s# l5 ?2 }1 |. R( a. s$ \8 k1 Z* v' ^1 a- s
T" b/ h1 f* j% i1 d& P![]()
- [, }. l3 x1 S; ?. \4 { ]7 l; V& G; r
6 {; C4 j9 _5 e. P感染人数峰值发生在一个月左右,最大感染人数不到人群的20%, 但是最终人群的80%都会得此病(就是最终的移出者的比例)。SIR模型适合研究没有潜伏期的急性传染病,治疗后能够痊愈并具有抗病性。 到这里,虽然不准确,我们也可以先用SIR模型来分析一下此次疫情,武汉新型冠状病毒的传染病动力学! 模型有了,其实就是确定参数的问题。一开始就有人做了这个工作: Image Name于教授给的参数是参考了非典的, ,初始易感人数为一千万, 初始感染10人,初始移出者5人,那么我们的城市总人数 , 带入我们的模型得到结果:重现于教授的模型
3 s) d" y% b3 J( G( c高峰和尾声日期的推测基本相符。 0 p' |& d8 a3 Y
# susceptiable ratio& O/ G; |8 W5 T& ^# v( }
s = np.zeros([T])
0 }9 J% M% k, m1 s# infective ratio5 B4 n. S* T9 A0 p
i = np.zeros([T])
& q7 S+ l0 A8 y# removed ratio2 f( |8 J* I- ^/ ?
r = np.zeros([T])5 @ B4 a Q* L( g9 |8 s8 Z
# T& b' `. M& q; _" u
# birth ratio/ P3 X M. r; e
b = 20.0 / N
$ p; S8 S( b" U# death ratio+ K1 P4 U/ n$ {8 X) A# q: f
d = 10.0 / N
( R: N: f, K5 b* s8 I4 M h: |4 |/ `9 _- G* m
# contact rate
7 q, ?- P6 J; U) c3 i; U3 Iy = 1.5, s( Z m' c& m9 v
# recover rate* r( b) Y. w8 q' n/ O+ Z( A
u = 0.8 # 1 / infective_period
$ F3 e% c1 Q Q5 `* I2 w
, F/ p& W# X. u1 ^# sigma = y / u+ R* i7 q5 a2 o0 I/ h/ Q5 N
! I- c; ~# M4 W' ]0 C: s
# initial infective people. X0 `# L5 A) F' H$ s( \ w
i[0] = 45.0 / N& k' t' ~. |6 h
s[0] = 1 - i[0]0 ]/ A' B# C. e( s6 t4 Z
for t in range(T-1):
o" z& q4 S; X8 G, T i[t+1] = i[t] + i[t] * y * s[t] - u*i[t] - d*i[t]
3 ]5 z. T* r# a/ R s[t+1] = s[t] - y * s[t] * i[t] + b - d*s[t]
6 H1 T! e1 j0 M9 y9 J4 T# U r[t+1] = r[t] + u*i[t] - d*r[t]3 ?$ V9 W+ e& n z
$ d ~; k9 z% O$ {/ r4 Vplt.plot(i)' E/ H7 }) {1 ~& {& o
plt.plot(s): G3 N. T$ }7 g; K8 E. R% R F
plt.plot(r). A5 U# d2 n! |$ C+ h* m) `% | K
plt.plot(np.diff(i),ls='--')1 q; E6 F- ~8 }5 P) I
% K0 A( q0 a, t. q, I# W
; I, T6 o. \: [0 M. S3 U' ]% M! h
[<matplotlib.lines.Line2D at 0x7f77796e8518>]
# d9 w1 w" V! S$ {% ], K9 D) a+ v" f
+ Q# i1 H8 T" |: Z2 Q% ?
- t$ D* t! `5 a/ r4 X) K
SEIR模型但是,SIR模型和实际情况的出入会比较大,因为忽略了太多因素了,比如说潜伏期,比如说政策调控,药物,出生死亡等等。下面我们可以和前面一样,把潜伏期考虑进去,新增一个人群,叫潜伏者E(exposed): Image NameSEIR模型
& r! |" r6 B5 g8 G0 B6 j: ^8 G同样的我们需要计算各人群每天的增加量: S:每天减少: 9 e6 S0 v* c" O' c! v+ f) ^5 T7 w8 h
E:每天增加传染,减少发病: - @" l: D% |- n1 k B5 L7 d! l U
I:每天增加发病,减少治愈: ; L. @) _: z ~/ B- D a. E! n
R:每天增加治愈:
1 A1 H5 I7 U& [4 i% y( |% w3 S建模完成,修改我们的python程序,这里的 可以理解为潜伏期的倒数。给的4天。新型冠状病毒给目前临床的潜伏期是3-14天。% V! P/ o( ]8 {; B
# population3 [, R2 V4 k& E- n# X4 V" C, @1 S/ G
N = 1e7 + 10 + 59 n: @4 @5 H% I$ N& X
# simuation Time / Day
$ n7 Q; O- w& c' q, \9 RT = 170
+ t5 S# R$ w9 A# _# susceptiable ratio4 ^4 e$ \/ x4 f' h
s = np.zeros([T])
% D5 }& p6 ^1 q' {# exposed ratio
7 x, s( j- V8 Z, E4 @ ke = np.zeros([T])2 F8 [& H! B# ^# ]
# infective ratio* s- N* i6 @9 h& S- F% I& y: i, h
i = np.zeros([T])
% G2 U/ Q9 Z$ R2 s$ | h# remove ratio
0 M) ]2 O# s8 }8 k( ur = np.zeros([T])
; h' @+ Z7 v- u5 y- _" X! y, p4 |% y2 c ^% ?& ~
# contact rate+ }! ?9 e0 s, \ y
lamda = 0.58 y* I7 U* D, X
# recover rate _' U. y7 g7 @9 m. ?* y
gamma = 0.0821/ U+ c1 o l7 o" i& S# A
# exposed period% U. B' A" n" e4 J! e5 ~
sigma = 1 / 4
" I* t6 g# Q W8 B
2 u- z, x# f4 O7 ^6 j# initial infective people! L! [! {/ f+ u, r! L+ L# r6 V1 x
i[0] = 10.0 / N
- y) Z4 R* L2 g7 I- rs[0] = 1e7 / N
7 F5 Q& Z7 L" ~' w* k7 v3 Ue[0] = 40.0 / N
& W# |8 ]: o4 _* {- Ifor t in range(T-1):
) w6 {7 r2 h9 W, X& g; p% m; | s[t + 1] = s[t] - lamda * s[t] * i[t]
" _0 e" i1 L$ J# I/ t- ]5 y( L- U e[t + 1] = e[t] + lamda * s[t] * i[t] - sigma * e[t]
+ d7 E0 K5 ?8 u+ C6 @ i[t + 1] = i[t] + sigma * e[t] - gamma * i[t]& W$ C2 @- Z2 I) g" d! F: a8 j' O
r[t + 1] = r[t] + gamma * i[t]+ t A- ^# }1 }% Q: ]2 R+ _
+ m; D8 [6 f! o0 i
# H# _. O- B/ ?fig, ax = plt.subplots(figsize=(10,6)); \& M' b# ~2 Z% Z9 l. v
ax.plot(s, c='b', lw=2, label='S')
* j) j" d: B l+ x6 G* D% Gax.plot(e, c='orange', lw=2, label='E')
" a$ e+ E; l( A. ~7 I' o8 v% Pax.plot(i, c='r', lw=2, label='I')& o9 O0 @: x/ ?
ax.plot(r, c='g', lw=2, label='R')
7 \/ M) R3 B, P2 |+ O: e. cax.set_xlabel('Day',fontsize=20)
' d" z8 b3 y4 z# X. Bax.set_ylabel('Infective Ratio', fontsize=20). A4 x. n) m+ U& \9 E$ h9 c/ ]
ax.grid(1)8 B) u2 o6 d7 T$ D- E$ G1 @ j
plt.xticks(fontsize=20)- w# @6 S0 f& e& m' P6 Y
plt.yticks(fontsize=20)
7 J; @9 P w% O6 k5 m+ |plt.legend();4 O X) x) L0 D/ u; e# k; G
; U8 N8 ?1 H3 Y7 D1 m- `' Y: N; A3 d
- d% g; C' k) N. U7 V- `
# h9 Z5 t* B1 N' m* [按照模型的结果,此次疫情可能真的要持续到 三四月份。这个接触率 真的非常影响表现,模型给的是个常数,但是由于政府措施的原因,这应该是个变化的值。
% ~$ X) U1 l0 Z2 T S还有治愈率 也是。没有完美的模型,但是随着考虑因素的增多,就会越来越接近实际情况,从而指导政府的疫情方针政策的制定。1 E* _7 E% U9 ~6 J8 ]
+ z3 d! K/ }0 X9 r E
7 ?; j. B3 e; |& k0 ^& ]
4 k& \/ f. s6 F/ c3 H" x! M8 b0 I9 n! N/ {- `1 K S
|