From 507c2cb2a893419fb848181c2d8639d53fba63fc Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 28 Sep 2020 21:01:26 -0400 Subject: [PATCH 01/34] Update and reorganize Python docs --- doc/graphviz/lammps-invoke-python.dot | 27 + doc/graphviz/pylammps-invoke-lammps.dot | 30 + doc/graphviz/python-invoke-lammps.dot | 24 + doc/src/Build_basics.rst | 1 + doc/src/Howto_pylammps.rst | 2 +- doc/src/JPG/lammps-classes.png | Bin 250470 -> 272143 bytes doc/src/JPG/lammps-invoke-python.png | Bin 0 -> 37367 bytes doc/src/JPG/pylammps-invoke-lammps.png | Bin 0 -> 36936 bytes doc/src/JPG/python-invoke-lammps.png | Bin 0 -> 28981 bytes doc/src/Python_call.rst | 33 +- doc/src/Python_error.rst | 15 + doc/src/Python_examples.rst | 3 + doc/src/Python_ext.rst | 16 + doc/src/Python_head.rst | 15 +- doc/src/Python_install.rst | 533 ++++++++++++++++-- doc/src/Python_module.rst | 295 +--------- doc/src/Python_mpi.rst | 71 --- doc/src/Python_overview.rst | 56 +- doc/src/Python_pylammps.rst | 5 - doc/src/Python_run.rst | 138 ++++- doc/src/Python_shlib.rst | 78 --- doc/src/Python_test.rst | 152 ----- doc/src/Python_trouble.rst | 44 ++ .../{Python_library.rst => Python_usage.rst} | 421 ++++++++++---- doc/src/python.rst | 2 +- 25 files changed, 1140 insertions(+), 821 deletions(-) create mode 100644 doc/graphviz/lammps-invoke-python.dot create mode 100644 doc/graphviz/pylammps-invoke-lammps.dot create mode 100644 doc/graphviz/python-invoke-lammps.dot create mode 100644 doc/src/JPG/lammps-invoke-python.png create mode 100644 doc/src/JPG/pylammps-invoke-lammps.png create mode 100644 doc/src/JPG/python-invoke-lammps.png create mode 100644 doc/src/Python_error.rst create mode 100644 doc/src/Python_ext.rst delete mode 100644 doc/src/Python_mpi.rst delete mode 100644 doc/src/Python_pylammps.rst delete mode 100644 doc/src/Python_shlib.rst delete mode 100644 doc/src/Python_test.rst create mode 100644 doc/src/Python_trouble.rst rename doc/src/{Python_library.rst => Python_usage.rst} (53%) diff --git a/doc/graphviz/lammps-invoke-python.dot b/doc/graphviz/lammps-invoke-python.dot new file mode 100644 index 0000000000..4fcbc9e482 --- /dev/null +++ b/doc/graphviz/lammps-invoke-python.dot @@ -0,0 +1,27 @@ +// LAMMPS -> Python +digraph api { + rankdir="LR"; + edge [constraint=false]; + input [shape=box label="LAMMPS\nInput Script" height=1.5]; + subgraph cluster0 { + style=filled; + color="#e5e5e5"; + rank=same; + capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; + instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; + capi -> instance [dir=both]; + label="LAMMPS Shared Library"; + } + python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; + subgraph cluster1 { + style=filled; + color="#e5e5e5"; + lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"]; + label="LAMMPS Python Module"; + } + input -> instance [constraint=true]; + instance -> python [dir=both constraint=true]; + python:e -> lammps:w [dir=both constraint=true]; + lammps:s -> capi:e [dir=both label=ctypes constraint=true]; +} + diff --git a/doc/graphviz/pylammps-invoke-lammps.dot b/doc/graphviz/pylammps-invoke-lammps.dot new file mode 100644 index 0000000000..0d9e65a5fe --- /dev/null +++ b/doc/graphviz/pylammps-invoke-lammps.dot @@ -0,0 +1,30 @@ +// PyLammps -> LAMMPS +digraph api { + rankdir="LR"; + edge [constraint=false]; + python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; + subgraph cluster0 { + style=filled; + color="#e5e5e5"; + height=1.5; + rank=same; + pylammps [shape=box style=filled height=1 color="#729fcf" label="(I)PyLammps"]; + lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"]; + pylammps -> lammps [dir=both]; + label="LAMMPS Python Module"; + } + subgraph cluster1 { + style=filled; + color="#e5e5e5"; + height=1.5; + capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; + instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; + capi -> instance [dir=both constraint=true]; + label="LAMMPS Shared Library"; + } + python -> pylammps [dir=both constraint=true]; + lammps -> capi [dir=both label=ctypes constraint=true]; + + pylammps:e -> instance:ne [dir=back, style=dashed label="captured standard output"]; +} + diff --git a/doc/graphviz/python-invoke-lammps.dot b/doc/graphviz/python-invoke-lammps.dot new file mode 100644 index 0000000000..6b9766fc7d --- /dev/null +++ b/doc/graphviz/python-invoke-lammps.dot @@ -0,0 +1,24 @@ +// Python -> LAMMPS +digraph api { + rankdir="LR"; + python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; + subgraph cluster0 { + style=filled; + color="#e5e5e5"; + height=1.5; + lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"]; + label="LAMMPS Python Module"; + } + subgraph cluster1 { + style=filled; + color="#e5e5e5"; + height=1.5; + capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; + instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; + capi -> instance [dir=both]; + label="LAMMPS Shared Library"; + } + python -> lammps [dir=both]; + lammps -> capi [dir=both,label=ctypes]; +} + diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 3b20209e5c..18092a1573 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -329,6 +329,7 @@ LAMMPS. ---------- .. _exe: +.. _library: Build the LAMMPS executable and library --------------------------------------- diff --git a/doc/src/Howto_pylammps.rst b/doc/src/Howto_pylammps.rst index 96d9acd994..89119e89af 100644 --- a/doc/src/Howto_pylammps.rst +++ b/doc/src/Howto_pylammps.rst @@ -11,7 +11,7 @@ on its own or use an existing lammps Python object. It creates a simpler, more "pythonic" interface to common LAMMPS functionality, in contrast to the ``lammps.py`` wrapper for the C-style LAMMPS library interface which is written using `Python ctypes `_. The ``lammps.py`` wrapper -is discussed on the :doc:`Python library ` doc page. +is discussed on the :doc:`Python_head` doc page. Unlike the flat ``ctypes`` interface, PyLammps exposes a discoverable API. It no longer requires knowledge of the underlying C++ code diff --git a/doc/src/JPG/lammps-classes.png b/doc/src/JPG/lammps-classes.png index e673299e9dc15c240a720820590c7e5620269e0c..6d8a20aecdf0ee1d55f58d9004882cb6bcf03306 100644 GIT binary patch literal 272143 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 z zt`Zl(It{k0karb~<+KM6R)^xPPWQ%JJ1G7ZKU3wWuy$CFkBqbrIDmXo(jcZ&=YCur zbYIXmDrHm|2Atox7gf*2+H&M2=6DL-hEA~lBgbVuhDbkhRG0~C4;rNK-t)$-TS^j* zv11oT*RH#~^`~z0pY706r&lpq-)%l)hLXgEH<+$+_U6YI7IJ}8iq>4~s$S4&ao~&e z8Q(cpCPi;<`xV_`-T9!^ZiCW|xb?V%r`-I6(%AxPz-?GU@{(5!S(l9S%H%5^dbjFK=urbv?yE|Qh^}q>t)Uu;xz>5dS!TUy*8(xbd}VmH{4dR^Ut!Gw z@WfC?e(R#9{4M}xGAEV?#l>mu4h~k#9J8qN-1{4Kejiz$&5tf>KJ?Zaa87s*&DkdB z1(^j43OM4;$76{xU~3xFWR@izi>E zic(_HTT$)9t;~^u)n2}OC1%1RR7K}P!;#0a?Np|6Tl)2Q-oyULNR_H378adgs*x2Y zG2F6$+k6RNCq5xTeZqvkfByXOZm}Je!K8qD8Gxh=50Jz6V|86Y#l-Ru;3{dLRVa_k zlw#Id&Y5EbQ-uXs`v`N)M@>e`J72JueRqHPh zPPqRLiwn%iFa&_B7_14e=&sA63K9qKB^wj)qmr^a7l0)Vz31E5h-plE-Bc^lN3&PW!9RniMHVk# z;lI(7wC+H=yB2JW0he~lgMTMP_Xm>?^q;DK{>ms6yRYEdr{9aeKjAE^jOM$IbL+6F z04wzl3}llob+X;N9aab}lX7lXZS9#6DOax+`5T_;T3CYtTwb1U-u2y*``1UjZN5=n zZZlNvO;}tZm)+9Frrk@omBlx2l0{Nn%LWT?&G*I-zhWMR6xJBQ>!hqRg9kR}mU}Qj z%`4~;dc%kNrl))QzbSj=BkHJ7_cxO0goI#m^;&HQX0))iL2tocDxmp8vIXUn0fLMK zG0D^D@&jx2_cdBY4HVul@bDC#z&-xBqAlJHB;Wg3ea#p--)i zVg?j1d3kbB;;_w6IFwK%R_ms?AI(ZS z6?BmI;e;UZ!J|jUq^}#RI-fasC@Si%%^R^FmbW`_*`7AF|5};_IC(^Oaj+OJzHd=7 z7Rgm&1k^33#`ZmGD{2`52|6->WTGRt?PFX3rSq(l6FV^@;-kdI$D5!3@j&m}!nsS_ zVFZ2c`+9o{j+_qq2k+j#eTtiO_{YzhLRmjQKZ(N#B{x^s_U?~qVK2Hp(UtfF1hhM1 z5FK@zeY^tTr1_KRVSI%BPwFW*3wc~3#1jE1xJ6h=bibt|t4uGwcW+102#U@HXEVy+ zguc$m$cWyG%{wUN6Nc(oFRqHLYyf~hHr`8-h(chSg6LY$>AIY7Ak{hgoXO0C%r*8< zrE17_-fxY#CZfyaw59HDZSxk2j>HF0MgGQ;$?q%EhtQJm<1NEo=)erwCnsmTeQ$B&gV3N&TdDT#3qGVB5yAnIi6r8_6KJwvIWXiGLI%<8Kw;aA ztsn(*Fk?1>NeM%PMB9ZE)hK9n$mt=diwUy*faeN;XNv+}hxdQ-_^}f4Q@kb^j;CT{ zcflr+j<4`id;e<@_=^~k@w`>xy?{w^UJbNn9V^oMqIBKn;KM5hDXaVHPka5Y-6gky zm0t&SI>fLG->j2gp7L6Rm?77h0>yDikZ=!%0QM9BNn*C*>nyGHp?*i0rI2*9Hhxlp z`g;nn^?x+a*n*~uVvsLVSi!dtPa$_8 z#1Ugi=AqpxX$=d}TcX*!=<5H2XQ45JK9G0OIq}loDuF8xB+IR;h1lB)aLe8uHieOS~-<)G@ zon(ED!jCRgmVn1QJEZIel&uH!)+0g*De4TH1Dk-UCR&e?E9EAus1yF+hXw%#LSqSD|Yo_(g@JvMPC3V4y4&sU86lG)KxIbuW~yzE`eXnV;ey zMUJfb@Ijso_G5dE9qmT`)2BUIqlrz#&XAB!sGW>&n9Dd5=_C$obUJNit+JsUxe#KyEJ$Ag<# zljZnx$M3h{gPZk7jT$Hk0?VC7Y4r32^5L}C-#=A_haEXm{`RfBKcz|T%*SA4*B?Kg z_p#Tl#8|_MB6&3zxFKyMEAfnxGQxq;ghO?0aFxfTFMu{*`_^vXzx`K@?2q}BDE0wg z`KAX2?}crjp&aS26YLLU7^JHi7#x~klKy1RHJP~Ku;TgsRVGQBm;l= z{RaenGegMGT>w1XteiBu}Sk1V8 z3JP;-uCy{tQ6DyJHjvRYqN#l|s=`O^Z#wx=iT&7AQcD#LLEq^n(Bn+{NflbMBx_l_)BY1x!|x+XWYFjxt^d*| zj&d8ZopC35)*mUIb1kY!^T5{Ilx8nxv|nt%7{B zQ(-4CVd^dJ{Z4Fcj3_aA>(2W@w!4Y7Z8Q4SzkV&lkSBLyNpUem9=ny_XM2Hj?+2`) z%onpt@BJ1h#{Z7Gf3~#Cvt}bn#HckVdg`3(%gjW;ne>!uHsb^VH@aYrQr@u+K=X5~ zto+FOB6t$b8&)2GdYU%v30#i=Kv^T$Or&1HW6s_HuY9qXnlp(A;QU)fmNp4?5TY=V zQkaj%qNT^5X9^L@ew?6!%|sg^N*yXEAIcl9sVsh32b0fIAq1cb6a(a++e-&lgJj&k zoljv_Q(wOa2)B?Wz7Pg?0`M_$LU{!a;raf3bhA zW#-L9$HfKo7(Yr|^a_U9Q7Qh9!c!Q*P?Z`m>yczZ409Fm!bvP1wJ zb<(02^!h$LZo~}2{FpQ@#+A8-Bp_+Y#NqifD8mH9Y)5NL_?KUZ0fy7Ciwi>kJZ!3w zS8kb<~YS;AKa1s&Mfd8n(Rj|F{5p}dvXIMj3Ql}$lrr{tS5p5X{D3fq zs%|A>LoZ8Mdu;2jCDvp5f7WO>?AeIThYt^7=$CluWaWt{gI*`AHu2?8MhO2l|9rlL zo4ec9Q_&J{ZRcsf{|Qfi+*oca9zw4@wIX`cmJf;EFdrUT)LMt6C#2hL86b>3~= z&NE>NZV2=Z0oKzBiFJcqP)5IBEvm9=ZI)^d^S^q1_uO$}?T?M*LsjN5q3>}&_!4%N z@Dh9f=**t^H(MKOWRR4sgTmCYr(SfyqkRbKoJHm?D-%O*M$GLoUC7GLW(9d?KLyFm z-?>y)l9`It$cZq;5IB>VG&52JN!?XYV2tgNV2%UnrChvt?&auLy0T5!kQ0Vz)B*@* zd8MUc!+h=Fs4|U_=ymQ!aHDGMudS`k-Rbx5Z{uvSL^IveN)+-sIu;`jFLBM=bXfHh z6WGmIfdP00B3(%J93ZbIG=7X?1)hba`6)pA6}%L}xIBD;k*(`vMN1Ad2e6dwAFv;2 zT+^z+Iw*IpuYPuP5Pv4hXEQT1n)@5{1{M8fR&R6yf#O3M3HAlk3lYd_C z^mf|x=>^CxgfqO)?Xlu`eE+l0HJv9fjH$?(g`&ej%>Y{RBj8x`VrD1v&fKqkC$nP7 ztUhnwzOCUtGECmd^TKOUxy+taMq}x;vWU@R4z`{`ug>A-_RQ;zAdJykal){ zJ-z?ywWFbrUI&V1fV)kIBL!1>!Zaw)`6N9(s@QJbyBF{}w|yqjIk>xbJXUz5# zlM&mg2oUxJaKHq;K5NsLexmatLBD_h-T`?5&Hqli-heLsb=OMALy${R3&D2JdW%b) z%!N@+43T9dLX(Fq;J5Db2(&&VJ9$Rr1F+aoeuiB1Jy)61PG}|JbNtZiBcYHIDn|yA zxeW__&Y33tPvIu0pzv3agcZ`J582zwDSIk7{vta7^ZD`Kkw)(VRdWEe5#(ij(%atg zZsp8!*{iszr1@RIF1NO1CJhE;D3Ju zC!T!nP@goaXF);4mo9I!wT2Gu$g5ROSR!cBFqucMeZ( zJhG=UGb5Wpx_SBXr4OSfXK*AEn`0HbU%P_F;lx<4tb1!z%OCC-%JMC;`Dib-e zM?bm_G3fgK{kurzf}-W>>I!NHP9$x&a5)~MJx8rRR^(@xx7mQ$-GB$UBVt&=SQ2A= z&5U3cCdh5{|kD6?w%Wst=biSMv3|#jNUPh%M(;vA`olKF(QhE=Y)7q&QcZ-rj z%II*-Ok^Z~`MgTBiTrJ`MT}xS;=Q zQNS?a7F<(fxgpb0VO9LqB)TYH-v~-Bk>uy+d*7YHDn`4dF4Md?;f||U?<0)WFw*$= zm9aGucFM~q=3RARE-%x6#Ip2xE0!8x8%SbdZqO4Gn6~5$(PCD=Ui3AKVe-aRBR9P+ zA2Hk9JpRF&->#<5sxN)Jby+%>Soh@@A9XkYnb7c>nFaLKA2uxc&U9(&Ddm0ZJig{6 z2Nq?2Q+m}DoQ3c*ikNeV%yv*%U`tR(2M%43>PPZD_#c{WtHT8vNZ8lHJ`e-c00?o4 zG@{?IbhC=GhBj8?9x!#sj@B)gB2H4+DDgSVk8pOZioBoCkGC+Srt_c|xfR|vYE*@T9P2}-{G{Z@CMa5^aH?u)Wk4>0(y|P_CcDhP#pg*-hYnsSuX}&Qbu${yDwiJ zGtJywl_GioWH0*NW5@c4pMtQ`V0AO;PRZCj#GRRg8WamP#=aUf=3>}^woHkX{p$1Q zd&|Oc2~YffbG>-%|J8~E)0&QZ<(#9)MHGL3+;n=knA z(Ia*6a*;FM^-AjRi^;VQY? z_mf*MYNs1NaDVfxah8Qeh(wjvGx7VC=SWp!l9TOM_NVt$lN3=m{N5KB7^oz<&H%W; zgQF6Zm^g$Py{338PoGARFa24L5Jd!4V6ZM83zgDTY$B$CINsazy!OQtXg~*mBb69H z#Uv)qz_ia){Erf_V(VlNsk9G|-QN`C^ExD|eL4pYbKd6cOg3_%ifI~QV_i`MSD<3L zPEOg-tiwZH7hYxd6Dd(8A-^5huX}eh$pM6n4Sl-WHS#LEj=ui)vJ7YNu>3F=K7siu59rS?%#Ah-)vaMnrB&)g_Svp(vlZX z!2o2n=-INeNB~Abwsl&zj9-RD<^jCS4#E5XmOhR+yH$U+tLxy5^$P_aKw0js8KPob zaj|l4)g$|`xIHO1GWPGE9inv`hsGHa5U^g~_;6Rce5{!au~ltSVL;Ao@6*^$$ean|EQ#2lYW`&iwKVdbbx=WR-1;BU5M? z8Xh5U2425$!+J}IvWxc;UX(dj2x2~lH<-1*TU>NTu%Fu#xr1REZ}NQq^bMao(ADnG zo^OJk*4egHN|kHO*lO0_Z+C~CW&*{N_dIhgE2fM>Yr+rwrPMVwO~v^2(*2SWO>zda z)xZf_9WP!b_kv|0^GRL>{&0|*b*{VZ##t7KA|DB^R*JP5-8N=SCh!WuUGTTUL;rk`_w+A89Tv>j;*U@pCbj8i)WSy5i$utei$GD+1cP90Mm&!o+z@6Nr`e23^t4URe^*{8DUI3jsBm>q*!aLPQVeN>P@4Gmi!d=KtDeP z&b*U@gArB=)5vSQOf?Qx8>7Qc*&JXON)NH2itG7c$HVe^tALUYxL{s; zQ!|4LaGS(wPJk0Y7_aIL&HF3E8E@Xad#8vuDtC4^<$C>BX|Rt)bEm%kyR> z{a4+yU-h%s&={zMr7&J}3WuVGFfjeU=d?O!>(6~HA@!WP*nJx{{2ulLP<6rSN4;<0 z*4ZW5hkN{DYT><~p6|GVaS_&jWcw*Wh#n4xh7N$OuSNZ-v1hr{HmVg&Ms#(xU;);Q z(;6~l2J>qEvT~)z7;e{aL&Iga>Zv}*uxrP1?p&uTWGn|2zFE6B|N3=+grji53`t#>N@q4KbxF-I80W@D3CcdC|P!nhI z_*hSMg0hLF<;53MIuMI*qmQTvowi`X(PvjY6PK(~(6n-&cV~e6MGHAKfzwIMLD3Ud z-5Ph!6ZKV1$A5LoYFoDWZTNI&vtDm)O2otiv8p3Re9P`-uW|jRVoZ{S`OnXOr%wk} zsZ7^F==&Ku`KTkq?ChtbZ86o7*L(EHps=~}~F0EJ)N+Lyp>1kA!mw`wMhS80AO= zzm;-38XIM&jG2F-Fbh)P=6`?32+WGoM09+t3`#A!>HYI_U(q0}HwA#o<3=rbXmo0h z>psDVrLlNCxJoc*0NvWGYAQ%xJs1y4_3*-S`yFlDxA%KI>dd->N9AF; zg$|VI+&Ql-(MVHsA=1*fc0wrDf713glH%jzdXV9Jq?r~>hGC7dCA^RfqqiE`uU@x) zeD1ZVq@q=};mNAU)AuN@vN9QBJlAE0=@4Uc#LZP5tG^oT#d^H&%}sO44{EkwH_UjN zwtw))htXFb?ELW-)1#9gX05cmJmc;7{`>Fm`dsTVv36Vi#_TWmYmfc>{p;%h3JlQE z{rEa9Ieqcc9hYWqA2g#jQ6)F&!bvR)mY?!$4;qtC-o_lRL&tvOdqVdrG-iQzs1&MDG8OUnC5hydfgt_uYl9c${9nRuYGCFC3!LY^YD=Q?=cVU z-T~R5^p{MK0Z>sBpqr=ehScqCUMzQBXq}4Od_VEt8CVv+&Mkq_Expt2p^otjGnQF( zqQI7pDlx+!oS04DQXK9vY5U)v#7^^Bv)bk5R8V&r@9I4KbbNQWS*a5+yAX35iQpZQ zWEw_AtbELRdf(h_Qlm!Y-E5b&HT>GPIZ1cZ-HhOsKfCOcrr+3@nWp4v)lE1I@q}f! zY}t~N#E}Fye7B1G;c#(&j>W85`!bUmxpBq?iIKH%et@`^lQipkgMi+R>Yk2MAVrkv z^{!v5Df=(7`E2N-ECq@QCC|}GOGp}w9t=q%zCV65heq@F9}FK@=nJ%J)a({)6Y5Td z#%=CMsV5{ko%>JhNN%(YEQ^EP`HE*GSlPJ$up$W%xb#({shL?pWo6{gcVie=QPNK~ zHTAbwn^!uDAyJ1Bt^ceR z6q6p~g$pBRceS*7Ekr;7RWlt9?{SS3@-?l%AN*yz9TqqtdSMC}1$1OKXcmU=+sX@zO()XTi z1-n$!wtrEn6x-F&ikY@-s7(L%Z9QBw(W{wb`BwxAWZHM`6qB@j8#iwrP5Bmm;le&} z0H)DF>U-DhB+>|^y3g1Ra)Lg}qp4dQicx?V&tvHOa{Xn3&QqLyl2bKIE&p1lt(fZS zTGwNL4?0!r151&`s`|-kWQ@IZ$;Y$a2bS*p6?v5^znW}~X74|@tmR}YAbN3*!}QIA z2m7SxIsE>{MxoqXpTr>tBG{0g_i>)Jvgc_l{gD2Xa;M#*Fc;2Ea-BQJHKu8w+Jlyd zF`YzAlEegZoryhLP<|&?+VO?-{%(*!8EYRuyoAg{!`x%e2fh7;9+Qol2>PxqFDp2tVzF!=Z&5TVki`&j{+& zOPY$!YShn0XGM?TYjTbOJ6pfX>TMq%9e2~aHQ8QP%R-tmVZ;cZzT+^mu$($$+hni` zFvwjw9+jtE->ZH}>|&YkIE_0^__n^2QsM6@d?_Rm;>)qd$-p8Ed9 z)p4t%n|rrec=&n1+87Qk>d4I7n8k(7XNf zUyG5kv`%XIq8m46O5-9Hx+pPW#I)~!nv9le^3@x!?)V$gYo)_V`Jml7pS8<^K#5W+ z+{Kgw_&9>q-v1yLj=hD?q#STWrxWaVY)2V_y;zuP;hFe$AU*P|wvj}rpP=AVUT5-G zFk_cxvJ_(q*d+3uy(n61=oCRhO{gydI`-PhhL{@I={XC{tsc`9Iub7)JbqjV`$Nzm z1s+af&Z!)gbRwnQ`88D7Df5S>vKz`TkXyLN%CKRXk9N2qbGdV9Cz9zC{#&p z+(y0Xv^&!|R|Zo!S7W@sX+Rwq4`h8#|JuCClYN1M%2sA#Dn0gADxVz*+g!$*YwS1N z`|%{!BjXwbl&vPnwI!;egQ1&=>HHxPm0P5s8BCoz^+luW9WB};oKwr*Uxo%BL?J+@ zpn-Fc%fG+BFWHm{SAqj1JSXG?yKmDIktdh|~1)vfw=`}-BAeE%_W zd`3e1qT)6TXirR%Ju$KEi3!db-#5IAn04IeU(3<-lpTM&_SEw^y5Ayw0kb_+1PhO= zbYL@{Q zMrLLk?k6p@?5e+i!a&*0KRa)3?ruIq=0%Rw+_^rbR$8Yn^qXFNPRYYE|A9hEddtt| z*u<(_UA;MiZv}|6w)S4%B|9g0)>(0@5+81aav)9!3MG)QJ$!Riz8$n(gA=M*+t%>v zWaNKA3aQCD6N`CRR-q$Y#NeY(=d&+9*pU-@vf&q2%sQqI?e4$*@L@O9yveg>UAWyc zL|fYt+PP>aU%h@U%ujeag;2;SR0D8fWygRo-bF^Xwwb2)FX{k;m=Nn=Lv-!lJpge8 zL4XV22Z+-bFcSdTw6B(ZN>Oe2!r!nSoP}*GVxuJ`cE3+QCfX9v3KZB=$e=-aR49T90X{x*GrN|4KA@Rjc7HfLY~faU5jQ13jO|}Hqe4dWPwFqKcB-`@HKHnn&42FR zaHcha1Oaca=HthXpn&2i6ezyj8F`6tD+R+x%&sMF6XU-UvNE>Ks z7CV=@EIpe2p^R7Ow`h7@_4UP*YpP9hou|@zoNNE$vVLRom9ZX~$Gb~bWhN+n6fx!6 z_P#=_f@kiHupJZ~s`17zv+zA1V~U6g7sNbi*;76ZbJj z@GV)ktFY!JWB2&;UQ$i{$3ZY^yp2;@7}%3?d&Ur zslSMl9N9B8Ta(N_6fIp*~&udNOM=1&`Z=*gQ;pGtZgFPX43FlNxdJ49?`CU{Q~ z6>OF(Lj>NlCA=Xf{s$&9^7Pg@y?ZdK6U3^ZSf{m@7YViqEhPD1GaR0)w|c3l6hK}= zt%oJ=AE(u?-n`-L%5>l34_VZSU}1c%*NwNRUT$;%a1@jknt1-HHupqIug4P*m+077 z8TiCpCZj1+WOxK~Y;6N6oCFg}E&t?#LR{b&tO))zw4Q^QSA74zfhnRIG$|CgCLmCR z9#ygu1Y%Tf&UrpkIiGqj`gXMS_C~Ig5Lz;z7e?>8U&;d3j_!lQ#4A?jC>1GhvGii5 zOSk#t<3>6*<_))IPiiq4*3(iNHPuckcw-28oFAPn$Dxqq<0c4pj0GJ2T0Y>5lGD(Emegc}fKxl2LfiTK_iz3<-eUnFeBidImtf{06D{JfDp1|RBZvm`s=qe0|0Z=(@)nbJ@2iIca z5?%m@4Zqa0lGvDBPr*h8(UQ`eGS6%g>qqxaj;@8{WO$E))e)Vc&Pn^9B*uK>Ew7X zX|9@KR0zz|CkrNak!MiNrtLN-FC(vO!w8r&H$}r%@3$cTv*;q9F-!y1oL2h7$B$*;IZ$G??bFv( zs<)xL*jm<6LQEeHvbfOu0!=x0FP0Zd)gnAQD29G14>nC7!eyX#q+b#61I!CyzeVM- zsPvR&SP^eqY*iI(9Z574YKpypJSCur!4%;*biAaC$vIVTK$9d`tT}C}AU#A6w=A`N zb^rJ$rhv|H-+Iz4SX`=-;y2;s)J~A*L2et6a0QP&twoh9T-?_(yu`~dd%-G#jSwS@ z9lT31GIB}^bcbKowU4k5fIcLseVA`y@}#P!c4~rd>|{%wxmP>RDQS}(2g^9peO~o= z$AOh30#TL{H}jXJq4SzkOH%A5&LYm-9A{ULDcR@N^tM0r2{xH9HpkoX<*g6#HX=8Y z6>m};Izo+vw!=p>L(TV^noArFz+cx-^N4`q;XQ~;fsh4CtJrgJZZv*tI`53+txJBp zG$plGEW-0ru!ynS^d)r(hYV!p#kMEIV=8yyYa-gf^nOZ8O1sXS(G;A2e4e_Rnpq|l z^80}r{76$Wl9@AS3PYKnQ3`@T25t(v3|Y|TY(sYmsyFu1_Y>b}?b;RPikrKYMS3^s zeS>=-#0xB!ce8DqJ}9n8_^lr}emn%HQJc)~W%PQ2;3>uhyrAUt*^p3(XxCZ)EL;ks z3Z3B$xh;?*NeFGhuiv#NSKe4R{k`Y}YHFl>E+-nIU`U?0oP!D7z^m|!;0W^yw>Nod zCnU{)JfVqL0nyiB4XWsAE{Vu~3h`5{%{lHGhNp>; zW#=}39tWkYbR~0d_w$P`D@x|Adq&+&M{2w~DrTZ>BVB3d0m)hbG(h%wq+e3UfAW$p z{btrH%=xqs#Q~c@wYlq20A>*G}j2{+NY{$yd@Q;2bV$5ul(`jnY*Yp;kLE z1%|rhTQo5Rt7HKNh;O=P^E?Cb&a<-es1`sQR$Yn~%uwn%Lg5~w_@g~0Vdf~$#WGbH ziBPyP7OSbcoatUskZ3O4EMcO3JMul6YJpq~bSGvFAXM{*cBh)HbXRr^Rx~u06Lx)g zrXSpN7CuJ>n+(?MG1G@q@(OO8Ls|uHhsIZX93++x#{y=_&ZM}wA7%G<#VovdBsool zQ!1a=jMkZnyx!zsHDoR>{@fd5ng`Ck^1^G2bbH|1AxxTKr`2~$`+&%WjlsJap&8WI z)k9DgT9z$m_bXl|PYDLD#0S?Z;S1(HZdCYPVaoHL##Fo`K4D>IUTx4x$7eMzV+`|ZxJl+xRD6f*!;R@scKA1}z$Q6=q&maw0W-*=Tz z_H}~y#uUPdNOx&s=O&$%3sOtouE+dDo{+`pL0(-i;qbZKETInO@3p^_Oj_zQX?q`l zgIioz*H57^$Qf%=nFfOWJ@hKKiV}PTLFkeQ6$${Ee{wBUi2#gD)_ln3xj6!Ccz@az zh?+#W7)5iCJ9kEX%fj9 z5Yq&UkramR&d$EyO)Yhrpl?#GIs$@r>KA(QWEaDzPFzFkjP}FF2D?^?rV8D_vmCF` zpAl!z4rE2V-Ivsb0?pv53X{vXca$OfmX9$5+($tuBzaUsD_XRI6B2(H7X1WnL0ckn zHVoz-a~4^-iE)~MSlHu{qjBmoJvM1d7^Xm1AA5Ha2E5J!I+(a^EdA*3u7;-R3mF+3 z@lcqqirnbi)CeXj@GglD;{#zFL18Xkzdt5Y-M~PZYE%F{0>j0)>_w_)H`8qsjOC#C z`JjpTYBq;oTtk6yK22pt)8G04S9OUI9U)n#&HpP-ww)eenyz0mL$Ep?rY#qyZ;y<} zRmXGgK}dut@BEz2>(VN3{{PR6Bz+lv^Y(z5mPwK1YqF+Lg^K#cp@lX@u-I)og8a#{ zAq|KtFz?Ul_&=O=RaE-n4mlxdr=hn>S5jAjH#H0w+Txo^908!Sj zf3>YaR3}W_KMc~GzCun7El<3DEjDQ?0$&5!OH1>(TDVX<*fo->Rbb`UT7L8fqPj-8K-`T_T>(s}gtEh>&UxG%CvOs)= zw}>tq=%A5D_+%cNf*%Q$hA0QeZ~vQB{*^BX0_w}v6T3xeQ7ru|ER*&jxQ&U8eVFcM zi^FjHGxuqwcQapHqGPB>s2r0%G(j}0WibKz`Uf$GCqQ(9Kktx0Famef_kR{OG( znI*@dkU|=N7hmQgXeQM-znNhs25e~nSrY5tHmvL(oFI0H<7z;=W4k8ZcCz?b=#7Te z90?6Y)NFLM{`|6~OC6c|5+Tpry*$TLSisS3m~e~vmLd@dIHT0jvUHU2Qx`i*K>u>H z{9Kw2d5H>;b?t;C|8AP5+tMPBxSx%SGe!Uhy@}JSZ02Cq+X2=tO#oc1@-2&a#;`eW zl0S#L6e)ByoocyCj4(x62<}KRV@!RsVq184xHD6voN;Pw3l^3OYz*AF@Ydz*Y$%L! zjMb*#MYmYfC&4%XFeTvMEkdQ*PB6!=a|5^?lK74}^t1hHGfqf{*t#*cSaWt8QrKR1#gw=z-_xJM3yBlsaz5Rj1ZBL)oZ;d-6h3M$t zPU)9vV-@YsOp(?4ih%@%vLi=EB)Qod%~N{tPzuRn4 zb_mqQc<(;fnKX6au0zGQ1#3Cj-H$aTlNmv-Nw`@%+xt!(|H?kiS-@A7JjhIrAFyJP+q4X+yho1| zd4z#PC+>Hh#U&|>D%y*?MXrYjHSB40YMO8J&!a=;4_hLcHm&&Dmumgy8#jD)7yq-^ z5)$J3F!rcl)}MWsV${=a-zm@Cs-u0|d-12&Q==1tfA45o{H4HHYh`loxFvJ)G`<}@ zTKwbJ@X$B4ZzN?hH%iN-WMrakhb^nG>hZq%MeUAI<8Oh~U|C89bJ(oIGL>Gv@}E5EL1|{Z_drbikrg8= zF3@7~gajGN@y3+&;rt+6zY2lV-`D%aEQ~hLtdgXa52l!A;P{o?+iw3|7D|}sTVl!jUw5;DXZlBFlCR(_)ekt{^3iaO?Mq<=eSC#Srm6R#dgke>>5G+hnR>`W~2eD}-tOQH}dA1do{x)t3f-L9Bn z6crU2O`eRagkY%oqC^$uue5Ox6^%?y&&+CGvpDwl55RdIgA7;Yzo)`fn+{wOSa|9- zrJ9l349*4qL=R1}D*^lw-S~qwrMqt{k5N}0-zUpU3A)aq`h=QX9^KLWQ#LFt za>sVZLt$;cHyvH|@o8oA`t=dDHru3X9;m%Mds3pU?eIV~?`A+nKqu#bgbw+{1ic@P zqoq(Ah(#J0Um5S-6_cw8M8ue0Kyau~>lVFnEuyx%$S8Tsz~t^TW}X2G@Dv(9O!wg%i@H!_;J_!9R4YP3G{ar$UBD5hpUDAc>?x9Qe zsUg+ftV5|Ls2-_0Cf9zow9*GA5IhOqev*0xRu~p(uSGV5o1xOLZPULAYwNnb{LZ|GQ|!?r5Vs^S5iY&jqxqtU zCD$*@9N;Icn1w(JtE5H;Yh{n0f8JZZ{I+!2=I?&;K&<+kl2^8^ue_A*`z6;oqrmuO zo%PG_D;;W#9ll~J*{R{1lbK{>%IVoneLj*CUJ-6NScM$F-XGTk2=3fs*sZC=i?9tZ z9%PS(ZSnHHTOpG`|Nka9u`gQu6bJ&PSL$0?n(*;?w%FG9-vXv3 zuO=`z6MS3%tO9S9l1C1yeQB|b<&O6^Hn`2`zpJt`^~0b9i$~?<^zhvo_?W5$Ql=3C z6_8!hfKhybg9ASt{v+0iQOjiY?$`P45L=()l5mSE|9t3T~kwJ1|J#=}zHBCpjZ!4QSh;yD;{gRkLCM(-=OwKMxDcLzZX3yxSj< zCq+q+5P6aSF`b%B9D9F1y%+cxXXn(pbGw-eJgE$a!wY8m3g)6XwEvH~Ze?X<1gQ!F zfnd4|S)8NeL)W+r!wAL(+j?_oPTM|-*SeURx)bEsOh0pd~hF1WgB)xUquYi5?0-B4b+(tPt){lXZ#uVwEH zPt6;+Y|!t$z48hJ^DZnFj-KyIo<7PPR=x;ucsDVcs&7AXj9^uVVApH(-@wT2m_;z% zD!-z?m)~U3OqmokV2jUt!={) ztpjg?de;$VQ%}^|h?-0c7biR%SG8fKRDuwN2uBSDIAwn{qX*U9WqS?&7`i?1eoJy4 z9flPra}Ci8v&&85P`)dKJscTTnd^T3Smpg^`7EauOEqn_dO2bY88qVKkK3i)MtetS z$Ni{1*)!9vN5a4@=i=jqd4TB7fftYOvat022JifTh&>*g`G7o2!gc+wbya zuO#)Ie136ADKUkUmB0dsblx1M$ z#B+%=SXN z+PB}CnYrn>=N?p60{=%kjuHFpo;CAycy|MYc|CLyfhTOTL*@iUD$4#|+}X+=JW7xP z^HRq-R#EfPUVWsVVlFeJU`3?rsPJ&M zNT}HGDL}7-T1iiNK0->31)~CG?i8@(ml(t|!^wv^lCRu1KEwBh6Ch_Bwp7lCV}hsv zJWmivg)cwy3&9m-^2Pg=lizLDqt5lqJFmq%WZzgT8h+ET3tqq7gGe%jlhlub$6Ym(% z^PTKnKfdYtJ_-s)2*3gmhNK}n1X@%uJ1MqK<}=+K&SWKbpWgYOWk~$>$t!Z6jvEp_ z=^Gl}1Z}O?Ic8#MRY(D#+B*BpXPe{h{U;V%UGHbuar57-e3K}}gC8FI4xG)nXcIWM60XP3P$fW&i9F;Y3 zMbv}zA!|RW=y{EJS=at!)xf%-K?x;1Kyk(qkopVg7s?MRk^k04GAwbX1g0szMMc1# z*>-;}Usg^;2Su(y;I>AXL@;RGjHe`^iyjNJU))$-S9RvpDPLOW0b|DWl9G}V{~X+j zt%`d|DBfk4>-(Dh1F~A!cB@}aV|pq1T{LxCnbpv&adQkJ9hHvzyN%2=dfT6oU+Try zJf3IBi8LA_*uB8r(s@>IJ9X&ry8bdaXvnrs-aQX7)DWK5vyLzPvZa=kCD^>HU*zmY zlqGgGpy(&W;{dStK{dDZJ)^<-Q}&p9A0Kx0gk9{PC3g*W>_@Qbi^jgZ@*4YCsgN_{ z7nj@#{p5?wEM=Bpiy(<-P4=F#r+2KXzGsy;(L3U3Y{@_>L_9IhHD=L6GYJr@%Lx@v zDr@1`(UCUl1Z0?HZF12$O=!Y0sq^63AkgN6m z?q*S7ucJ$QPAGJ`DD(_3>N<5A!$21$a#1t8w<}np>CV0cws*O1)4`jXFeXMTfNQX? z?9%Q{-8~DPPWPen1&7K3S^=}MoIO?Dn#K@6K!^lBN_hMA;p|C0ggOFOqVlKZas4-K z+5|*lQ?|3<{?A7FnXu+53)Ce=TtIVPRcIBB>jC%{3KCSInoa#MUtg5ig+p{GGP3f$ z7ZZf35(UW{Sm$qe$=;J}0X>e_a+_!2bNSy-p>mOvq{5$FSc@a18lfydC~eiE9r&6r>z^3D4G;%&zi@O{V@o^Dn3|V?Hg?w=+CI?FNsspU=?DOk-Ls zFG06ovela-*ha#7$Rv*o&_C6+w9NP~j~!<2j5&91+QyGh)xK|Ui`?Xz>8D)7%Wie` zV{mzbM{`M>qVy?NIp-5!=P~U2 ze(ZM!I? z;Y9*AfG$k#`wn|O!m6{jFIC#1e}ddq*7p3jy0cxe!jCxae-FmOMAqRFb@EB;x4UOe zd!J5U-}W#xYB%?f(ihvP(F~goVYG(r7Y8r{I5A+vIcQ9Y+>|LdGPQrz-917zAc77L zO!yL(Hjzn$$=Nm6mip0+g=aW+FPhIzJ0!Iq%ZU2~EHO*TjV3p!oJyTwc6%>lmm0L} z^va^7Ch)=tcjetcw{^Yo7k8fnX%?b@DJ@Mcwd^WSDdYh;A!cB)5jfARAmx2JQB+Dw zO73O;UHijOBw}AW26xGbqB?Z$Igjf7WbrF4f!56Lx^ePpX`YA=0$DLxA?%0tVy-d0 zco98o*`DU%@SWIFHqC4mEe~oAfex5|4Gpc@BnC1h?_jW#(*dLO=uDWO+Fc^3c9N9p zw}eOp`){`VH&=(*mRL~>gd{cqFr|iQP5Ig!Q-W8`G`rV(h31?(o|idb*WJXWV#cxK zYq}TBVZHVq>bhY@bcZgusfX)i2c5{a1u0>a zh0H{3eCFc_9~es6RiCySx_5r>a3?uwa=2{*u1tVt<(v)S8lLc%EegS^9z@7l>7>LU2{oJms1S-gK;HKq=Ql_K zob98Es#1|-0lf*!!U-epB4?J;7-BYX7PDx;>SDbS9ZO$84eE&ZOcIEi6c&ka+zv_0 zhV&NINmHgg{$GWpDDxrK&Fu`v6vd@#vzRgGZ`V%Xm$J<42=8FnIXM_W&Vl^o$qCPP zFj2mr6Cf5s!Rizg50sLU06qB*n-Q-y>3f4&Bld|M@BiK#Yc%lGP?TTXB;!j*u*gHX zvigmUHk}unjaPhX>%JO_o{!fB0YK?YSHvQfMq?@iE~bVIA2w{4W*RQEq5-#r7Gp~A zs*@Q#EBWkCA20>+oS54dQmAUivp#+=Zf$81+pj4a_5qI#n6MUN*GiHj`-p!lIz1jj z%Ru*Z00dFJBGG1^vNPrm8=p6ykE|&^fJnE!go!sHg?-l9@#n;eyCx>&1V|01#t@Q8 zfv8F^j*X^XLP7AzckpD^kbA)ii!r4UbcR3TnlOi;VhiXV2Z_7Dbxi%9Oc#N2<`<#FMvrZ@eVXyj8E>* zu1x%{UZ7)eaiTV+jHA!~QA)++Z0fYFr9Gi1#rA8GbQ+2jkLNoZZKS47y*awu-P^LCo6 zO|7jJ!6}3}F1c42Xu-K*?uR?cOitT&tk!yNeqW|HKA?w2hVkEXQAa0(VsPYy?~l+d z(QyF;<6JSExgn-8e#f|_${>)(>Up4ueWVHD5q)I(PuF$MkT>n-QP8(c%}L2zt!7h# zi3_A$P;()kB2Ti_&E4vsn||>gwx9!ncpC4h;ov*i}|`a2m~bJdC24 zxeP9Aoa*Qi{A>47Uta}^3lb>WOJ~mwn+EK^!%m>jcu}HXlLzS-jR2$SCO@t`&4pbZ zYugR!(xr>q`iC7IfOH%vKEuPp=5v8F0BAB84a+2hWpDt+c;z8B&M}W1*Dx%`Je$d& z2>3Q(y|HZfH&v093oX5Wz!#ls666JyI>AeH))HjT1X z3@87tb^kkxai_R>2z(Wv54)MPG)KncT|ToZ#HB z;i1L#3|>g4u*CpNILzO`%^gl{R64GUJCML&1WVlF zJ_uCgJ-)l=?ErcD%mVv%^QdhVsAdgWeUu;!8Eat|pDn9WAMe{gHt zh15JA>zCxzyH3@Mh#^|AtoL63asS&YOH3TYBkreh<8LwB+1t%ya^l&i?X;NhQx0}o zW@dJlLZM*y<(UCL_0MvPMpI7g?|F3%QQitki}2mJo_uG^z8m12?cezn-0T!~C$kBr z?=X35tg33|>>cp7?f23ZCp?%F)4u{G{Mu(nzI=ItF`zt>y5tYRL3Rxv%p`}vOfdzM zhh$NN80jb(Jav=d74MJ&a$_d&Z6@7aSD&=+pOMRkaV#;TyQrEWMOGGUEeD~K)vo){t3kq(oRC{sUKe5#>@syp-h7I*= zSJ2oGTqAdDOW*brJ3aR}KeH(APZ2A~Ptw0k+2z{Uypbe+bHuS@$Hs)3FUZU1dK|iZ z+3wu_(d3Jfl3leQJfz}Dl4|7d)#((&ed#BeMlh`2K6GgC?jA-PtgNJH`bx_feLUD# zQbEsk^Joby|G6^Fecs*{ZgII$c{+y|8Ti!%1@rtx2Zj9PSBw?oM>8H2!?dEdw(L`N35HIXnp`O@--WVQKWE;Ftte3kdq)S`VV@=?QBYSmz4ol& z0_Ola+4xfTT__p07J22*eQnsR*Kpu8S*qPUI=?XwD;>B)CRaL!M`uo(o7d_0-5! zwVHkhr!+UdSrxwrGy3)~@9AVwI(3s+z<#(~{?*~BXnlv9wz++8>1S0iu-zB!e#8{= ztk_$@k;DG^ibCp~|H8`HqR}2wv;plW8aHaL>{VD6iiwoRt2IvXDL9Ci+8$-6)6`Wp z2{1dtKaZt1VW1wEm*k7>zbQ zW)3xjBHe2FaO1L036%OX+j86cFZ$z(MYud^2$_}Q zktYUMer=tXt9XY>JOhwsh-;q#8-jx}cQD={Mnw_QDo{XGaP@>WRC3$zC5griMxj1g zCjJqdH0vog3ySHb=DY6MQ*HO>&z}k)CZ|Mdn-gT@!eT%&Er8f_HRSaQK5|?Fvi}f> zyMp54Y(FcYA^Ydmt3{kBF7`us;v@FCkZJ(;mH-V7U2}MeZp_>gl+2Fp1+KR;KrSigS02xFY77Wbxav*IrPc7OLXcA19HSS^!&CKtZy zS!tcIvMb7*HfWUZgNYj^T5eD&yY4$F=W#~rsWn0J+P2rNRIN64K4I7GS!q>sdYjYY z?pkk4>Ye9|Xnrue$~DiqtmKMIX;s6FT8h9u3(04RR;_$1=c5K)(`H!Sb8A~jVDKc} zQQZ#&N-){&V1BHTvNaruU^r$U;SQBq7PO#jR$0R=+>$AqU+EzJ>^5#(tjY{Sw{MFJ z)YN18e4Leb@z%7fxCwTdXE3>>=8fl4CUS_K7xg2TX0-;Guj%3)lUJ*Jd5V4U6k!X% zB8;UZ>%JNlcO2HceT^mWJIAbE8>Z1oC`72AA$!8f7h)9`rCZbwo9HW7uKezK+UnSd zHRZuuQ`aN9;$MC`7y9V;uUR&X2)94KsUW84mG$`SHy@3z=4~|qDn$XTQgV8%!9n8oB)$;Bx&@I-PlNAPp^jR)a*Ep;o@#<>tbSzo zdHycuswygQ#a-x3M^2lz(&XBhkt6qWpil5aQ3=&Ik8zZ}%7n>a3Bb|b@SmTm@0A2{ z2Ft!5t(ZJ}cEPa4`gh4Lj(8A*>OO>Jcve`LZ=~M8|H$Yi(blZC!{ejNg2}|g?C-Z2e3jVkmRuW2RhRf z8N{ws1)>z?n(dq0ljudJFuSRJnIK4i=ga-ET(|B%^|ly@A$u^p=gDQ)y{I!-3|3MQ zMj6HWs~KlqZHo$m%c1f?_3uaTYGoQ)^VJBE>0bKl{l~s_`1#_h*~!$~jW2P9nOoaFWUP2pYYb59OX9q_V^Y1OAsOJKhRj0#JW zu_Ju-aX5b^gNr?pVJNF_n2(27zJayQnzu8jY%L9)`}gZHcG<)gR}@ywF!(r)!L9tn z@d+_0$}#^^eVm{mdqLJ_2rZAZU&MBjp|RF(ws*_#7ZjYP{O;f#^JbG);t^jt`F8pS z@BiNGZ>Y)1L?2HX{eS{=V_E8KW`Q#ORilQHCeXg4OK%uDIw(T8tAN!dP)1Qr7p>eO}<50Bnr^l!T+T#yc`fE3{+Fg`VWjEx9 zv^}YT-|hbAp{?1l9eZ88dV6=ToUyC0OocJITYvTh)bvPfyUWOhuzJPRi4_O#wI{2? zErb!4i%SDH!@}PFihq%D_XIB5uuEp+x*K?Yd_}h{Hnm6)kj@r6QrWMPXW(TtpK&eY zm9O(}AT|f7IAdKzu}ztNBz|HeJKIWEzXQ)Z0;oYt`-mz5r^+t(F-xPx##HF6<=y7o z#e7^bjZA@r!+^5-CU!20t>AQxmdv{ntw(F$W!69}+pVl_K^iMsWPx*ny0x6cnAQ&8 zNAV&jY2|UOmO{|L`K>)#9j{nI-*dmj5w&bTmWW1&QU1me~*m1kL)BbJRKG(2UX zl#)p=mP^E;QVA#P$x2(geXF*o;T1Mejyj3+w<~I6L&9Zl?;}5kiWf?VPUyn(4+A=C zYiFB{DWSAwOuYyF@slHtkDv7|tvWk)LTFV^?Cro&Lg{6aylWEO%*t<7#O4{-l(VTnYL@-h2{H@YuLRJ1`!vzPzN^TtpTOYDx(!ZZ{5B44&R3&BA+GlfU zfA~cl%@5zbd)MKVDXfmSeR!{R*4AS4@G5NJSUZ~0eDnw%D|meeCBLx3ah5h#R;Z0% z*wxTq3Y+r8${95ax}LCqwf|O)Xq8MCzYcD~Ki2OE7L8e|k^T)G1Sz=;%~%PqXs1g>!agS`k~G0+|Y{xP6Stmej(Yx`33z331BC z=L-XEZL&VQM35RG&4l4Jy@_L6DXjAe_dhLO4BXfZRV+f`q--3QLmxzOxWm7ZF2rQ* zF@QVfodL`j2g-HG8ho;J%8SKrHH(cl6~^TfMH0^Snb(_v+Jjy(+1M~KP$B?UQBe{r zQnr`C_(-u=?AEPj^^^A0Wt36OJ^y?c;weJh<+UlIM+JAfJj>5NBIy6L0OFE@uZ-qL z(YmjxT(Fhi?esu9Z*}G;b~k^^cHJDsbRJp*H zk0N_UUNDeE8TYw-`F{Fh)y!#1yFYQyJ~2y#7@FR>w@CBdWt7G6FF)q=z}sqT*t?d| z(sY=z?K%?|slUFAn>R_dl&ToA&zk78w>*1|fx$`QOT)Vd9jqPPvAVQ#45dX364SKM z1F663wMiETxfg;a4W4!cSPr~n?3$!05G>XtNx+i>ES8zyveOwfAMd>Ys+Y>YL(iPN zV*22LeE#7?!`oznvjV84eNZ-v>4*hc>&s!MzlfZTI_eoTpljJqez}p_uh@Sw$F5(o zY+3I1ANkeY?qbWD*yC)iU*N7aDZ5Y8=GdiV#DF}d0~v@o6}Pp)Myvua^0#@? za&cpB{pPtbe$ML^(|fpIElWFRlB1}ia(VBTQTc(qbvDKg_-?NGtx%TIC2Ri_z(*N! zZTWwpXX?&xX3vtH9V?eL@n;r@@3Snis_Qmp%q6=Qx0AC&n+hdtdLR99V-TM=4CG2{a!A%uR&=*9$1**KDE%7xpu zU5j6X7tK#RWHkfTtQS%{d7e9Wjw2xh2v^QPYgP@5a7K#1Fi%hKZDyvHsMM)b$Bu(X zU#%RQvm$7U79Xtpyq1=MBdhWqc<%|x{s7YKH&C3Xx8?@uw)2(%Q_U;$f}}J6%ajW{ z1$583Y@%@{xJTW-PG3q#tEuVpK*st!EQrz*Q(TAPd@84r1j1=XOy-1A5Lz%*icD=G z&+#y4(3_KU=-8ZJOLBsyj>|4f&1t_8N=zE4e*j;hKQVsg0J9=y-u=&zygZ4Y6j?WH zi*H27XW4QDI?7S4j)FXid*jAm2qy@YUpO|WpKyw#N)888BPNV2aieGzJEm<*lkY^W zO-T~}fU1r?zq5Jjijb~hm&QDfF^ZWH@?(Cfq1+W-qy zdJxWU>)w2Z)?1ti;_ueCr94X$`C^E8@r^0sl5gh5T1|Cm%sBhLVoe|LLGiY(0~6Gt zED@_W+EuKIG?P)g^zzr&g#6N^H5=xa6voz|2Kcz@_gDK8tGuMTFLsLqi4vpt+7)C> z_W9_>Myai{R|0Qp@+~!&F7=K-^FFxyt_=ffQyQ}_D{kFAn+!fateK^K=s-bk$kCmErRdo!uAjA|q&8T6r!u~2dwN85(*URza z{ff*^4u?PrZSI!!I8PWb>D~lE?#NPu%F`dXzUa`Gup2~_ybL1&u^C{{WvA(&RvSDN zS8;~C<(RRhZ@s{_B#IHoVTvbcycx+r#$y<*@5zA?n};cMC7OCShD_b0bSpn2;~lRG zk(t3Ahsx;#mi5;FvBQ0F1;bX4STg3+NoCA(k0V3nmAgB9nsmH-0P%a=R?S$mJ8EbM z9>0Ctb}q$+xw8u#QwXn$r1Y=Q(nZ~au}we7%^sLEO?J^*f) zKytGCb1zfM75p%=wx0vzy?ApQK0jNgqeErrfnx7F)5fvNW|1hB1sBM)DjCB0 zLv0oJG7!6@L>Fpd-zbAiy;=Xb>%*kAWus@$KF12DdQQwAI82oVne2z$&de6g$8Y{1 z3tOJg!U3H5aBSi|p=1(2VA>zpu0!W*%v}kmJ03H$y!gjE!k($56q2$ZGcUxsx*hUq*QG8IvUIe1^Zs-!5k!U5MF3N&?F_9jYz93@RR$}d%+d&O%BFpG6kXOv5%JE zkscW$=XcW6_UXJs7ngbd{5xZrPf)*5yYwgB*IO$tOh2j-wYhYMmbF#<&-E3pmqw7Z zWyp9BA3T^(AG;8Dpy`G7TN#VV@>d;~+SXLk-uJucb{-!cuD%eYL6i30gI7<3=PM%N z&x(^P9#b61qh2{(l7CKpdWlp^j%mGG%FL>NKU&fOXEllf2uNTcedPe8Ln5M=(@haA zwC`|Fs}s^bS67c?y_iTy9#D2bXMJgi#S)gRx|^O}UOp5E-O;|W9#EC&@fcg`_?(1u zFRHtB?V7QpZzm~{9?(z}`O9L_Rn~N2Dd9dG;55rr)$#bAK{J#-c5z}du`1L(PkTj@ zp+?HCy8Wcl>o)l#U~yg!KUyrEwmv(}M6b=6m}7})ysPUhDmF!B<)yP7kNj;o79O=S zWjC^M%_xajX(*&JY=VGd(r0Hqeg6_}^2^~tn`XK9wl8`3;*wOq_FI+y9VH{{FzAQZ ziQ3TJxGfD{u;7tdpJw;B1h2XuKdcZwDgOFxpsy<55yT0`H30BIL|TSQsW zJ>Bn=X<%p|F)DVtl$LU5MDT;B*h=9y^?`s|Ni6Xvq>(BTt@6BV>PR}(ttM706N%-H#D7_^_*7xFKV zPw2>#5oaSWU7GCndlwEOS#-l?r))bMx3nG*Xs7L52ME|+_sZ(2Qx}iaN)v0WPrq0q zHp+eJ5wYD8bJgW%_rAI!KXdh->&afYbUcNsRq5lT)8~Ri-@Z@7J3W4a`;Xj&y-WQJ zbK1ZUP)_z?Yy<&Y#J6n`7AiP~@PEN4bBUd0&fCYNTixA|8zjtdhAldy{e0*e{uh($ z8=^<5Xz7=ln3}%8NJb*oCoEj(@oWFaqJGOmJZ?;}Egkl9RinXfpQ)RrAN?6;yz+PQ zoNMVz{KO{BDNbH;DP!oAC<_AdswXa5vq6)gT8+2swbF7prnb+*JBc=haS^zShI94~ zI*Imnc4Ds(X)dc-F0#Cu@!75C{1*5{G&g_wcQg)3#+C|uBNaP#S&)A8-N(*&IaVCr zZRsa%VR3%5@t{c>b^q*=($RT2{Ir6M7K)E2NU`beGCi&w3KT|*fBp#U=jz(oB+$rj z$0ID>(M5?`nkL9{)25}XR=qa8r0QyPG;;?{=Ch|y-|+!jhC~@Ab3b03pWngBOI|C@ z8>2wZjRc$l0`x-ZUWUfs&U~HFrG5MJZhKbUT>9*TYV=zDe!qVwlvg3s8#cSU&wvM; z8;)rEopK?baiHKR=X-XSIdym^TZoeuoOEEM#*?r2p`v0T?FZJ5A86_HcCOOzOCTTr zrSNM0)_ZMFKu@|M8qLX3DXgKHZ)|M5e&fce%*0chX%t`}g}&6ui$mj0vg46=!m%m( zdrrUiA3Fz(pMQ1j#2qSA?7H6F8LJ-S$2`ufIM3pn>znKt&BzO7g4t>DXf4gPz>}x` z;?H3?x|B#*@AhtFI4+AU#5qb*cWC&yj1uvY@T~XsHQZ^d-*-Dxvven7Vo%cODI{Pjc$gk;5>=yzW%J5?YG^ zjR!e7zF;E>J8RcgI=^n+Z5dzl?wzOsFmG}0y-Ilo)VPv)>MYKY(M}~l!>?ql4WHj) zwtqcn)b3?BH+^Tb_OBZj|1{j*uA4AAC%8*tW9%(}bD+z21TetElSFdl$J$u8 zK<@h8>av8AVY2%lS16$ebiz?o`p85#5a;M!ejI3Odu1ioJviLTQB#yvUdozJQ?^__rjKEe$e8*YED|ykcs-wYhcopJB-tk_x6}iuXEHKn9A@fX4L0_WdKqKXgF2N8c;JXxyUssU zirh*0{g{g<04J(xVDdCV7>Jn-(rug>GM7K;SAhZu`;Wd1Wm85yxq9zU7AH#B=b)jA zq%Li7I6HmABGMF-|NRFIIy0e*pZ5g$j_|%0coAQEYx;R#VU~U}JJ{xJ@ADp{_T{i= zriRgs>?fDRcd( z6Qw)|K=aqrB}aFg~?q&uiemiW~)x(&6_s`mcG}Qrnkmk2*L|^>SCpoJoFAAoNSN9rKDr%o~FUnO8>CtYr}?v zUS3_;=g2mdm2bnAI?H(o92YZoUFSYc2)3m(5QaIR(90*25xZP!AKKiBY)d>18~ibQ z!aerN4#xAmeYbhazrk%W=)>e^(v6j6X722~ zVny1$t%GBfwe;V=ytqt&%Rm;riTfh&v&}7-%!DTG=cfzDUJeicF#y2*64jtb3 zs?tYZ-Xk|u_>@d~DExLuR*ymq8Gsp~@ilYZt)r$U-EHFrhuz=Kme>7= zw%Fs@-TUFXz+*8+GR=pKV%F_pgU|FjvOxWD#pQ`v`KPMUtfLBGlpW%ooZNzM-F zGHO)Xqo=xcS5xQMZvH!cq3MDJ*Jm{hs;m23Q}x+Ev-~elt|j&_$LODL2{wQ2ug1nM z`F-Vz%)I0rp%k{p{wt|2a#N_B(SX%8asc zHqK#U#TebI@{z?^DL^aZ&2FF9NfsbG1r=L4HB3!|;Xl?}S}vdnMh zFZEB*tpW$$A>1<(BDT#Tk?lWXL>@EF68e%bnhKz<=a)?;3!t5Jy}N^Z!p<=z=%^86 zcXxMpN0NCt=6=M;a1cRKkPlT-jQS~!M|r)+o9XV9eja;q#RRv^CJyoSn>Q;d@Aii8 z&^WB3ujFAdzV^(Z+b+g+w|A~MA(ftPv+Pv=esVKRwwFy&I(Y3~(8QsG+oqqoYc@l3 zzFLO^fBhPbWd{uKZn+X`sMoXG^r=Q|n*$;WtwxtT_tIM&-^NL=2R(2k8o+SHUw-lQ z>HX5u5GtkcQ9Tp~bfYfIT3AQ46yFfg1K>-m?QahT7N5MlY;qE`UjM?PUO1YuiuU}{ z)5?Z1hTUFR{7gZFzm)bC2%K&)0O^ScCx(Wn)E;uOaZeD|6L3p5>ZmBw7tZcwtno3bi3Y|5>iH*2euZCz2BhbWtz{$RI|5n3 zq=;56T3toUPhspa`b;5+La6n%yw%wL**T>pFgFg( z-`13y4_+V1LRZr}+`%$Kh&5Q-mGhEbv_B9mHKH%=RsF*S8*1Gr-Fbcdu9b`6OVQTD z|CQH2jC2)i5I_RLevd@t7r~L}IatjDGoK5WvRuX}MtcmQVTJ1$bN;c8u5%ga1fzppk=P8Piw1|4c)5w7;Y&7ivp8c@4|9r1XG z2G0@?Cpg&P<|ZSOVEkhPoyze=%K@TTcegdQzRW%?PcsB2MlpsD*hRvgcp-bY zP9f8fcQ(K!@;X;6(_5-v*Ibd=UuVDj)#D9n#Z1A^B+;%23r%%I%z_4b zE3ef_1%6w*ybY z#OhqG)C^T|2(asb8Sqh&O7ShpnyzO-qlD+Iuh<6-6LO7aKRG%1A1JfLacjsE>t9Cc zVO}(^_x95f?Zpg?K-id~2I>^kv{Z-xbLg}*DaY^Zstd2bLxBvNk;Z5Xh2_*mqqP)Q ze>+(N=17S)T<|YY|MRvHTU zt(bsTtD)y1bHp{|_sdx6>dWtZcfTEN|6}Y2Q4efCS|UcDD0TVbn6L!I*IQgna;h$W z|Na5KsKhfp&DVa0mkDFfs7a_N+X;3{fOA0?cvpUgii}TVGmkz<+&WHWCuyUra9x$1 zR%z*{G;1dw*uUSFZiX8RhAm^YPG9~N9r<1}z1SvqpaHnwZ z8s%6#T+6T26dH`I%G3%N&OW3P1lpB5SBYQltvF^38jSlC0gx>s*=&6?jouKz(Yg0% zt(Mw0KYLxB*{E*W8KXPDlcJ0TgBh2AAKA#@!QV-Z#xe!sQpwp9={Oew*GnEoH1< z;rAm1$G=QaK8Y~i1y8Eq(MyE4#T;2nB1l%1jI!Z*z&Qq~UPNjSbRIEU%b8y~Z60Kt za51F>IBuM}REoI;$^>Re!w4-ciDft^ysNBC13gKQX^Jw8?uYe_IOmWil_irDqyOoz z@f6mL_t`G(iYzzd)~xm7S;q(Bu158TVe;IPB)-Y}nwn*leJ`Z~6=a;9wG$_-N%CO! zmkJ$0&IP&lC%XrdTnX{>_{ae4V~<->kCazciOFZQ1Ud1`p%UR~)NoW1`u&iQwfi2+ zX{Dt>FK#S~SLBPdmwqvwvEQqkjxOahDEopl@=Y*Z5h%MOp}R7PJ`_Ut%9BqD(HU8$ z@x3OpL6zDpjid@)n^Ai|LPH!3*M{8b0%SlZ(0*YP9G=&$ThWB zO0W#Rz*Pz7!z{^kiEsPTVVcX#x@rVJG2UWEae-si_&v{~^IlICNYwT6YFwAbOM0*yHWRp;3I_sf!gk8!}xe zUe1Dk#L_U)*TkFa_A(p%fFyHE0%5(#ln9YC3>?ENgPs<7cEKF4p622Pv8mD6El zI*gocSA0Y4TyZ2Ot5pAJZ2Zh}6V8b9=J%<>QG`nGK0Rg&g+pb*s_54x0K(izwo&u~ zF=LK|OJ3bNiqjVCl*Y`!Z}p6IfBcRa4A zl??<_(dM>T%gMMv^@u&xILkeM{*b@QR7C85bWH9Zg<8KDu?tj%lL+eWc058z?BeZA# z(;McQS`TOtY7QQQ00~WA@%ahKkEn_r?aU*W$}qEO`}$g#^25^#H%+cvbb`d;4T-pk zWIEf}d{5-JYrMb+3;50bs12}M#2@jU>E;16KWwQ*D{>$3QQfXJOuRWz0b7#eu)J!td63u zm57}H3}9!}tz_;(0aWZE;x5DC7sW~P?Is_!=I%5u^^>=6&#jo#vM_JJD4FRkC+!Y| z4-ue0m8FnG^y+ow_vXgm}AVXrX$XbVRh|0>>QH<&s5MDB;}#X8r7{wSa967{60T%FY%0V>HynpRd34#AiOjJ>pj(W(lx z1e*>UiP-3d07r1w_0A3sY81bs#DvdueLCedVF4(lKeBPzu%-GTl|;#>ack7YtL6#g z!@SMy+iLxNzze^cYgh0oIM1rnnxDer12w*C-ju*d3!~YmV@tPbDaQzH7#Ll&@zoI$ zCIP~rX@y%WeG&cy%P9WN|I_UYZ7DWi#x@yzHvLJ@QunwpB%Mofvx*IAWW}tIPdJtI z8KR%cqCjM5IzWW{dEV9Iil0*|OD5LqXmkbgypITkKNgiz%N>_!$q^1ci-AQgMh|iE z+qU{#&fjNBkC5VNn_u}tx#GRypRWgq(pOeCAB^#5_0@Z)vVs26VbtR7ODJPt1C%c9 z22}K`e@h}MO5LN*5wPS=Zk;Wgi=&mnYT23J z6wAYA{oY3)BN0wH_8*(&BV3!%4>lASo3jHjxa#qZYYt9MX=P<|^J~T#Mm;e$Z_$hN zUN&cuqKwS=@!yN>bJFyoQRlY(=uZZKlpW6XEB(V66`z{5sqwpfc_L866u2+jTMOZo_Dpbd2m?hb}yl7fj&c=?~U#W z#f9iE>8WB?Uh$@?t>=Y%qu+L8+gUVMqr_Qh?mUw1afQ%EOUl`s;>_~6bh z#!3HfJSsakB=Yt$H}HjWx>-7EM3kFuH_?hi%9~+U<{JGgxaTik zu;n+B7@1|&Sl}LO7_Gs8Lxby^{UA91%?5aT>#vo|`0dVF!t{iqL8*VOAQHi=2nmZ& zX}lbsO3*nWT&i#qV%^6u0H5qmFLn;*EQ>10I_s1$?vs@bZSQNSe3{utv*W`zb_%uY z@Si!0jSWR0PxaWWFr|(N`WG+|AeajLx)xKi0v8JM)5&Y4QiheO^5M)TRJN;Nr(JGt zCnkWZG^_>3?}IgiQ?oOnXiqo~nEoi+RHgoGdlyo0n5f-xDd(+&*94iI8_Iv(zJ zrrM<+!BX)DEZ#TN6HX|w=Xx08qopTcQ^Y)gAfWi`ik$S{(t-+8)JUe>#m zVgl1sECi@OgwuCB&CxQ`=m#F+AM;b8M8Zf;B&z#CLx#{#EavnXI@x~y+lE3-JQtK6 z@nkH9C|}>$*dK<&Xh8oVlQ;ClM7U(=B?F~yR`IH*Z&d$hawSNM18#vnqAuDqb;ot!1h9pn9bBwK;Db*e}>;%)Us9NM^M6TxQ@KAA>TFP2f z{7>CB2eXMwjRRUKwVf$Wn)xTR_ns|>9l`Q&H zRhw3&3N&vaAI>)Vbrj+vap#@9^i*JsC%gXq-ltf&RSL~Bdbk$p(}t^}m5Ww77e*4J z3HBFg78WPx!k zU}rl2+;OTNAX*XJo@gJKGC5n5^;als!Jx(EWn~|sEgln7$`Zx?HGK>L+zA4Y>C~NR zei_=m&x(6ALjs8xRwAevlOCNaeTN*F#}%#KGg_(`8BSae{iU^NLej{6*vgAx3fU3I z720hYJO(w{AvRx<7b3_9Iw7+HSxl?dyF^KX1nm+hkSrr?eqccBp4jt1@;G;&UPkvv zfA*fs^zWyq?ErgGtQZcu2~@C*Wc`_y=YWv{GodbLrF}o3WM<28~fwZr<9GnIT6Z*LPOKg8_}?U9jKbb?sXpKd{Hx8*G>y4jyGl6(XF*+ zI$!Al)EGKq5mu0DMU9KFumNhtc0L3t#x<%!Ga0!UDnRg*bm)HoE=NYg5llX!Vnf8_ z-96l2A^IANz#h|o37r~npZI9pLzq!G5=W-G$clLahF>yL-rBg1Z1AQ(6raE;lqnCjRc{l*9qdM=^=4vEG6#SQwmFvIenM- zUf%DGC=w$1M@YMALmPMuPF_X|Ev>DVn>S}uN25?$hf$&Pm!hau*GCF@H&0i>dU_vj z&33BJ-@X6)WQYZb4dS=IK(mT+&zv`*;FB(`5C8KH_P2r>mya@p=q0u^I+@hyQ3(1O z#_1}QoR6}quB?o_oVXea#M%9Y3;Q#W^Ys)%GvWbYk&k%%@BCJRrUE`G5KQg8M>No5 z_LGu2E=$@mJQNubF>&K_1rEo2QnHW*aU;h+Ygj)}5k(0i@q=I#bQ#)6_QXY14%xd< ze1N4lG)~&tph8whKkXZYg5nrW(lHYH$JXnV8CUtzFPPN`nd>gbsL?*?u5>)@J(~P2wD3nq%w7t= z2HN`(%3pvnd=~E%jWri<&{qo-8QgIq?Yx+uLGi`)7B#v0teawM=v-{G=;i3%U_|`) zpY|v4e)_BuSB0%%+gx`qC zMXeSo7_W77_a^=(t5yM6KT*ksaQwu%^SAcg823V8*9b%<%7#(j^Gwf`?rhz^Ve8g> zZaA>_Ksv1|;$o*ip!qxnMU$|vMQ);M2VHuPeoe>`$gX-IuzW+^^4&?Sh~ud)i+o(xWfhZg{3lo&_5$^`rq-#QbsY*r z4K=q|49Y~NFSUwbFl02%c0p#?IM-5Ti9tDr%_U;chl_NU@fRjh#h>z-^BvX4+EBU( zb31@mG;cv$4^LxUXfSQtBI-dX7JYs({*j^fcZIHlDFak6RE(Qa%`?z2en7cmEw1>c zvKXUrd_deHcH-Nb+gxKLT=2*eUtV3&CfWZdOA`E!pP}pFkspZ{Leq}-x;cm9kRVuy z3)*kj%bcNF5c8SO_<`-ZvW;aD^91d>&SMgA39&VHRvf>=n-4SY0}Sykh$}GZC|iO(rN-T1XfKjW8+$AjG~r zJ4{y#hFheH{5g1V$;Z6Lz*WquR39O!}dlfCwWre6n_I-OofttE^_fcqtUA0gdl zQ@u{*b?IrGMb?e=M7ze69SRjF`5*!GuSoYSI0)2xY^4|l2?lJdDqC7qeknt-BoMGyET9*c9E23b@>ARaFlucn_nE+P zRdrYp{DHLwfE>hxFn*A5Yb4w7iHleTnwOWCWe+#%8y7cTERiwJKE9jso~$g$!}Ch7 zKcY?h_um^?mSgQwnVuATe!PYi{{8V{1y_FnQYE8c=s(NAeo2N+<&+ zieZW_fCzNjeVM{jh*u?qOvg7*s0Fzv16TE=vvv3t|JV4AgS7w;xh)SNR|4g(P_}EdnG)aO4_DKL7jzF4ZdVW)LpHsgY*=DY>nSJ{IKv zyX9Cz5_L99+WyvMjtLb^NyFQnWhsR>R%>(>aw5!5Iol7wkO1L7#&j8ZPq;e+pNqc| z{q+o?In9I@D>f$q>0^n62eN)(H?(ca-D@U^ceDPtjNl1zl zCmu%)rc3(a@`z!+3yY471SBB7JmdG>8gWTMxjwTgR+OKZV=Tr#QH;AV;g$6ziIDN{ zmzReb@fTeO63#IHL6}88Ap7ElB8{Mhr!3@+Bj&hfP`!%{9$foN)Sk4a$xh}le`1hw zZ~4-Iq>rO+-MB&I^`Q9c;4S|hZIoEpx9RYuYZ+hPhD^3u?q5j^u!I=gdag$s5elOh zfm&1bVuLXYet$h5>tEg+nMfk)O{Q17;fBdi*|lqz821DX&gHFviEQ9O@P|*C(`22A z@Gk@bE;?AZXz}6~QF^0N|NPnN-nRVqn1-v5=DiSO^mkFf{R%_EJPygjN$P~ z;mfeN^yg$HA8Pxx&CV$C zI+lB!Qj#kC#A(Y`fI5){SjruYx~lrsc4+=NtzRdDWDz5ai-YJi9NET3Wb~_kt?jWt zc~tT>GGbqnzyL88M^W5=?^71?_8Kxp3Z!_T82q5g9zd2Qfe(~*O$OoL4(AH&p&*PY z>e2?9cO}4!q}A>awT95r){&@u03o}BBDXt4yOi2|9Z#WX75yfjuIsk1vaGY$g6&&8 z_!tNX^Xv($Ewk|MJpS>^7iAA!*WT1)9pz}%@F)TYTRaE@Ex_U)@*dcIEkD}nxfsfm zZ2$eUP9-})#bl(U4w0sn37!o~Oy2y*j}(D;b&{h5ilsxdCMmErTT+*00z5@?mmf}O6^%@8!AJVZMXVC=ZuO)sbpRf)GN$V^TYz0h)et7z{-9Kza zyDiy96=0UUOYigCd*#oOk26~>G+mPW;KgEF6m{z&>q*i5j-@|B1R(jn^l)a4^7$V$mFT=%6>_?(QJXNf(+e#GP<#ma!r{4q`lL zExXl$inV0glyo*;jm?3Czy+X_s_GSonw_Y>5n12oPMkP?Tq3#cP$~A&MQk#-vAM7} zZqTR37Qdo40JM@HIWqiyQ$uY*4aQWTbi$thxDXfDo02fvlFL02(?ouV&*cm9YZF4; z_w1$(V?&`2pH_axj5|-Kol0XH5M?Yah)TepCC|>Bof_0~Pk|!74>GBAdcxBKynZ@= z`S9UUZj|x_**UJqcV8~Qw}um>pH8jO?Y!NHx$@o&&jEAUCay6tv)sD%7($MBgnIUJ zUVXVoz|y2q*2e3-yNRIjji0jfg<=byh8MgZ=ZWDRBHa4!2vKexR`EGuXK#yk#-*oaB_D*RFDJknb9q8ApOK6hoj zQ{$fh(*oQ_q;dqrWgU~=Z?2Ow#lkX5yj{2vQbN)fcj0-y=WGA`-7;D7%*Pe;#$B^U zV6ceds2$KKIxRUC0$>t{D(k(sMmporN@L>*0&9{dws1P+bfk1Ya7A5?!_pL z<${9*{D86>v7_0ispZp?u^fZ>9RGb--4I(Xkf-CnLef9%%dg5FHgMpplV%CZ-waCU zlu?>KAc3>tXfpwPd%EJ*szNd-1xz;t?YwUfdUWBl4fu2W&YjGZ<(zYI$+2QXoFJfo zv%5Qbf$aOa92r??w1I&ZUds4px6Lo3Fy%BxRrL;$h}c*vIyJ(Y# zf1TtsPS|CiJ=^oipytI!rN2Hs3<;>uo3L>%Rcoh}Tdsn7a8NwJQ|y9y zVcfd25fB?)Jv9(W-+tr2kjV0UO8wTex=I}_bv7OL7zxmG6h#W_L3`s(lP=sCzkG=~ zm6*LhUUsg0WaFPU7d%uRmXr*ooKGvR3%h((*g2EYu2Gc;kR!XlSjw3bJblHM((f34 zOnkxtT2s;5X~eNE93x)zf9Dr)k=nN_vV5%01_(D1`WznKF=H_2Ni4QZb!+nmr@BCh?8*!lHJb3BgxFY_(LU<5 zTG99=M2z)Yx0-*g*&rYv=KR>zHi}S4>61n=DVY~DLbyU z3)Gk5O=y`|aUrvN86T(Jp+zx0T*mVzq8~5pi;_vQFm&C3g~^e@KaK11RLBw89?R-W6`XY4lDP53qUZ#9`qcO6v3U6JS#co9Bx^(7Ia(Od$G$vEIv41oi;9QN`1UsY5ds9ll!yE0_ma3_gR^92bKH%Y9V-T zUlBz=5)k9pOfI~wumi4A?ZqCW_2^Ik0S-okAd&Dei4Xq29<3TI;vp$%ov+yCtr=1V zL(4=Io}YbjGB_3e71vr{nl)wBXPp;Lc!;23SAE4{9mNXn9|Gq4IXOC;f_85QcN2H5 zw6v6?D;9(|hZ*Yqbe)4}q$kwUtUbS^nNb1ZQc0**9z`z^R65!8-`Y zAx4ss@_+o6&l{ti0k7|cbfZ0$Zk4i+cF3iu=S>ZtUyKPXj2FK?JzebF6Ntjq%DP>A zp+#(x2I#VOOQ#~a?$)*&XScC6+Xs9k*kE8h_GC(~R*@~}?e$W*fR#isu{)MuBA$&% zro33gruW0-WzJPN9Ao90Sh+}`_8fh`(&@-+=)-mr(u@dy|HTH{+2FcWQv9y(yJis( zr0*p3xAYC}=I_2Pv$%M5%tSH~ywMbTunyy&b(Y{GEjezgaD&QUO}p%I_I5&(xvguA zM&^#OTB+TZE?ah5D>3awkFpe(^pwwjD4~zXNR&eK*Y*>VDk>C-By_I(6N-54H;YU} zwIjyG?9D09W>e%O>DPSDs%oI}_rT8Oj%?Nv1X~Y*#L?IsBOJ+1pB`{GAH4(L;gotx zG82?H#8?#pf`w2%)sx4K>tS$FN9;hP;WRGq7@Gb;EX)wwe)&aG;gWcPZaB)snpp0L*2tJECh#*K6R^V?)o zY!af=$S0=7ZX6MDqo_0`;nrmMoO%3qC=9RQn z4>%2X90~PS#RH8OfIP>)tRvTME1ZppkfXMk=1>>?9Vn0mzTN~@oKnDA-W#zJ3z z>#rWC0-#RAD62`3V!OQ1@Y58gKHZFH;vk=0GVjEJebjs!NI%eXSotds`0@TaaVTed zUCv_X?D>y7?DBhTkUs8f?Rpb`^VX2uz{y^*`$?Xe*h>yNmj2-=yy7HD4qgqhPjf%i zy(UTbu$!Q+9?XBkpVKII^L*GZ{S;nlMyBLh8;W+rAM2HK`42I*>EGNCz4FQs;G45C zkNjdI3Nq*=o^)*AF5&w1^^m6wqzps$!MvrtAzUJC|f=z zGfqiT$U&fIVq!9hR|oVm>Dw^=BLCSL43cRFhV<{+QDw@MQ^Qeeck9^x$%nc#Y_sMM zzryO~fQrV>9Dj7OS@;{$|J^_YGn1!Gv4Viu@axyFoafKuGv)x@jc>k=P3lB?(I-_6 zkul)|ervX|7ol?ZW6Ve(fCg7+p%3>T!B+sTS`>Vf{ekIcC?2%uU@UZ z*l(w^*e%k$TleX5DR6E}Arz;LnF=n27C)Z66HmA2sQ!=W-)A#c#mD_N^#=L`p2m`! zPGs6ZM}WbV;ck!b8FPwr7??m|YJQoweVH438K_!k@nWwlP-xW#^}j(mCi3jKd%17j zfhk|%`g0NQHi3~atZYK}Py~#yv~l|RDPY@yq&3rcE3G>}j0c~-IAn(9-`F`Swb^B5 z<{yWUq+cO;i?%FZqs@JLG@O+JR>Wk{@OEmd`SvZ38aHc?tdx}QyEya#uIt5%0a2;^ z_;KmmW&+|xpvcA~cXoDPgas3%C+FA%^n;bO{SvNSTSt&&Q>fOr{6~3t%QuYKS3b+F zZab!d)6f+TVE5k~_dhx4jUP*{30($2$u&d~{-;ho766Up8qI*#&9Eh3>vgBrdtXqA zIbrOvxxV(OSc?2@suf>Vzd18@Q7Rhg&U@K6DN`K!6X|ZD_V9pa7pjL$peGf_VV%By zkuQxrPySY`x`%ax%Y-%kDvgeu^{dfe4HnpJ#iABV-$^UsX}+D|dELq_L@ads12%fc z-b_p9$(%!&mZG0lSzVodvyNuiKjuihUtnOSP!*)5S2YxwySGJtxz^qAxs^JK3CyL8 zzQmq?tS>e!sa2U%WH14(eQu0&_aX-0Uei9VqVLGg&OVt$$+_s_5s)I(*{cFSP{FIr zoVohrPjYEwaZYx&B`U7<%&UT+*{E&()#Jv65=K^$7cVY77r=sE zu%IVzaoI7Bsm713#}T8;@d_n`1Pk_=e`UVc*hy(&Cvb^$-y=t~Pb(cS*PBu_{!^|K zc$d#PyU9;pBN-hmNo3jt()LNvG<)Ud4z)mDYA^xts=32ihq9g;xu>K@uU@BT{sl0$ zltj!qW$k+%IsyacgWJlgDl5gU6?dw5gYP8xtIm6c_@>j7$7jkj6M?c`HvDEZ>W$YP z(Q?%>0@iu&vNIFsZ@iwpAah5Wo{69RlR>SZuOUl&|qI)wBS^gsc<4@ zW$~WG!f8KPSJ?nLOLJ8dBP*Y8iik84d&N$@OZasVa8mdC~_j3z%x|#e0sn2dFAvMhqx%mSpdnm6BO(@m%E|AiQmSwQSxxw; z4(;2I%kDR2`5;N*^XJvhM1x4SC{B=2_ZT}L4T&C9#DM#GVJCW&^j7-W(ckhcbT7g5 z;n}1|KcyX8GI#FYxVu#glM^DuVZo;+yWeU!mm!hQT1H=(mzTOw)fOyxHATl7ri12N z|2;EEh?C&qi|7zHEwo|966MmyTz9hv{Z>=amWAxSv#UV7yZ7ID8u1SfE)x`BDH{f| z2gg5szLf$$b~CAX;kp}=2$2Z4Y#Fb6*h%-zC-nh0G(#ON2dNmRHn35l;+vMsTpiu( zYZ&IZ6tEJ`-pd1DRsD~erxxZ49twR=Br-KbkT%4?i?D9QUP6t6Hl`H$SKVN%h_@U0 z7QD79#3OI)SI=|*77t;?1u&Mp1AZWgcvjJqtQA5xpgxzO(V8`3j%Hq0O?z1m@8}5z zEP3WGZ{*zN8!aNEc!}hU?3Zdn3(Y}yiC}HY281%vOBlDQN=KpvZQgg}kr5vRj>WM1 zk;2@6QGTF6Q%rFh(7bI1buT@aE-3wFDy`V6f6r7^esvXphxa8`3E$lD!|;Vtu!j7Q zA%Wz`)68LhWwy1=WemGJq=W z!w=Ng_K*l_fpg36-$$lp(Bo_@m7uq~Y+kxQEQL5ajNS7sGRP0~AjkC_G9Li#FfJ-d@&AYvIQpE&BJjL3YA;{3N48=zl@Qvwe3)gQxit z`iChhO5k3&w*Hxl@ur&D*CL<*&IFc-+q~-i(wtF{Bt8F1UV&VqAcP9!vr~XFd_$w- zh0H0DNcMmcUD08r@{jjV=X{*8P`7b(&iqa$qYYDyVowG;x#evG45f(o-5@2zbk6aY z2xC!kc4EJ284Eg3K4RVnG@Zo0~SxJz^ z;OWWrtqua30qjf)N*Z{kntkzN=?BORqp-msHol(|3^Rr@3ZN_Pz_Phh$YrrKUkND` zQ^ipXyR(jmA3q)d8YLD~x|9y!Vi3tU;ujhjxvuJIoS0h;e;vX>5_krsg29 zJdXZ-ga~4O0fkjRy~hfJjG9-SmDJ8%?f)Tc9%(e~gbh60gX6OSvBsu6)!l?FtG$xSxuukCar!$-asH1& zuX)%En!id=dNQVHXskLo{#|XYWyS9Wc@3Z*>V^B*{un%7l!h=sE+<)M<_G+sW_83u zs4QxMsEn9-rk4fU?c@rJ zRW8NI$@)5yb?_t=b>v@R<03EF z$do8@t7!=0KTir@X$j-m1IRs0bJhd@3XFp-jUksdR^Bm9vv|poK#FpJ6Ra()r!Q=b zLb>)Pb9YkJ`%bYtnVB8p^oq?z$eDze@G|QcSUwg%ZKA0kNkpvWgH9qCoZ?TGW$qeG zmu0$j9Rno&v!Vh1+Prg&Qs}57N=t&5EejhYy5G|goOsz zUjT4IvS?Zqs%SSHRU84`8&xoaH*ZkNDr!8?uFxg3j5@K4C0Q>oRr=oP(vZAuP^yxjwFb*GBk1-^uli7tw$uA-Q5KMXiZAf&k zv|}RB5mBjv-dz0}TW4pud)q3=NAFo%A@n4o=LG$ywKU)A8dd^UC`Kbf3jo_8hu`!S zdtH!#4*VO-t*-w)JzeqX+;tupr4|+zrk8S-$CxBL5eG@T60L;`gYL8}ph@V+tX*0H z&1@xX8QB!eAsjYQz;_+=ubk()(DK5<-ZZrdUxxOPYrK_w=~5Ow)0dAg)aM=hw?)KUH9g!XE;qE-R8562S?{}3e_~K0qcytgphBm14 z!SUitGp+!5zY=$M_?c%&x9*0h7>UUMzj-!Gi^0}~HK3U02otWV1Y7X|fBe7!WT5@a zi~FI%Va3!{@Ed6d#GHIU9_t}ytH~LrDk#oRy)W}jA`}oej?-7a=6!XLIB#j82m8eZ zJ5}EVq0p-DE+k&QZxe886ilZ3ng|np@kXnF!8$08jO3rMBolAkx>Z+v3FcN@pVho7*S6Lf9Fx8L zh{7mGhM#AoV{EOYxYrUL-SzkCuBaS#k}Pwf;c}3)8Kw4LeQk5?{8ROo@r$}4`RpK} ze(D7OTs8-Gl;cFlSG?@ezbKdFov+-48Zem3LKoLNi3F0YV07G(sqUndZ$c9Wow`2? zi8+|)32rzbjo5mNJq9B=p(Fv+ZZ>{+(Zm;zSm@%N=w9}~+ZBg_xr7#R0?)v{1c^f& zEFoW>=x@w@GT+FV&^kt&b8X}!482T;cdgpGxysgRS@0m$9j_-##5Df~D=K#Ru1;j- zfao1OX0cCvLtM;84)I3Zj!;XrlS??zz!DwUGnVhS+4}@F+95*1*{PBi4QJBXK2Z6->A)tlKkSs-oCNd1+tLjU3~tk`3RamgvZFCV_TY`VE+a&50@ho8 z1KYaVG4iPR@PP%;oa@GJmGRR&H$+0;-aZ|XFU2TUyS{MI(pFd<3(8~`0BW)hfi!e+ z_JJ=D*BAT1IQE%i(mL`gV%w~Z5$s2-WNb%ALOJ*N+G zmf|SYevh~^es@%h7iqQHS_yPyS@P&H`q};F;3fi*L699;qF2Fj&3*JpCVFgJruYQZ z9QVaXL~hGr5S$I!oDBBFGL!Aecv!%c98xKeVc*ixV>O5LpcL54$}_4ne|CAn!|T8& z$R-+D1tU@PF39c2YIt&W;2@lvui!s{T$EuPhyY=fk zi*;g0kBTkwG|vmo)Z6lwrl+R^OWy+z~{SU{9Y^N(KR@}+Se?qp09ii^2 zzhY3%n7hO3uKY?%!(=SbM&oQS1eTFl_Xzc7zaVr({j$^%*0jV)p)i24Cq%*`=fGYM zWX7caeA|v`8zDPMtCSzx-e5jhyXN-WuQsb!w?j21$j{SHz-i)$8>%F7v#+^*8^Iuz z40`|g13JMoR+#jI=8M_@jVeYXJ(yvEV+*#T`*AZ%%kZeqhv{N(t${uAmh3}56AQ9H ziVlL_B0E)@G)aNJn5T#KF6MbJfQiB6FLAVpfP!h(B&AK>H-UxU&Zi>3(7ueFVL$BFmmQ+da>tMXYB6rC++?eB^?>KChQKH z0KfQRR*RXb=@+)2LxGcGMN(x*Iqd{=1#~tFKum8#>`qqrEWLPAXPL2afYHkz-@h}# z?~1`Z69vHrCP-kxRx`Kw{*_2Vn%r#egXhiQdf>86X(~+>>?oC1v{H5gKi2(;RquYj z&Tv-J2$ej-AqD^CjtmyCQ`G~c12Y!-8)3RK(kc8rEVWAb4-EL*37+(^V}oEPNBo!PBIakGQF0zVXRD0?Ib>L~dHN_h9ojccow%I~?%J}hK zOmbm>9c>|X8Ofh9Ct??i!5v2aL)NW%)7^z-+>!_T8#Te{8~G*~1_k?)yYP@)JM3`4g;Oe4GqfGk>(W2ga7 za3$rn;d(0tq3PzX+fc2Gc@w*N00zdBi$_^!3?k*mbq{8L(G;;v70#6oTQZ-Uwv%X- zTP7@3pc*tS2Y!?W^?C&sBb2JtzcDy(nHXw(`M+F%n&168Dfv1eH)4!-?&CQ9si+?J zU{ePH_rcYnLk?f8&^6Rim5+fXD6R$*l8u;Lf6f3H#zv&01Uuqc%;p!{8(pHvvq2*w z@g%qk7kS;E+hKW$0(3~gV@T$x+92cIMyw&*f+b=$bl{S zyQ4!J{Gy@;fJ$}O+F?6TvVD-m^5G~I6&XUXwBi5{g)ZH@k6E;PR_m|faO)+aMHY3% zhdl*3M8PhtR%ec3#pWURW%S!`&5P5V2Qx*v_V;lc3Rwu(|2c~O?`QI#Kib05G6#tY zI;2I0S34`A?O0zei#f<0zS`Ni;C7zO1EAMR`JD^iuRC|{ohMJ^K<#~iclfWspz(~I z`8JEwUBsg1jVKbSmsIO7Gn4N@w~O%UE|5zAFW80&8xP8YnR);TFpH(|qyUbMGzRAT z#U!54J2BxH0s9n#q&+ZgT_(IVgt9-B)9~-^R?Wvu;yOGH-e9q9TWZ`KMW4{|1Bw>~ zxxU`k8eGr&cS%#Ro_Aj%&rNg4lALC)c(W~jGo8d<1 zAGRY?zf*JTliXDAd!@V4FnW#8R=GpbRW>!`#pio@lNF;3cX8InWsBVx5G3S_qsef` zjvwEITzT2`EuFbwrY{N&UiHNAp*n5wb6 z@CoIXnaCLO5nbF|U4=XC{b}KRIWPpMeUGQ4-{?rVs{!AT*{_!hC4-_PdoUq%>UJxa z=Sww;`*dnwR$nz=rK2bHwv?pb>Q@-m>|Z@5Ur282t?KIP1hr`7tsWL1Ayfht975M9 zkxMu`6k-CahfhA=`bC`Tp*)DuFO!FZI17>qMZ;Mgwlu3vrC3)UQrzLpVS576=WTHQ zEKeG_v?TF$TypR+@_&6ECaQRWUrQ@5F#|K979i-9}wasWAHg; z^b+Mq^bAIeX6^hX0dAK(8(s>jXQPXYv_!yDB*^<8uMi`U`>9GQU`;WEKennzj6~W? zf=ep|d1^&e-0{y^7EYQOeTd4rf=9KNYal@;)iq&h${lWz?5%AS(0B%Ia`Q1D;vQs2 zTj!ZGX9~>@jhv_v7{#a8J}5nRn6d3`Zy5q(^)|)-%}qh5X{RPLOFVh@tc*l|!2(ed zNpRYqZy(nP3z{T+sg64L{^#v?d^+1LQZ;r2$t_#7n!Gjk=hBo7#thXq;RTTROOR@_ z0|y^~A@PrBJ$Tcz0h z;;_^g4+yg*`)FXQ2kPXddMg(>_PtuPO_|`+ocR zGaDxIgEP_oG4xZ{(D~vnd)K)0_ix|kP^Ury>Ja&jHH1o&e)BwZCcR-VHlWt*0%6)H z>Qf%45*94zOTt?!UA09U#&y08D+WrD|K52##OZT+h}9OuJ7zgW%lN5<954uUY!~x4 zRqE-_l@MaaY%6D0)(6~`m`n&kE!2Pn$>nLq+Luxe7--32hpa3mihAK z%VPhy7a_ieUoJsgV{)&K&Y`Ls=QXe zIEFBafSUo%wMolHrw6LD`a(VA$gEk#< zN$Av3)enRWpcWXydExGjyytHJZb9m!M~~7=;SZX+I~fIra8_d&N&JVYF`z%K^Y_5{ zhm4(%e0a|UaReyw11EQ!3PUxFKdbxm3H!PqNMb4@0+8LHp46l(P$6JGtu8T9*t9A5 z3RXktDTh!9y^}p8T7oz(Q!l?R@i*O@=6`er6uc&F#ndl;Ba8mVOsH9QGv^x=UD_zq znAVPrc@^x%04*)dU|PpA1^TD-H14**K!D-QN66^@B;8NJD0n@ zf?D!6XXgtrZDQ_{^+h&38znp65GNJ6Lyo(N3~(;WHVrwHQ=ih!voy1R&~d{z@Mk}7 zv$3(+|GVhr%WRA}Bz|*?*u!D8#lwKHWW>?yyMWFq-(u&rn1wNv`A_0lG(LMA@Qvoq zUzfVZ4D$(USit2+me8I`7z4MJ1XkY@<;-=&JmuqtQG{sIryPX#Rkj0z2ERU1Hebi3 z{bHAvu@bS*?#;x|b8)}m#;4EbML4N{{h@N3X%uOcc3N5j3U!D|ICOnaLIg&;0Hy(yiN0i;iDr1kFn= z&)i+$q#)z>vn0^ZPa=ukn%S(E`r^e4CAm(5LoIUJ&{?}eOBP*J1-p6wGGQRK(;=kb z0%xL6KI@^cOMN+nt;h$M>GmgZ-N$)bZoq(ig&i$J*x(`~d;`%@enAr;k+TSEV<1kg z&`qEQBoziuW4`?6o!>2XQ)IuX^z#=VERA1W-zKw8?qHCAC2cUhb=cIzvuAx7W1T{5 z1bSX(I*RXDZKc!Svsd+kR26m#Y)(T6cdfJ;cua7m$l)^Zgh63$V|}Ny>Cc~U1)}tm z2xCh^zQg{+v9SaQu`5aJK@{i@CHZQ)RJ)S%adbukJrp3S;(*&?SH1I_oBQE1ROW|S z<>vk>U$;$1M{#f0$c{G0{fCWMRaxnI&v~bhoC2YHrhvog(JDaW44hRPH(<+hK-f!)ZdlB^FqKq&3ck^}oVd_gSueGBuU=<9AD$-w z=9rIGG%4dcQla zS)$!SjOqg_b^Fep+4eW4h++Yfbrj)w?OMy~#IC63?yx2L+V7#9%G{>C+)veuT2Z#i z-6RC7GB=s}^RF43O0vLE-BB)N&jkE0zO?CquH zoO)O+)JS-5?t(kp_lEMJ5-~`?pCas9z%!gEyZsl4QOtD}&L3m`64Xors7LN*XU|o; z-NBPEV1Ub8@pv&qL0&1lxxX&tw$jgyy?(^JcS6KKvy= zdy`2nDzSig$OdfB1%qAOrNa`9p5(K&)d(`QjV>;@-wqbW_qv2?_D+JJz$Q!Rwc+qLP%p z0XfI(VAqN|OD&@=PhNJII7!$2-itUH7DPovNvEcIW@N+-)lGMAtnQ42O1Wtl$decy zftu+txX*}B7^#kNXyAhBS|BL}GdEnEYl4}@X(4AIP zSD*Q~P;D^O9QdgZ+5xqY5%cenl$O|75v$5_p;S6KtXsG7{(8dNWdgZrirE0bAi+@^R@V;N(9`ZbEm)FZlYhp@S z$$N(4o`XUtK5VSS&r!UfD1eWnM9doxYxkA#;+Ij;w!>l_dd%?jYgtD7enw#AqzoYEBx& zqfWke#AgThq|BQok?(HsQ)b(u&D(pzjs<^G?>ROzAQaNP04aNdCj37i>65|xw zuEG*?KBtZpAkq4b zeUq`={9uBGde$T38iVcZqCeF%ed^SeSRV*lIr12`yzT)4-&AV;AJqFDNVFHI_=WmR z(1vTJjW3;uQO9q1FeEh1nS=&5F{+tf#_09@_2AA7ZOCY#H$Hd}rDtn(YRsbC=0R49gXg||7qXV<#w2t*I6!6ToYsO_F~b}ZmhP`=`*N!64$bj+2Ds7? zSp^tH&)`yEVPbnrF(-thhI;4hLqsmD8tE>7R%&9Wm8=WfC&9$3Z;@p0&qOmWJBMIOLY zV8rw1I1*P3g_yCwcxHL%?LE3L9(L>|&1xIX8D8JFoZa>m zE%=z*NB$fY&hYSIhftB4+3yygY2*;Y)G)xT&BLEI7dfKS$#d+hG~`1VG!_EHjBBO- z2j@W@Y1gf-^vFBtJsLwhgzkd}bn3tU)Z$f6z(C8-UtLd?|_838!-UlR^MP1~Kc0^2(Z=PL#o;TpFGWNetA5PO`G7{o08? z7pu3-?)ikCQn%ERdGhI#XG@dU&w7i&!7l07{fC5~JNN#w!fJzng{q;=k}0zwO^Kos z;3ZVe<($dWmsdrP5!O|u)KGc8t57;|MYmeF##W4jVpWT2VTBOp{`3Z zr{Z(lGq73_U-wP%*?C2}oo>sLrcWc6MmyP@{OFgDkaFFeLY+d`cfTXolTMxbgBfG@_g>rQmSEzCrK5BM81=m zX4oH2x2(!Jc++A|CQ(#UlA@|s-)iMA=8mHI(fYo50Np&$u0<~+UExPrtuxH<{l*6)gJAa+Uk_CVo}j2dT9M{%T=O@1=Bf4OCuXOCroM zsJIR?R#%)j@oMhqn_>`S`jt*fC#3V%*7nnwDdkD81kwvFJy(6*NmsP*v)3R5Y@#^i2jkC&!j+@Y~?nRe?0TU~FeG(d;^E?$156c`?dG9_ur>o`Nh-x%hoP2z@ zt(8mE#+7xcjL5>0W%?<`Ma+bG4eDkt&lEj&p}Rlhs*bFT?k3^*-C?$6-p5F{>f=W- znivKQ2x;l?^|6d5k?xqjsOf?|WnbZfM=H=`Mn4{$4PC5(!iv&lyDpZ?oXDL}B__c6 z@}%Mx$wSyCOH3|j!toM92r)22@ndEa&8HT>oUxD($zv6BCsDrx8`S)4M)AlN9yw8D zQi1)afQ{J@;#)4jtJt@o@MnKFhsf?7Z}VyK)7IyDf#x?ot~_8an-yzTp`x6nU3CfF zuBfj_H25%d5SDb;yKO*m(JSsyLdvxX}gE2k- zQ1}N4SF*WGP{=y{hZ|yXo+BA2apa(xHq8+Jp$q<;O-y_&8HbPQ?9$ixp==j!H41@+ zcn>%Qu-)x98M{G7OM2qq+#I0J@*XHm+u%K{j*vWaH2`7RJg_DyX~JnyxV zSJYT%5@GhuasX4-o|Q3s#_q@cvKG6#?jNgSH*$2qcr&x?#u?G_5FFLNO;c}BZ)*t5 z|52B-`0n0=HPsiU^)kH;Z!ZL1=4qWG`KBgmiF#CPSXz4H9&;MC(Hj^833Vrb#AKSX&p&BW6r30I6nw_6a6UF}-=6ecrjYiRyCq42*=o4P^1l3ar75?O}|N0=*qc4vNnAwK@}%Da0_uS~jEtN%EWVJW*2%HF3&0OfN*?s-__S@Q3{ej}dkaC4KA&<_8z^%1ny^p@Q1SkHMq zoL7-qdtC$Pso{*!CBjQ`T(<0=UY**T7KsnUB|rSEN;ND@-ODmbVr~5*TRX$(;P^k7 z*-1P(B4(c(_MQPf7N$*ScSTn~*MMrAxV($j)!zBA=BiJm;kOPmXV3V(q=s?X3$d}2 z2-9i2KOyeQq_l;CCJ*)$~Mrb&b^Y?b5T_y7n6w zKT$rrpU>=5=Em*9E~UtH=qgEdGIJVqrVL}Wo4GTdTNtRyyJQaahq~4dp8*2bS5n?8 z>wk7_sHm?W-E@orTNVq0kM!l}(W`{bJGMps>hbVv!=@g}X(t(T3PsqMEiGfUc67Of zAFA(L{z3QcR)1ozs5y}eX#YA&0MX1@p!vTu28j(ly8zMgHdU;CC6pYGe|p zvI>08#NL!!)J39iWTgIO*QOU9U)}E4)YO2KjsFmFL z424l}1SBVk^NjREN9tebwK`j}y+OKX&$vLJ&^?g2PjXI~fr%NTP|aKHQ=Sx6hV}yL z>gL@C9rg< z_pIpu_aCmud_JM?PgOqYZqdV5^XmT}RiS?3Vn0xd2wFg0c-D zIPBZb1^W5|7U6-OITzb^9}x(zWnNzZ0T!+HD!^6414l2sik#rNryYB|(zgjG<6-g5 z@u63)T(BvLoFJZ2Z;qEBrXlwtO?kpl6hdHrs7ruoN<~dnI8zY6D8lF?J4Uc1`f?(s zz*-anf=^Z<|6L4O#*LGsVpU({4vneetE*pN;24AVR6+LKsL1M)PpG(JTkZ`nl`(EN z)-lNmicQ47Jy9iGjaexznX=Eo6` z9>ySMKj{6a#g{y-&PnLNTg7CasvvB@Y5o{@$UrzWFa$Swtg*9ODHyP5Eg7C09;^7~ zswqHcSME8za6<(jHYz>}oTo`sXc0WyRN_LctF}Jh zIWv0th!bazL=#wq3>mZwm#r=U&uWWCoo+oUW%k6}1u8DqKi%M%k9u@h8LF@4{IFMQ z0f0}N!p4kUc1>|Bg6IR+TH?%Ohgm2TK6ntHn~Fa4{&8sbr#4>XsXt`;8{fVa?wD_> z`Ccen8xNsQ31T(z>=#N3RtE9Gv)q3kL~Xc+-3|(=E`Vm=ZUa%a!l1$*H3zx?xR zy!3^b=3qgsk%jKqk#TcZ+_tqFe=hNH#J$aPB2k=lNzhvMWOE{@ZCA+yHY)~FV?=-W z_%WFo3oaSo+h!N6q6An8Vm0RQtNyDGI=#wT{3yzLy{?n7uhFD4`u!%DC#5v~D(BhmC1c(8wT!CF|6VI`f# zKB9-OUoU_6o3Z!Lwok9unwu9Dd4Ap3-QQEOkK^Kn{wmpt_tt%ydr4}1pXZq!ZmgQP zfB*QHk@l|iUa{kX-QIU~i5jCCamC;!vZhD=V8P?^D-7k*|-AEe`CXN;q1h<*^RQ$fUEWH;T zGE5VS|Hr*s7|0pk)=s#vIJo12XqTOD=jN`NtB)t|dZ;(4=Y^AP&gOoD`{wj*cx&AR zWC%)`3yU9PCRv&}qRhMIUqvXP|0#6wr|qt8{v}k5Sl$Y8kx(e};l&1E4#jy6fBKMy zk00|{w-tdIBKe=bdls$~b~iF%6)}BXLu$RaG{s+xpgg$`y-`hquOF+woRnDvf6?ye zF~v@^gP&}@-j=MbG$S`i0N-fFt^Z-(oT=%V2IPeUjipP|HQEbD7Esbo6ynt7!-`!#ANV`d&25;81>tu7k4 z*a_LF5PTM|X!;TC6b6aJ(DQp{+h11mebP&1PYRutl9VaNNnr)jXt08XIcic<6hC5a zs*JX(VN5~lIlE<6N6nJzi;AKd@=wqCX{~tZJHo*3p42MvYnQy*IMO7hJ?&6C$RvTD zo}RO#&3fZ8u{d+rEtfQpw${I0ht6D0T2JCzV#F zoXF4>79$i`wRI8DUrq=%4`dh2A15uf8D})@*Y!>t67iu4*b*U3SuGuO5je6qS+Fn} z*vZ&GzyZmS@^CSmaxe&=`neRYC+|?m!YK3IqCKN&)>;t^%^~OY9yWq%et&Y_AOF@l0h%L%Ae>e7L21mYF6S{sQ>O!qA_FeJ-rmZ<7?vU9SjV6OLe{NOu-%eA5ob<^0ZU`#3pJ z6OEu8fdOepIB<_x_{k3Lq+4BPy3bwRuATSGq_&3adk$)gE=If^$%JVhwuz~w_rKn6 z`E|_p*xbbZlTZ3yUiWmEkegGR?}73Je0A^6onZwzR`~wHH~@3crubr)lVxB_k3s(i z2}fRt|I|BsNGu>kz8(X`LpWP^`A3=wS6oFaF7p1)RdlbNgM@<{?1&4-ou_ZC&`PY` z#flSKvW=7}#MMcCzHtIW{}szc1CCqvW|$G06vku!&K-L{?Tq98_0{(eMa*6C@Ph0a zr?LxSg|!m{G^ZCE4~H3_YEJI@0O9)?-VtYrLi!@4Q(eV;xYYKoE-A!3CP0lLI&|s3yG!(@o-nn#w<}-X0vPzw$9a}zz@|1=^fL*%vZOF zljpdsCWyco2!gEm<#xxR7Zi>^4+EgcW3klMsUzPl#Bl2 zC%%+j~<7@P58S~)~A1e14_jgsWmFa9o*EWYOw=| zW^T0OHBZgs4pe6nlFzr&4Vmk!Z$@eG$_0+01%(oy?(uX&MVrjM73K9G9Fgl4^R+PQ z=uu(IO@mXqm(rNXSg>ukMRYy4MapIQK{CX6`{%0A-tN=>36cOj8uTXz$%d@xyhFFh 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

SuzeII!e%8sHIb>` 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 literal 250470 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 diff --git a/doc/src/JPG/lammps-invoke-python.png b/doc/src/JPG/lammps-invoke-python.png new file mode 100644 index 0000000000000000000000000000000000000000..bb629ae1da7db83a4acbeb57ea0bc92abd8e417c GIT binary patch literal 37367 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 literal 0 HcmV?d00001 diff --git a/doc/src/JPG/pylammps-invoke-lammps.png b/doc/src/JPG/pylammps-invoke-lammps.png new file mode 100644 index 0000000000000000000000000000000000000000..39296ee272360cb2247c8ac78fe6faa4e299f5d5 GIT binary patch literal 36936 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 VY~7&?{~Y6TkCdc~C7-|fzW@rQ^Wp#i literal 0 HcmV?d00001 diff --git a/doc/src/JPG/python-invoke-lammps.png b/doc/src/JPG/python-invoke-lammps.png new file mode 100644 index 0000000000000000000000000000000000000000..0c456028dbbed2d119f3afc432c6418c08294b44 GIT binary patch literal 28981 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 doc page and the :doc:`variable ` doc page for its python-style variables for more info, including examples of Python code you can write for both pure Python operations and callbacks to LAMMPS. - -The :doc:`fix python/invoke ` command can execute -Python code at selected timesteps during a simulation run. - -The :doc:`pair_style python ` command allows you to define -pairwise potentials as python code which encodes a single pairwise -interaction. This is useful for rapid development and debugging of a -new potential. - -To use any of these commands, you only need to build LAMMPS with the -PYTHON package installed: - -.. code-block:: bash - - make yes-python - make machine - -Note that this will link LAMMPS with the Python library on your -system, which typically requires several auxiliary system libraries to -also be linked. The list of these libraries and the paths to find -them are specified in the lib/python/Makefile.lammps file. You need -to insure that file contains the correct information for your version -of Python and your machine to successfully build LAMMPS. See the -lib/python/README file for more info. - -If you want to write Python code with callbacks to LAMMPS, then you -must also follow the steps summarized in the :doc:`Python run ` doc page. I.e. you must build LAMMPS as a shared -library and insure that Python can find the python/lammps.py file and -the shared library. diff --git a/doc/src/Python_error.rst b/doc/src/Python_error.rst new file mode 100644 index 0000000000..92f68c423f --- /dev/null +++ b/doc/src/Python_error.rst @@ -0,0 +1,15 @@ +LAMMPS error handling in Python +******************************* + +Compiling the shared library with :ref:`C++ exception support ` provides a better error +handling experience. Without exceptions the LAMMPS code will terminate the +current Python process with an error message. C++ exceptions allow capturing +them on the C++ side and rethrowing them on the Python side. This way +LAMMPS errors can be handled through the Python exception handling mechanism. + +.. warning:: + + Capturing a LAMMPS exception in Python can still mean that the + current LAMMPS process is in an illegal state and must be terminated. It is + advised to save your data and terminate the Python instance as quickly as + possible. diff --git a/doc/src/Python_examples.rst b/doc/src/Python_examples.rst index 6b444e40ed..c63691a004 100644 --- a/doc/src/Python_examples.rst +++ b/doc/src/Python_examples.rst @@ -1,6 +1,9 @@ Example Python scripts that use LAMMPS ====================================== +The python/examples directory has Python scripts which show how Python +can run LAMMPS, grab data, change it, and put it back into LAMMPS. + These are the Python scripts included as demos in the python/examples directory of the LAMMPS distribution, to illustrate the kinds of things that are possible when Python wraps LAMMPS. If you create your diff --git a/doc/src/Python_ext.rst b/doc/src/Python_ext.rst new file mode 100644 index 0000000000..30782c9464 --- /dev/null +++ b/doc/src/Python_ext.rst @@ -0,0 +1,16 @@ +Extending the library and Python interface +****************************************** + +As noted above, these Python class methods correspond one-to-one with +the functions in the LAMMPS library interface in src/library.cpp and +library.h. This means you can extend the Python wrapper via the +following steps: + +* Add a new interface function to src/library.cpp and + src/library.h. +* Rebuild LAMMPS as a shared library. +* Add a wrapper method to python/lammps.py for this interface + function. +* You should now be able to invoke the new interface function from a + Python script. + diff --git a/doc/src/Python_head.rst b/doc/src/Python_head.rst index 611e6424fe..148b167ff7 100644 --- a/doc/src/Python_head.rst +++ b/doc/src/Python_head.rst @@ -8,16 +8,15 @@ used together. :maxdepth: 1 Python_overview - Python_run - Python_shlib Python_install - Python_mpi - Python_test - Python_library - Python_module - Python_pylammps - Python_examples + Python_run + Python_usage Python_call + Python_module + Python_examples + Python_error + Python_ext + Python_trouble If you're not familiar with `Python `_, it's a powerful scripting and programming language which can do most diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 8b2fe9c367..bff395ddba 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -1,68 +1,499 @@ -Installing LAMMPS in Python -=========================== +Installation +************ -For Python to invoke LAMMPS, there are 2 files it needs to know about: +The LAMMPS Python module enables calling the :ref:`LAMMPS C library API ` +from Python by dynamically loading functions in the LAMMPS shared library through the +Python ``ctypes`` module. Because of the dynamic loading, it is required that +LAMMPS is compiled in *shared mode*. -* python/lammps.py -* liblammps.so or liblammps.dylib +Two files are necessary for Python to be able to invoke LAMMPS code: -The python source code in lammps.py is the Python wrapper on the -LAMMPS library interface. The liblammps.so or liblammps.dylib file -is the shared LAMMPS library that Python loads dynamically. +* LAMMPS Python Module (``python/lammps.py``) +* LAMMPS Shared Library (e.g., ``liblammps.so``) -You can achieve that Python can find these files in one of two ways: -* set two environment variables pointing to the location in the source tree -* run "make install-python" or run the python/install.py script explicitly +.. _python_virtualenv: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment +.. _python_venv: https://docs.python.org/3.8/library/venv.html +.. _python_pep405: https://www.python.org/dev/peps/pep-0405 -When calling "make install-python" LAMMPS will try to install the -python module and the shared library into the python site-packages folders; -either the system-wide ones, or the local users ones (in case of insufficient -permissions for the global install). Python will then find the module -and shared library file automatically. The exact location of these folders -depends on your python version and your operating system. When using -the CMake build system, you can set the python executable to use during -the CMake configuration process. Details are given in the build instructions -for the :ref:`PYTHON ` package. When using the conventional make -system, you can override the python version to version x.y when calling -make with PYTHON=pythonx.y. +.. _python_install_guides: -If you set the paths to these files as environment variables, you only -have to do it once. For the csh or tcsh shells, add something like -this to your ~/.cshrc file, one line for each of the two files: +Installing the LAMMPS Python Module and Shared Library +====================================================== -.. code-block:: csh +Making LAMMPS usable within Python and vice versa requires putting the LAMMPS +Python module into a location that the Python interpreter can find and +installing the LAMMPS shared library into a folder that the dynamic loader +searches. For some potentials LAMMPS also needs to know where it can find the +necessary potential files. - setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/python - setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src +Both CMake and traditional make build options offer ways to automate these tasks. -On MacOSX you may also need to set DYLD_LIBRARY_PATH accordingly. -For Bourne/Korn shells accordingly into the corresponding files using -the "export" shell builtin. +.. tabs:: -If you use "make install-python" or the python/install.py script, you need -to invoke it every time you rebuild LAMMPS (as a shared library) or -make changes to the python/lammps.py file, so that the site-packages -files are updated with the new version. + .. tab:: CMake (local user) -If the default settings of "make install-python" are not what you want, -you can invoke install.py from the python directory manually as + LAMMPS can be configured and compiled as shared library with CMake by enabling the ``BUILD_SHARED_LIBS`` option. + The file name of the shared library depends on the platform (Unix/Linux, MacOS, Windows) and the build configuration + being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name is + determined. -.. parsed-literal:: + After compilation, the generated binaries, shared library, Python module, + and other files can be installed to a custom location defined by the + ``CMAKE_INSTALL_PREFIX`` setting. By default, this is set to the current + user's ``$HOME/.local`` directory. This leads to an installation to the following locations: - % python install.py -m \ -l -v [-d \] + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$HOME/.local/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$HOME/.local/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$HOME/.local/lib/`` (32bit) | | + | | * ``$HOME/.local/lib64/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | ``$HOME/.local/share/lammps/potentials/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ -* The -m flag points to the lammps.py python module file to be installed, -* the -l flag points to the LAMMPS shared library file to be installed, -* the -v flag points to the version.h file in the LAMMPS source -* and the optional -d flag to a custom (legacy) installation folder + The following is a minimal working example: -If you use a legacy installation folder, you will need to set your -PYTHONPATH and LD_LIBRARY_PATH (and/or DYLD_LIBRARY_PATH) environment -variables accordingly, as described above. + 1. Install LAMMPS Shared Library and Python module using CMake + + .. code-block:: bash + + # create and change into build directory + mkdir build + cd build + + # configure LAMMPS compilation + # compile with shared library, PYTHON package, and C++ exceptions + # TODO: add more options to customize your LAMMPS installation + cmake -C ../cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on \ + -D PKG_PYTHON=on \ + -D LAMMPS_EXCEPTIONS=on \ + ../cmake + + # compile LAMMPS (in parallel for faster builds) + cmake --build . --parallel + + # install LAMMPS into myvenv + cmake --install . + + 2. Configure Environment Variables + + To use this installation you have to ensure that the folder containing + the LAMMPS shared library is part of the ``LD_LIBRARY_PATH`` environment variable (or + ``DYLD_LIBRARY_PATH`` on MacOS). This allows the dynamic library loader of your system + to find the LAMMPS shared library when needed. + + .. code-block:: bash + + # Unix/Linux + export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH + + # MacOS + export DYLD_LIBRARY_PATH=$HOME/.local/lib:$DYLD_LIBRARY_PATH + + + LAMMPS will also need to know the location of the folder + containing its potential files. This can be set with the ``LAMMPS_POTENTIALS`` + environment variable: + + .. code-block:: + + export LAMMPS_POTENTIALS=$HOME/.local/share/lammps/potentials + + To set these environment variables for each new shell, add the above + ``export`` commands at the end of the ``$HOME/.bashrc`` file. + + 3. Verify if LAMMPS can be successfully started from Python + + .. code-block:: bash + + $ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + + .. note:: + + If you recompile LAMMPS, you will have to also rerun the install step to + ensure the latest Python module and shared library are installed. + + .. tab:: CMake (system-wide) + + A system-wide installation allows all users to run Python with LAMMPS + included. Note that during the installation step you will need to either be + root or use ``sudo`` to elevate your write privileges. The compilation steps are identical + to the local user installation, with the only difference that + ``CMAKE_INSTALL_PREFIX`` is set to system folder such as ``/usr``. This leads to + the following installation locations: + + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===================================================+=============================================================+ + | LAMMPS Python Module | * ``/usr/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``/usr/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``/usr/lib/`` (32bit) | | + | | * ``/usr/lib64/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | ``/usr/share/lammps/potentials/`` | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + + The following is a minimal working example: + + 1. Install LAMMPS shared library and Python module into system folder + + .. code-block:: bash + + # configure LAMMPS compilation + # compile with shared library, PYTHON package, and C++ exceptions + # TODO: add more options to customize your LAMMPS installation + cmake -C ../cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on \ + -D PKG_PYTHON=on \ + -D LAMMPS_EXCEPTIONS=on \ + -D CMAKE_INSTALL_PREFIX=/usr \ + ../cmake + + # compile LAMMPS (in parallel for faster builds) + cmake --build . --parallel + + # install LAMMPS into /usr (requires write access) + sudo cmake --install . + + Unlike the local user installation, no additional environment + variables need to be set. The system locations such as ``/usr/lib`` and + ``/usr/lib64`` are already part of the search path of the dynamic library + loader. Therefore ``LD_LIBRARY_PATH`` or ``DYLD_LIBRARY_PATH`` on MacOS do not + have be set. + + All other environment variables will be automatically set when + launching a new shell. This is due to files installed in system folders + ``/etc/profile.d/``, such as ``/etc/profile.d/lammps.sh``, that are loaded when a + login shell is started. + + 2. Open a new shell + + Close the current shell and open a new one or use ``source /etc/profile`` to + update your environment + + .. note:: + + On some systems you might also need to log out your current user and log back in. + + 3. Verify if LAMMPS can be successfully started from Python + + Open a new terminal and test if LAMMPS can be started from within Python: + + .. code-block:: bash + + $ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + + .. note:: + + If you recompile LAMMPS, you will have to also rerun the install step to + ensure the latest Python module and shared library are installed. + + .. tab:: CMake (virtual environment) + + LAMMPS and its Python module can be installed together into a + Python virtual environment. + + A virtual environment is a minimalistic Python installation inside of a + folder. It allows isolating and customizing a Python environment that is + independent from a user or system installation. This gives you the flexibility + to install (newer) versions of Python packages that would potentially conflict + with already installed system packages. It also does not requite any superuser + privileges. See `PEP 405: Python Virtual Environments `_ + for more information. + + To install into the virtual environment, it is first activated and the + ``CMAKE_INSTALL_PREFIX`` is set to value of the ``$VIRTUAL_ENV`` environment + variable. This leads to the following installation locations: + + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | + | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | ``$VIRTUAL_ENV/share/lammps/potentials/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + + The following is a minimal working example using CMake: + + 1. Create a virtual environment + + Use the `venv `_ module to create a new environment + inside of the folder ``$HOME/myenv``. For Python versions prior 3.3, + you can use `virtualenv `_ instead. + + .. code-block:: bash + + # create virtual environment in folder $HOME/myenv + python3 -m venv $HOME/myenv + + 2. Modify the ``$HOME/myenv/bin/activate`` script + + The ``activate`` script initializes the environment for use. For convienience, + add two additional lines at the end of this script: + + * To allow the dynamic library loader to find the LAMMPS shared library, add + the folder where it will be installed to ``LD_LIBRARY_PATH`` environment + variable (``DYLD_LIBRARY_PATH`` on MacOS). When installing LAMMPS into a + virtual environment this location will be ``$VIRTUAL_ENV/lib``. + Run the following command to add the necessary line to the ``activate`` script: + + .. code-block:: bash + + # Unix/Linux + echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + # MacOS + echo 'export DYLD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + * Any LAMMPS installation will need to know the location of the folder containing its potential files. + This can be set with the ``LAMMPS_POTENTIALS`` environment variable. When installing LAMMPS into a + virtual environment this location will be ``$VIRTUAL_ENV/share/lammps/potentials``. + Run the following command to add the change in the ``activate`` script: + + .. code-block:: bash + + echo 'export LAMMPS_POTENTIALS=$VIRTUAL_ENV/share/lammps/potentials' >> $HOME/myenv/bin/activate + + 3. Compile LAMMPS and install it into virtual environment + + .. code-block:: bash + + # create and change into build directory + mkdir build + cd build + + # activate environment, this sets VIRTUAL_ENV and other environment variables + source $HOME/myenv/bin/activate + + # configure LAMMPS compilation + # compile with shared library, PYTHON package, and C++ exceptions + # and install into virtual environment folder (VIRTUAL_ENV) + # TODO: add more options to customize your LAMMPS installation + (myenv)$ cmake -C ../cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on \ + -D PKG_PYTHON=on \ + -D LAMMPS_EXCEPTIONS=on \ + -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV \ + ../cmake + + # compile LAMMPS (in parallel for faster builds) + (myenv)$ cmake --build . --parallel + + # install LAMMPS into myenv + (myenv)$ cmake --install . + + 4. Verify if LAMMPS can be successfully started from Python + + .. code-block:: bash + + (myenv)$ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + + .. note:: + + If you recompile LAMMPS, you will have to also rerun the install step to + ensure the virtual environment contains the latest Python module and shared + library. + + + .. tab:: Traditional make + + Instructions on how to build LAMMPS as a shared library are given on + the :doc:`Build_basics ` doc page. A shared library is + one that is dynamically loadable, which is what Python requires to + wrap LAMMPS. On Linux this is a library file that ends in ``.so``, not + ``.a``. + + From the src directory, type + + .. code-block:: bash + + make foo mode=shared + + where ``foo`` is the machine target name, such as ``mpi`` or ``serial``. + This should create the file ``liblammps_foo.so`` in the ``src`` directory, as + well as a soft link ``liblammps.so``, which is what the Python wrapper will + load by default. Note that if you are building multiple machine + versions of the shared library, the soft link is always set to the + most recently built version. + + .. note:: + + If you are building LAMMPS with an MPI or FFT library or other + auxiliary libraries (used by various packages), then all of these + extra libraries must also be shared libraries. If the LAMMPS + shared-library build fails with an error complaining about this, see + the :doc:`Build_basics ` doc page. + + You can achieve that Python can find these files in one of two ways: + + * set two environment variables pointing to the location in the source tree + * run ``make install-python`` or run the ``python/install.py`` script explicitly + + When calling ``make install-python`` LAMMPS will try to install the + python module and the shared library into the python site-packages folders; + either the system-wide ones, or the local users ones (in case of insufficient + permissions for the global install). Python will then find the module + and shared library file automatically. The exact location of these folders + depends on your python version and your operating system. + + You can override the python version to version x.y when calling + ``make`` with ``PYTHON=pythonX.Y``. + + If you set the paths to these files as environment variables, you only + have to do it once. For the csh or tcsh shells, add something like + this to your ~/.cshrc file, one line for each of the two files: + + .. code-block:: csh + + setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/python + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src + + On MacOS you may also need to set ``DYLD_LIBRARY_PATH`` accordingly. + For Bourne/Korn shells accordingly into the corresponding files using + the ``export`` shell builtin. + + If you use ``make install-python`` or the ``python/install.py`` script, you need + to invoke it every time you rebuild LAMMPS (as a shared library) or + make changes to the ``python/lammps.py`` file, so that the site-packages + files are updated with the new version. + + If the default settings of ``make install-python`` are not what you want, + you can invoke ``install.py`` from the python directory manually as + + .. code-block:: bash + + $ python install.py -m -l -v [-d ] + + * The ``-m`` flag points to the ``lammps.py`` python module file to be installed, + * the ``-l`` flag points to the LAMMPS shared library file to be installed, + * the ``-v`` flag points to the ``version.h`` file in the LAMMPS source + * and the optional ``-d`` flag to a custom (legacy) installation folder + + If you use a legacy installation folder, you will need to set your + ``PYTHONPATH`` and ``LD_LIBRARY_PATH`` (and/or ``DYLD_LIBRARY_PATH``) environment + variables accordingly, as described above. + + Note that if you want Python to be able to load different versions of + the LAMMPS shared library (see :ref:`python_create_lammps`), you will + need to manually copy files like ``liblammps_mpi.so`` into the appropriate + system directory. This is not needed if you set the ``LD_LIBRARY_PATH`` + environment variable as described above. + + +Extending Python to run in parallel +=================================== + +If you wish to run LAMMPS in parallel from Python, you need to extend +your Python with an interface to MPI. This also allows you to +make MPI calls directly from Python in your script, if you desire. + +We have tested this with mpi4py and pypar: + +* `MPI for Python `_ +* `pypar `_ + +We recommend the use of mpi4py as it is the more complete MPI interface, +and as of version 2.0.0 mpi4py allows passing a custom MPI communicator +to the LAMMPS constructor, which means one can easily run one or more +LAMMPS instances on subsets of the total MPI ranks. + +To install mpi4py (version 3.0.3 as of Sep 2020), + +.. tabs:: + + .. tab:: local user + + .. code-block:: bash + + pip install --user mpi4py + + .. tab:: system-wide + + .. code-block:: bash + + sudo pip install mpi4py + + .. tab:: virtual environment + + .. code-block:: bash + + $ source $HOME/myenv/activate + (myenv)$ pip install mpi4py + +.. _mpi4py_install: https://mpi4py.readthedocs.io/en/stable/install.html + +For more detailed installation instructions, please see the `mpi4py installation `_ page. + +If you have successfully installed mpi4py, you should be able to run +Python and type + +.. code-block:: python + + from mpi4py import MPI + +without error. You should also be able to run Python in parallel +on a simple test script + +.. code-block:: bash + + $ mpirun -np 4 python test.py + +where ``test.py`` contains the lines + +.. code-block:: python + + from mpi4py import MPI + comm = MPI.COMM_WORLD + print "Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size()) + +and see one line of output for each processor you run on. + +.. note:: + + To use mpi4py and LAMMPS in parallel from Python, you must + insure both are using the same version of MPI. If you only have one + MPI installed on your system, this is not an issue, but it can be if + you have multiple MPIs. Your LAMMPS build is explicit about which MPI + it is using, since you specify the details in your low-level + src/MAKE/Makefile.foo file. mpi4py uses the "mpicc" command to find + information about the MPI it uses to build against. And it tries to + load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find + the MPI library that LAMMPS is using. If you have problems running + both mpi4py and LAMMPS together, this is an issue you may need to + address, e.g. by moving other MPI installations so that mpi4py finds + the right one. -Note that if you want Python to be able to load different versions of -the LAMMPS shared library (see :doc:`this section `), you will -need to manually copy files like liblammps_g++.so into the appropriate -system directory. This is not needed if you set the LD_LIBRARY_PATH -environment variable as described above. diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index e9a48dd797..9fb634f05a 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -28,278 +28,8 @@ There are multiple Python interface classes in the :py:mod:`lammps` module: ---------- -Setting up a Python virtual environment -*************************************** - -LAMMPS and its Python module can be installed together into a Python virtual -environment. This lets you isolate your customized Python environment from -your user or system installation. The following is a minimal working example: - -.. code-block:: bash - - # create and change into build directory - mkdir build - cd build - - # create virtual environment - virtualenv myenv - - # Add venv lib folder to LD_LIBRARY_PATH when activating it - echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> myenv/bin/activate - - # Add LAMMPS_POTENTIALS path when activating venv - echo 'export LAMMPS_POTENTIALS=$VIRTUAL_ENV/share/lammps/potentials' >> myenv/bin/activate - - # activate environment - source myenv/bin/activate - - # configure LAMMPS compilation - # compiles as shared library with PYTHON package and C++ exceptions - # and installs into myvenv - (myenv)$ cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV \ - ../cmake - - # compile LAMMPS - (myenv)$ cmake --build . --parallel - - # install LAMMPS into myvenv - (myenv)$ cmake --install . - -Creating or deleting a LAMMPS object -************************************ - -With the Python interface the creation of a :cpp:class:`LAMMPS -` instance is included in the constructors for the -:py:meth:`lammps `, :py:meth:`PyLammps `, -and :py:meth:`PyLammps ` classes. -Internally it will call either :cpp:func:`lammps_open` or :cpp:func:`lammps_open_no_mpi` from the C -library API to create the class instance. - -All arguments are optional. The *name* argument allows loading a -LAMMPS shared library that is named ``liblammps_machine.so`` instead of -the default name of ``liblammps.so``. In most cases the latter will be -installed or used. The *ptr* argument is for use of the -:py:mod:`lammps` module from inside a LAMMPS instance, e.g. with the -:doc:`python ` command, where a pointer to the already existing -:cpp:class:`LAMMPS ` class instance can be passed -to the Python class and used instead of creating a new instance. The -*comm* argument may be used in combination with the `mpi4py `_ -module to pass an MPI communicator to LAMMPS and thus it is possible -to run the Python module like the library interface on a subset of the -MPI ranks after splitting the communicator. - - -Here are simple examples using all three Python interfaces: - -.. tabs:: - - .. tab:: lammps API - - .. code-block:: python - - from lammps import lammps - - # NOTE: argv[0] is set by the lammps class constructor - args = ["-log", "none"] - # create LAMMPS instance - lmp = lammps(cmdargs=args) - # get and print numerical version code - print("LAMMPS Version: ", lmp.version()) - # explicitly close and delete LAMMPS instance (optional) - lmp.close() - - .. tab:: PyLammps API - - The :py:class:`PyLammps` class is a wrapper around the - :py:class:`lammps` class and all of its lower level functions. - By default, it will create a new instance of :py:class:`lammps` passing - along all arguments to the constructor of :py:class:`lammps`. - - .. code-block:: python - - from lammps import PyLammps - - # NOTE: argv[0] is set by the lammps class constructor - args = ["-log", "none"] - # create LAMMPS instance - L = PyLammps(cmdargs=args) - # get and print numerical version code - print("LAMMPS Version: ", L.version()) - # explicitly close and delete LAMMPS instance (optional) - L.close() - - :py:class:`PyLammps` objects can also be created on top of an existing :py:class:`lammps` object: - - .. code-block:: Python - - from lammps import lammps, PyLammps - ... - # create LAMMPS instance - lmp = lammps(cmdargs=args) - # create PyLammps instance using previously created LAMMPS instance - L = PyLammps(ptr=lmp) - - This is useful if you have to create the :py:class:`lammps ` - instance is a specific way, but want to take advantage of the - :py:class:`PyLammps ` interface. - - .. tab:: IPyLammps API - - The :py:class:`IPyLammps` class is an extension of the - :py:class:`PyLammps` class. It has the same construction behavior. By - default, it will create a new instance of :py:class:`lammps` passing - along all arguments to the constructor of :py:class:`lammps`. - - .. code-block:: python - - from lammps import IPyLammps - - # NOTE: argv[0] is set by the lammps class constructor - args = ["-log", "none"] - # create LAMMPS instance - L = IPyLammps(cmdargs=args) - # get and print numerical version code - print("LAMMPS Version: ", L.version()) - # explicitly close and delete LAMMPS instance (optional) - L.close() - - You can also initialize IPyLammps on top of an existing :py:class:`lammps` or :py:class:`PyLammps` object: - - .. code-block:: Python - - from lammps import lammps, IPyLammps - ... - # create LAMMPS instance - lmp = lammps(cmdargs=args) - # create PyLammps instance using previously created LAMMPS instance - L = PyLammps(ptr=lmp) - - This is useful if you have to create the :py:class:`lammps ` - instance is a specific way, but want to take advantage of the - :py:class:`IPyLammps ` interface. - -In all of the above cases, same as with the :ref:`C library API `, this will use the -``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was -compiled with. The :py:func:`lmp.close() ` call is -optional since the LAMMPS class instance will also be deleted -automatically during the :py:class:`lammps ` class -destructor. - -Executing LAMMPS commands -************************* - -Once an instance of the :py:class:`lammps`, :py:class:`PyLammps`, or -:py:class:`IPyLammps` class is created, there are multiple ways to "feed" it -commands. In a way that is not very different from running a LAMMPS input -script, except that Python has many more facilities for structured -programming than the LAMMPS input script syntax. Furthermore it is possible -to "compute" what the next LAMMPS command should be. - -.. tabs:: - - .. tab:: lammps API - - Same as in the equivalent - :doc:`C library functions `, commands can be read from a file, a - single string, a list of strings and a block of commands in a single - multi-line string. They are processed under the same boundary conditions - as the C library counterparts. The example below demonstrates the use - of :py:func:`lammps.file`, :py:func:`lammps.command`, - :py:func:`lammps.commands_list`, and :py:func:`lammps.commands_string`: - - .. code-block:: python - - from lammps import lammps - lmp = lammps() - # read commands from file 'in.melt' - lmp.file('in.melt') - # issue a single command - lmp.command('variable zpos index 1.0') - # create 10 groups with 10 atoms each - cmds = ["group g{} id {}:{}".format(i,10*i+1,10*(i+1)) for i in range(10)] - lmp.commands_list(cmds) - # run commands from a multi-line string - block = """ - clear - region box block 0 2 0 2 0 2 - create_box 1 box - create_atoms 1 single 1.0 1.0 ${zpos} - """ - lmp.commands_string(block) - - .. tab:: PyLammps/IPyLammps API - - Unlike the lammps API, the PyLammps/IPyLammps APIs allow running LAMMPS - commands by calling equivalent member functions. - - For instance, the following LAMMPS command - - .. code-block:: LAMMPS - - region box block 0 10 0 5 -0.5 0.5 - - can be executed using the following Python code if *L* is a :py:class:`lammps` instance: - - .. code-block:: Python - - L.command("region box block 0 10 0 5 -0.5 0.5") - - With the PyLammps interface, any LAMMPS command can be split up into arbitrary parts. - These parts are then passed to a member function with the name of the command. - For the ``region`` command that means the :code:`region` method can be called. - The arguments of the command can be passed as one string, or - individually. - - .. code-block:: Python - - L.region("box block", 0, 10, 0, 5, -0.5, 0.5) - - In this example all parameters except the first are Python floating-point literals. The - PyLammps interface takes the entire parameter list and transparently - merges it to a single command string. - - The benefit of this approach is avoiding redundant command calls and easier - parameterization. In the original interface parameterization this needed to be done - manually by creating formatted strings. - - .. code-block:: Python - - L.command("region box block %f %f %f %f %f %f" % (xlo, xhi, ylo, yhi, zlo, zhi)) - - In contrast, methods of PyLammps accept parameters directly and will convert - them automatically to a final command string. - - .. code-block:: Python - - L.region("box block", xlo, xhi, ylo, yhi, zlo, zhi) - - Using these facilities, the example shown for the lammps API can be rewritten as follows: - - .. code-block:: python - - from lammps import PyLammps - L = PyLammps() - # read commands from file 'in.melt' - L.file('in.melt') - # issue a single command - L.variable('zpos', 'index', 1.0) - # create 10 groups with 10 atoms each - for i in range(10): - L.group(f"g{i}", "id", f"{10*i+1}:{10*(i+1)}") - - L.clear() - L.region("box block", 0, 2, 0, 2, 0, 2) - L.create_box(1, "box") - L.create_atoms(1, "single", 1.0, 1.0, "${zpos}") - ----------- - The ``lammps`` class API -************************ +======================== The :py:class:`lammps ` class is the core of the LAMMPS Python interfaces. It is a wrapper around the :ref:`LAMMPS C library @@ -317,7 +47,7 @@ functions. Below is a detailed documentation of the API. ---------- The ``PyLammps`` class API -************************** +========================== The :py:class:`PyLammps ` class is a wrapper that creates a simpler, more "Pythonic" interface to common LAMMPS functionality. LAMMPS @@ -340,7 +70,7 @@ scripts shorter and more concise. See the :doc:`PyLammps Tutorial ---------- The ``IPyLammps`` class API -*************************** +=========================== The :py:class:`IPyLammps ` class is an extension of :py:class:`PyLammps `, adding additional functions to @@ -353,7 +83,7 @@ See the :doc:`PyLammps Tutorial ` for examples. ---------- Additional components of the ``lammps`` module -********************************************** +============================================== The :py:mod:`lammps` module additionally contains several constants and the :py:class:`NeighList ` class: @@ -415,20 +145,3 @@ Classes representing internal objects .. autoclass:: lammps.NeighList :members: :no-undoc-members: - - -LAMMPS error handling in Python -******************************* - -Compiling the shared library with :ref:`C++ exception support ` provides a better error -handling experience. Without exceptions the LAMMPS code will terminate the -current Python process with an error message. C++ exceptions allow capturing -them on the C++ side and rethrowing them on the Python side. This way -LAMMPS errors can be handled through the Python exception handling mechanism. - -.. warning:: - - Capturing a LAMMPS exception in Python can still mean that the - current LAMMPS process is in an illegal state and must be terminated. It is - advised to save your data and terminate the Python instance as quickly as - possible. diff --git a/doc/src/Python_mpi.rst b/doc/src/Python_mpi.rst deleted file mode 100644 index 02a62c89d0..0000000000 --- a/doc/src/Python_mpi.rst +++ /dev/null @@ -1,71 +0,0 @@ -Extending Python to run in parallel -=================================== - -If you wish to run LAMMPS in parallel from Python, you need to extend -your Python with an interface to MPI. This also allows you to -make MPI calls directly from Python in your script, if you desire. - -We have tested this with mpi4py and pypar: - -* `MPI for Python `_ -* `pypar `_ - -We recommend the use of mpi4py as it is the more complete MPI interface, -and as of version 2.0.0 mpi4py allows passing a custom MPI communicator -to the LAMMPS constructor, which means one can easily run one or more -LAMMPS instances on subsets of the total MPI ranks. - -To install mpi4py (version mpi4py-3.0.3 as of Nov 2019), unpack it -and from its main directory, type - -.. code-block:: bash - - python setup.py build - sudo python setup.py install - -Again, the "sudo" is only needed if required to copy mpi4py files into -your Python distribution's site-packages directory. To install with -user privilege into the user local directory type - -.. code-block:: bash - - python setup.py install --user - -If you have successfully installed mpi4py, you should be able to run -Python and type - -.. code-block:: python - - from mpi4py import MPI - -without error. You should also be able to run python in parallel -on a simple test script - -.. code-block:: bash - - % mpirun -np 4 python test.py - -where test.py contains the lines - -.. code-block:: python - - from mpi4py import MPI - comm = MPI.COMM_WORLD - print "Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size()) - -and see one line of output for each processor you run on. - -.. note:: - - To use mpi4py and LAMMPS in parallel from Python, you must - insure both are using the same version of MPI. If you only have one - MPI installed on your system, this is not an issue, but it can be if - you have multiple MPIs. Your LAMMPS build is explicit about which MPI - it is using, since you specify the details in your low-level - src/MAKE/Makefile.foo file. Mpi4py uses the "mpicc" command to find - information about the MPI it uses to build against. And it tries to - load "libmpi.so" from the LD_LIBRARY_PATH. This may or may not find - the MPI library that LAMMPS is using. If you have problems running - both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by moving other MPI installations so that mpi4py finds - the right one. diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index a41de5d444..b39d841979 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -1,5 +1,37 @@ -Overview of Python and LAMMPS -============================= +Overview +======== + +The LAMMPS distribution includes a python directory with all you need +to run LAMMPS from Python. The python/lammps.py file wraps the LAMMPS +library interface, with one wrapper function per LAMMPS library +function. This file makes it is possible to do the following either +from a Python script, or interactively from a Python prompt: create +one or more instances of LAMMPS, invoke LAMMPS commands or give it an +input script, run LAMMPS incrementally, extract LAMMPS results, an +modify internal LAMMPS variables. From a Python script you can do +this in serial or parallel. Running Python interactively in parallel +does not generally work, unless you have a version of Python that +extends Python to enable multiple instances of Python to read what you +type. + +To do all of this, you must first build LAMMPS as a shared library, +then insure that your Python can find the python/lammps.py file and +the shared library. + +The Python wrapper for LAMMPS uses the "ctypes" package in Python, +which auto-generates the interface code needed between Python and a +set of C-style library functions. Ctypes is part of standard Python +for versions 2.5 and later. You can check which version of Python you +have by simply typing "python" at a shell prompt. + +.. warning:: Python 2 support is deprecated + + While the LAMMPS Python module was originally developed to support both + Python 2 and 3, Python 2 is no longer maintained as of `January 1, 2020 `_. + Therefore, we will no longer backport any new features to Python 2 and + highly recommend using Python versions 3.6+. + +--------- LAMMPS can work together with Python in three ways. First, Python can wrap LAMMPS through the its :doc:`library interface `, so @@ -7,14 +39,25 @@ that a Python script can create one or more instances of LAMMPS and launch one or more simulations. In Python lingo, this is called "extending" Python with a LAMMPS module. -Second, a lower-level Python interface can be used indirectly through -the provided PyLammps and IPyLammps wrapper classes, written in Python. +.. figure:: JPG/python-invoke-lammps.png + :figclass: align-center + + Launching LAMMPS via Python + + +Second, the lower-level Python interface can be used indirectly through +the provided :code`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. These wrappers try to simplify the usage of LAMMPS in Python by providing an object-based interface to common LAMMPS functionality. They also reduces the amount of code necessary to parameterize LAMMPS scripts through Python and make variables and computes directly accessible. +.. figure:: JPG/pylammps-invoke-lammps.png + :figclass: align-center + + Using the PyLammps / IPyLammps wrappers + Third, LAMMPS can use the Python interpreter, so that a LAMMPS input script or styles can invoke Python code directly, and pass information back-and-forth between the input script and Python @@ -23,3 +66,8 @@ to query or change its attributes through the LAMMPS Python module mentioned above. In Python lingo, this is "embedding" Python in LAMMPS. When used in this mode, Python can perform script operations that the simple LAMMPS input script syntax can not. + +.. figure:: JPG/lammps-invoke-python.png + :figclass: align-center + + Calling Python code from LAMMPS diff --git a/doc/src/Python_pylammps.rst b/doc/src/Python_pylammps.rst deleted file mode 100644 index ad34706f50..0000000000 --- a/doc/src/Python_pylammps.rst +++ /dev/null @@ -1,5 +0,0 @@ -PyLammps interface -================== - -PyLammps is a Python wrapper class which can be created on its own or -use an existing lammps Python object. It has its own :doc:`Howto pylammps ` doc page. diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index 9aab6da9c6..ba8cf77c12 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -1,32 +1,118 @@ Run LAMMPS from Python ====================== -The LAMMPS distribution includes a python directory with all you need -to run LAMMPS from Python. The python/lammps.py file wraps the LAMMPS -library interface, with one wrapper function per LAMMPS library -function. This file makes it is possible to do the following either -from a Python script, or interactively from a Python prompt: create -one or more instances of LAMMPS, invoke LAMMPS commands or give it an -input script, run LAMMPS incrementally, extract LAMMPS results, an -modify internal LAMMPS variables. From a Python script you can do -this in serial or parallel. Running Python interactively in parallel -does not generally work, unless you have a version of Python that -extends Python to enable multiple instances of Python to read what you -type. +Running LAMMPS and Python in serial: +------------------------------------- -To do all of this, you must first build LAMMPS as a shared library, -then insure that your Python can find the python/lammps.py file and -the shared library. +To run a LAMMPS in serial, type these lines into Python +interactively from the bench directory: -Two advantages of using Python to run LAMMPS are how concise the -language is, and that it can be run interactively, enabling rapid -development and debugging. If you use it to mostly invoke costly -operations within LAMMPS, such as running a simulation for a -reasonable number of timesteps, then the overhead cost of invoking -LAMMPS through Python will be negligible. +.. parsed-literal:: -The Python wrapper for LAMMPS uses the "ctypes" package in Python, -which auto-generates the interface code needed between Python and a -set of C-style library functions. Ctypes is part of standard Python -for versions 2.5 and later. You can check which version of Python you -have by simply typing "python" at a shell prompt. + >>> from lammps import lammps + >>> lmp = lammps() + >>> lmp.file("in.lj") + +Or put the same lines in the file ``test.py`` and run it as + +.. code-block:: bash + + % python test.py + +Either way, you should see the results of running the ``in.lj`` benchmark +on a single processor appear on the screen, the same as if you had +typed something like: + +.. parsed-literal:: + + lmp_serial -in in.lj + +Test LAMMPS and Python in parallel: +--------------------------------------- + +To run LAMMPS in parallel, assuming you have installed the +`PyPar `_ package as discussed +above, create a ``test.py`` file containing these lines: + +.. code-block:: python + + import pypar + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp + pypar.finalize() + +To run LAMMPS in parallel, assuming you have installed the +`mpi4py `_ package as discussed +above, create a ``test.py`` file containing these lines: + +.. code-block:: python + + from mpi4py import MPI + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + me = MPI.COMM_WORLD.Get_rank() + nprocs = MPI.COMM_WORLD.Get_size() + print "Proc %d out of %d procs has" % (me,nprocs),lmp + MPI.Finalize() + +You can run either script in parallel as: + +.. code-block:: bash + + $ mpirun -np 4 python test.py + +and you should see the same output as if you had typed + +.. code-block:: bash + + $ mpirun -np 4 lmp_mpi -in in.lj + +Note that if you leave out the 3 lines from ``test.py`` that specify PyPar +commands you will instantiate and run LAMMPS independently on each of +the :math:`P` processors specified in the mpirun command. In this case you +should get 4 sets of output, each showing that a LAMMPS run was made +on a single processor, instead of one set of output showing that +LAMMPS ran on 4 processors. If the 1-processor outputs occur, it +means that PyPar is not working correctly. + +Also note that once you import the PyPar module, PyPar initializes MPI +for you, and you can use MPI calls directly in your Python script, as +described in the PyPar documentation. The last line of your Python +script should be ``pypar.finalize()``, to insure MPI is shut down +correctly. + +Running Python scripts: +--------------------------- + +Note that any Python script (not just for LAMMPS) can be invoked in +one of several ways: + +.. code-block:: bash + + $ python script.py + $ python -i script.py + $ ./script.py + +The last command requires that the first line of the script be +something like this: + +.. code-block:: bash + + #!/usr/bin/python + #!/usr/bin/python -i + +where the path points to where you have Python installed, and that you +have made the script file executable: + +.. code-block:: bash + + $ chmod +x script.py + +Without the ``-i`` flag, Python will exit when the script finishes. +With the ``-i`` flag, you will be left in the Python interpreter when +the script finishes, so you can type subsequent commands. As +mentioned above, you can only run Python interactively when running +Python on a single processor, not in parallel. diff --git a/doc/src/Python_shlib.rst b/doc/src/Python_shlib.rst deleted file mode 100644 index b02fcd7bb8..0000000000 --- a/doc/src/Python_shlib.rst +++ /dev/null @@ -1,78 +0,0 @@ -Build LAMMPS as a shared library -================================ - -.. TODO this is mostly redundant and should be addressed in the 'progguide' branch if it has not already - -Build LAMMPS as a shared library using make -------------------------------------------- - -Instructions on how to build LAMMPS as a shared library are given on -the :doc:`Build_basics ` doc page. A shared library is -one that is dynamically loadable, which is what Python requires to -wrap LAMMPS. On Linux this is a library file that ends in ".so", not -".a". - -From the src directory, type - -.. code-block:: bash - - make foo mode=shared - -where foo is the machine target name, such as mpi or serial. -This should create the file liblammps_foo.so in the src directory, as -well as a soft link liblammps.so, which is what the Python wrapper will -load by default. Note that if you are building multiple machine -versions of the shared library, the soft link is always set to the -most recently built version. - -.. note:: - - If you are building LAMMPS with an MPI or FFT library or other - auxiliary libraries (used by various packages), then all of these - extra libraries must also be shared libraries. If the LAMMPS - shared-library build fails with an error complaining about this, see - the :doc:`Build_basics ` doc page. - -Build LAMMPS as a shared library using CMake --------------------------------------------- - -When using CMake the following two options are necessary to generate the LAMMPS -shared library: - -.. code-block:: bash - - -D BUILD_SHARED_LIBS=on # enable building of LAMMPS shared library (both options are needed!) - -What this does is create a liblammps.so which contains the majority of LAMMPS -code. The generated lmp binary also dynamically links to this library. This -means that either this liblammps.so file has to be in the same directory, a system -library path (e.g. /usr/lib64/) or in the LD_LIBRARY_PATH. - -If you want to use the shared library with Python the recommended way is to create a virtualenv and use it as -CMAKE_INSTALL_PREFIX. - -.. code-block:: bash - - # create virtualenv - virtualenv --python=$(which python3) myenv3 - source myenv3/bin/activate - - # build library - mkdir build - cd build - cmake -D PKG_PYTHON=on -D BUILD_SHARED_LIBS=on -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV ../cmake - make -j 4 - - # install into prefix - make install - -This will also install the Python module into your virtualenv. Since virtualenv -does not change your LD_LIBRARY_PATH, you still need to add its lib64 folder to -it, which contains the installed liblammps.so. - -.. code-block:: bash - - export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib64:$LD_LIBRARY_PATH - -Starting Python outside (!) of your build directory, but with the virtualenv -enabled and with the LD_LIBRARY_PATH set gives you access to LAMMPS via Python. diff --git a/doc/src/Python_test.rst b/doc/src/Python_test.rst deleted file mode 100644 index 323feec2d8..0000000000 --- a/doc/src/Python_test.rst +++ /dev/null @@ -1,152 +0,0 @@ -Test the Python/LAMMPS interface -================================ - -To test if LAMMPS is callable from Python, launch Python interactively -and type: - -.. parsed-literal:: - - >>> from lammps import lammps - >>> lmp = lammps() - -If you get no errors, you're ready to use LAMMPS from Python. If the -second command fails, the most common error to see is - -.. parsed-literal:: - - OSError: Could not load LAMMPS dynamic library - -which means Python was unable to load the LAMMPS shared library. This -typically occurs if the system can't find the LAMMPS shared library or -one of the auxiliary shared libraries it depends on, or if something -about the library is incompatible with your Python. The error message -should give you an indication of what went wrong. - -You can also test the load directly in Python as follows, without -first importing from the lammps.py file: - -.. parsed-literal:: - - >>> from ctypes import CDLL - >>> CDLL("liblammps.so") - -If an error occurs, carefully go through the steps on the -:doc:`Build_basics ` doc page about building a shared -library and the :doc:`Python_install ` doc page about -insuring Python can find the necessary two files it needs. - -Test LAMMPS and Python in serial: -------------------------------------- - -To run a LAMMPS test in serial, type these lines into Python -interactively from the bench directory: - -.. parsed-literal:: - - >>> from lammps import lammps - >>> lmp = lammps() - >>> lmp.file("in.lj") - -Or put the same lines in the file test.py and run it as - -.. code-block:: bash - - % python test.py - -Either way, you should see the results of running the in.lj benchmark -on a single processor appear on the screen, the same as if you had -typed something like: - -.. parsed-literal:: - - lmp_g++ -in in.lj - -Test LAMMPS and Python in parallel: ---------------------------------------- - -To run LAMMPS in parallel, assuming you have installed the -`PyPar `_ package as discussed -above, create a test.py file containing these lines: - -.. code-block:: python - - import pypar - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp - pypar.finalize() - -To run LAMMPS in parallel, assuming you have installed the -`mpi4py `_ package as discussed -above, create a test.py file containing these lines: - -.. code-block:: python - - from mpi4py import MPI - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - me = MPI.COMM_WORLD.Get_rank() - nprocs = MPI.COMM_WORLD.Get_size() - print "Proc %d out of %d procs has" % (me,nprocs),lmp - MPI.Finalize() - -You can either script in parallel as: - -.. code-block:: bash - - % mpirun -np 4 python test.py - -and you should see the same output as if you had typed - -.. code-block:: bash - - % mpirun -np 4 lmp_g++ -in in.lj - -Note that if you leave out the 3 lines from test.py that specify PyPar -commands you will instantiate and run LAMMPS independently on each of -the P processors specified in the mpirun command. In this case you -should get 4 sets of output, each showing that a LAMMPS run was made -on a single processor, instead of one set of output showing that -LAMMPS ran on 4 processors. If the 1-processor outputs occur, it -means that PyPar is not working correctly. - -Also note that once you import the PyPar module, PyPar initializes MPI -for you, and you can use MPI calls directly in your Python script, as -described in the PyPar documentation. The last line of your Python -script should be pypar.finalize(), to insure MPI is shut down -correctly. - -Running Python scripts: ---------------------------- - -Note that any Python script (not just for LAMMPS) can be invoked in -one of several ways: - -.. code-block:: bash - - % python foo.script - % python -i foo.script - % foo.script - -The last command requires that the first line of the script be -something like this: - -.. code-block:: bash - - #!/usr/local/bin/python - #!/usr/local/bin/python -i - -where the path points to where you have Python installed, and that you -have made the script file executable: - -.. code-block:: bash - - % chmod +x foo.script - -Without the "-i" flag, Python will exit when the script finishes. -With the "-i" flag, you will be left in the Python interpreter when -the script finishes, so you can type subsequent commands. As -mentioned above, you can only run Python interactively when running -Python on a single processor, not in parallel. diff --git a/doc/src/Python_trouble.rst b/doc/src/Python_trouble.rst new file mode 100644 index 0000000000..3ef7dacf34 --- /dev/null +++ b/doc/src/Python_trouble.rst @@ -0,0 +1,44 @@ +Troubleshooting +*************** + +Testing if Python can launch LAMMPS +=================================== + +To test if LAMMPS is callable from Python, launch Python interactively +and type: + +.. code-block:: python + + >>> from lammps import lammps + >>> lmp = lammps() + +If you get no errors, you're ready to use LAMMPS from Python. If the +second command fails, the most common error to see is + +.. code-block:: bash + + OSError: Could not load LAMMPS dynamic library + +which means Python was unable to load the LAMMPS shared library. This +typically occurs if the system can't find the LAMMPS shared library or +one of the auxiliary shared libraries it depends on, or if something +about the library is incompatible with your Python. The error message +should give you an indication of what went wrong. + +If your shared library uses a suffix, such as ``liblammps_mpi.so``, change +the constructor call as follows (see :ref:`python_create_lammps` for more details): + +.. code-block:: python + + >>> lmp = lammps(name='mpi') + +You can also test the load directly in Python as follows, without +first importing from the lammps.py file: + +.. code-block:: python + + >>> from ctypes import CDLL + >>> CDLL("liblammps.so") + +If an error occurs, carefully go through the steps in :ref:`python_install_guides` and on the +:doc:`Build_basics ` doc page about building a shared library. diff --git a/doc/src/Python_library.rst b/doc/src/Python_usage.rst similarity index 53% rename from doc/src/Python_library.rst rename to doc/src/Python_usage.rst index 370c67b3f8..40705d33df 100644 --- a/doc/src/Python_library.rst +++ b/doc/src/Python_usage.rst @@ -1,25 +1,126 @@ -Python library interface -======================== +.. _mpi4py_url: https://mpi4py.readthedocs.io/ -As described previously, the Python interface to LAMMPS consists of a -Python "lammps" module, the source code for which is in -python/lammps.py, which creates a "lammps" object, with a set of -methods that can be invoked on that object. The sample Python code -below assumes you have first imported the "lammps" module in your -Python script, as follows: +.. _python_create_lammps: -.. code-block:: Python +Creating or deleting a LAMMPS object +************************************ - from lammps import lammps +With the Python interface the creation of a :cpp:class:`LAMMPS +` instance is included in the constructors for the +:py:meth:`lammps `, :py:meth:`PyLammps `, +and :py:meth:`PyLammps ` classes. +Internally it will call either :cpp:func:`lammps_open` or :cpp:func:`lammps_open_no_mpi` from the C +library API to create the class instance. -These are the methods defined by the lammps module. If you look at -the files src/library.cpp and src/library.h you will see they -correspond one-to-one with calls you can make to the LAMMPS library -from a C++ or C or Fortran program, and which are described on the -:doc:`Howto library ` doc page. +All arguments are optional. The *name* argument allows loading a +LAMMPS shared library that is named ``liblammps_machine.so`` instead of +the default name of ``liblammps.so``. In most cases the latter will be +installed or used. The *ptr* argument is for use of the +:py:mod:`lammps` module from inside a LAMMPS instance, e.g. with the +:doc:`python ` command, where a pointer to the already existing +:cpp:class:`LAMMPS ` class instance can be passed +to the Python class and used instead of creating a new instance. The +*comm* argument may be used in combination with the `mpi4py `_ +module to pass an MPI communicator to LAMMPS and thus it is possible +to run the Python module like the library interface on a subset of the +MPI ranks after splitting the communicator. -The python/examples directory has Python scripts which show how Python -can run LAMMPS, grab data, change it, and put it back into LAMMPS. + +Here are simple examples using all three Python interfaces: + +.. tabs:: + + .. tab:: lammps API + + .. code-block:: python + + from lammps import lammps + + # NOTE: argv[0] is set by the lammps class constructor + args = ["-log", "none"] + # create LAMMPS instance + lmp = lammps(cmdargs=args) + # get and print numerical version code + print("LAMMPS Version: ", lmp.version()) + # explicitly close and delete LAMMPS instance (optional) + lmp.close() + + .. tab:: PyLammps API + + The :py:class:`PyLammps` class is a wrapper around the + :py:class:`lammps` class and all of its lower level functions. + By default, it will create a new instance of :py:class:`lammps` passing + along all arguments to the constructor of :py:class:`lammps`. + + .. code-block:: python + + from lammps import PyLammps + + # NOTE: argv[0] is set by the lammps class constructor + args = ["-log", "none"] + # create LAMMPS instance + L = PyLammps(cmdargs=args) + # get and print numerical version code + print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) + L.close() + + :py:class:`PyLammps` objects can also be created on top of an existing :py:class:`lammps` object: + + .. code-block:: Python + + from lammps import lammps, PyLammps + ... + # create LAMMPS instance + lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance + L = PyLammps(ptr=lmp) + + This is useful if you have to create the :py:class:`lammps ` + instance is a specific way, but want to take advantage of the + :py:class:`PyLammps ` interface. + + .. tab:: IPyLammps API + + The :py:class:`IPyLammps` class is an extension of the + :py:class:`PyLammps` class. It has the same construction behavior. By + default, it will create a new instance of :py:class:`lammps` passing + along all arguments to the constructor of :py:class:`lammps`. + + .. code-block:: python + + from lammps import IPyLammps + + # NOTE: argv[0] is set by the lammps class constructor + args = ["-log", "none"] + # create LAMMPS instance + L = IPyLammps(cmdargs=args) + # get and print numerical version code + print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) + L.close() + + You can also initialize IPyLammps on top of an existing :py:class:`lammps` or :py:class:`PyLammps` object: + + .. code-block:: Python + + from lammps import lammps, IPyLammps + ... + # create LAMMPS instance + lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance + L = PyLammps(ptr=lmp) + + This is useful if you have to create the :py:class:`lammps ` + instance is a specific way, but want to take advantage of the + :py:class:`IPyLammps ` interface. + +In all of the above cases, same as with the :ref:`C library API `, this will use the +``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was +compiled with. The :py:func:`lmp.close() ` call is +optional since the LAMMPS class instance will also be deleted +automatically during the :py:class:`lammps ` class +destructor. .. code-block:: Python @@ -32,67 +133,6 @@ can run LAMMPS, grab data, change it, and put it back into LAMMPS. lmp.close() # destroy a LAMMPS object - version = lmp.version() # return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 - - lmp.file(file) # run an entire input script, file = "in.lj" - lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100" - lmp.commands_list(cmdlist) # invoke commands in cmdlist = **"run 10", "run 20"** - lmp.commands_string(multicmd) # invoke commands in multicmd = "run 10\nrun 20" - - size = lmp.extract_setting(name) # return data type info - - xlo = lmp.extract_global(name,type) # extract a global quantity - # name = "boxxlo", "nlocal", etc - # type = 0 = int - # 1 = double - - boxlo,boxhi,xy,yz,xz,periodicity,box_change = lmp.extract_box() # extract box info - - coords = lmp.extract_atom(name,type) # extract a per-atom quantity - # name = "x", "type", etc - # type = 0 = vector of ints - # 1 = array of ints - # 2 = vector of doubles - # 3 = array of doubles - - eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute - v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix - # id = ID of compute or fix - # style = 0 = global data - # 1 = per-atom data - # 2 = local data - # type = 0 = scalar - # 1 = vector - # 2 = array - # i,j = indices of value in global vector or array - - var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable - # name = name of variable - # group = group ID (ignored for equal-style variables) - # flag = 0 = equal-style variable - # 1 = atom-style variable - - value = lmp.get_thermo(name) # return current value of a thermo keyword - natoms = lmp.get_natoms() # total # of atoms as int - - flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful - lmp.reset_box(boxlo,boxhi,xy,yz,xz) # reset the simulation box size - - data = lmp.gather_atoms(name,type,count) # return per-atom property of all atoms gathered into data, ordered by atom ID - # name = "x", "charge", "type", etc - data = lmp.gather_atoms_concat(name,type,count) # ditto, but concatenated atom values from each proc (unordered) - data = lmp.gather_atoms_subset(name,type,count,ndata,ids) # ditto, but for subset of Ndata atoms with IDs - - lmp.scatter_atoms(name,type,count,data) # scatter per-atom property to all atoms from data, ordered by atom ID - # name = "x", "charge", "type", etc - # count = # of per-atom values, 1 or 3, etc - - lmp.scatter_atoms_subset(name,type,count,ndata,ids,data) # ditto, but for subset of Ndata atoms with IDs - - lmp.create_atoms(n,ids,types,x,v,image,shrinkexceed) # create N atoms with IDs, types, x, v, and image flags - ----------- - The lines .. code-block:: Python @@ -135,10 +175,163 @@ script, and coordinate and run multiple simulations, e.g. lmp1.file("in.file1") lmp2.file("in.file2") +Executing LAMMPS commands +************************* + +Once an instance of the :py:class:`lammps`, :py:class:`PyLammps`, or +:py:class:`IPyLammps` class is created, there are multiple ways to "feed" it +commands. In a way that is not very different from running a LAMMPS input +script, except that Python has many more facilities for structured +programming than the LAMMPS input script syntax. Furthermore it is possible +to "compute" what the next LAMMPS command should be. + +.. tabs:: + + .. tab:: lammps API + + Same as in the equivalent + :doc:`C library functions `, commands can be read from a file, a + single string, a list of strings and a block of commands in a single + multi-line string. They are processed under the same boundary conditions + as the C library counterparts. The example below demonstrates the use + of :py:func:`lammps.file`, :py:func:`lammps.command`, + :py:func:`lammps.commands_list`, and :py:func:`lammps.commands_string`: + + .. code-block:: python + + from lammps import lammps + lmp = lammps() + # read commands from file 'in.melt' + lmp.file('in.melt') + # issue a single command + lmp.command('variable zpos index 1.0') + # create 10 groups with 10 atoms each + cmds = ["group g{} id {}:{}".format(i,10*i+1,10*(i+1)) for i in range(10)] + lmp.commands_list(cmds) + # run commands from a multi-line string + block = """ + clear + region box block 0 2 0 2 0 2 + create_box 1 box + create_atoms 1 single 1.0 1.0 ${zpos} + """ + lmp.commands_string(block) + + .. tab:: PyLammps/IPyLammps API + + Unlike the lammps API, the PyLammps/IPyLammps APIs allow running LAMMPS + commands by calling equivalent member functions. + + For instance, the following LAMMPS command + + .. code-block:: LAMMPS + + region box block 0 10 0 5 -0.5 0.5 + + can be executed using the following Python code if *L* is a :py:class:`lammps` instance: + + .. code-block:: Python + + L.command("region box block 0 10 0 5 -0.5 0.5") + + With the PyLammps interface, any LAMMPS command can be split up into arbitrary parts. + These parts are then passed to a member function with the name of the command. + For the ``region`` command that means the :code:`region` method can be called. + The arguments of the command can be passed as one string, or + individually. + + .. code-block:: Python + + L.region("box block", 0, 10, 0, 5, -0.5, 0.5) + + In this example all parameters except the first are Python floating-point literals. The + PyLammps interface takes the entire parameter list and transparently + merges it to a single command string. + + The benefit of this approach is avoiding redundant command calls and easier + parameterization. In the original interface parameterization this needed to be done + manually by creating formatted strings. + + .. code-block:: Python + + L.command("region box block %f %f %f %f %f %f" % (xlo, xhi, ylo, yhi, zlo, zhi)) + + In contrast, methods of PyLammps accept parameters directly and will convert + them automatically to a final command string. + + .. code-block:: Python + + L.region("box block", xlo, xhi, ylo, yhi, zlo, zhi) + + Using these facilities, the example shown for the lammps API can be rewritten as follows: + + .. code-block:: python + + from lammps import PyLammps + L = PyLammps() + # read commands from file 'in.melt' + L.file('in.melt') + # issue a single command + L.variable('zpos', 'index', 1.0) + # create 10 groups with 10 atoms each + for i in range(10): + L.group(f"g{i}", "id", f"{10*i+1}:{10*(i+1)}") + + L.clear() + L.region("box block", 0, 2, 0, 2, 0, 2) + L.create_box(1, "box") + L.create_atoms(1, "single", 1.0, 1.0, "${zpos}") + + +.. code-block:: Python + + lmp.file(file) # run an entire input script, file = "in.lj" + lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100" + lmp.commands_list(cmdlist) # invoke commands in cmdlist = **"run 10", "run 20"** + lmp.commands_string(multicmd) # invoke commands in multicmd = "run 10\nrun 20" + The file(), command(), commands_list(), commands_string() methods allow an input script, a single command, or multiple commands to be invoked. + +Retrieving or setting LAMMPS system properties +********************************************** + +.. code-block:: Python + + version = lmp.version() # return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 + + size = lmp.extract_setting(name) # return data type info + + xlo = lmp.extract_global(name,type) # extract a global quantity + # name = "boxxlo", "nlocal", etc + # type = 0 = int + # 1 = double + + boxlo,boxhi,xy,yz,xz,periodicity,box_change = lmp.extract_box() # extract box info + + + value = lmp.get_thermo(name) # return current value of a thermo keyword + natoms = lmp.get_natoms() # total # of atoms as int + + lmp.reset_box(boxlo,boxhi,xy,yz,xz) # reset the simulation box size + + lmp.create_atoms(n,ids,types,x,v,image,shrinkexceed) # create N atoms with IDs, types, x, v, and image flags + + +The :py:meth:`get_thermo() ` method returns the current value of a thermo +keyword as a float. + +The get_natoms() method returns the total number of atoms in the +simulation, as an int. + + +The reset_box() method resets the size and shape of the simulation +box, e.g. as part of restoring a previously extracted and saved state +of a simulation. + + The extract_setting(), extract_global(), extract_box(), extract_atom(), extract_compute(), extract_fix(), and extract_variable() methods return values or pointers to data @@ -149,6 +342,37 @@ valid names. New names could easily be added. A double or integer is returned. You need to specify the appropriate data type via the type argument. +Retrieving or setting properties of LAMMPS objects +************************************************** + +.. code-block:: Python + + coords = lmp.extract_atom(name,type) # extract a per-atom quantity + # name = "x", "type", etc + # type = 0 = vector of ints + # 1 = array of ints + # 2 = vector of doubles + # 3 = array of doubles + + eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute + v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix + # id = ID of compute or fix + # style = 0 = global data + # 1 = per-atom data + # 2 = local data + # type = 0 = scalar + # 1 = vector + # 2 = array + # i,j = indices of value in global vector or array + + var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable + # name = name of variable + # group = group ID (ignored for equal-style variables) + # flag = 0 = equal-style variable + # 1 = atom-style variable + + flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful + For extract_atom(), a pointer to internal LAMMPS atom-based data is returned, which you can use via normal Python subscripting. See the extract() method in the src/atom.cpp file for a list of valid names. @@ -181,19 +405,27 @@ doubles is returned, one value per atom, which you can use via normal Python subscripting. The values will be zero for atoms not in the specified group. -The get_thermo() method returns the current value of a thermo -keyword as a float. - -The get_natoms() method returns the total number of atoms in the -simulation, as an int. - The set_variable() method sets an existing string-style variable to a new string value, so that subsequent LAMMPS commands can access the variable. -The reset_box() method resets the size and shape of the simulation -box, e.g. as part of restoring a previously extracted and saved state -of a simulation. + +Gather and Scatter Data between MPI processors +********************************************** + +.. code-block:: Python + + data = lmp.gather_atoms(name,type,count) # return per-atom property of all atoms gathered into data, ordered by atom ID + # name = "x", "charge", "type", etc + data = lmp.gather_atoms_concat(name,type,count) # ditto, but concatenated atom values from each proc (unordered) + data = lmp.gather_atoms_subset(name,type,count,ndata,ids) # ditto, but for subset of Ndata atoms with IDs + + lmp.scatter_atoms(name,type,count,data) # scatter per-atom property to all atoms from data, ordered by atom ID + # name = "x", "charge", "type", etc + # count = # of per-atom values, 1 or 3, etc + + lmp.scatter_atoms_subset(name,type,count,ndata,ids,data) # ditto, but for subset of Ndata atoms with IDs + The gather methods collect peratom info of the requested type (atom coords, atom types, forces, etc) from all processors, and returns the @@ -239,18 +471,3 @@ like this: Alternatively, you can just change values in the vector returned by the gather methods, since they are also ctypes vectors. ----------- - -As noted above, these Python class methods correspond one-to-one with -the functions in the LAMMPS library interface in src/library.cpp and -library.h. This means you can extend the Python wrapper via the -following steps: - -* Add a new interface function to src/library.cpp and - src/library.h. -* Rebuild LAMMPS as a shared library. -* Add a wrapper method to python/lammps.py for this interface - function. -* You should now be able to invoke the new interface function from a - Python script. - diff --git a/doc/src/python.rst b/doc/src/python.rst index 8451fe476e..f3238e8bb5 100644 --- a/doc/src/python.rst +++ b/doc/src/python.rst @@ -340,7 +340,7 @@ to the screen and log file. Note that since the LAMMPS print command itself takes a string in quotes as its argument, the Python string must be delimited with a different style of quotes. -The :doc:`Python library ` doc page describes the syntax +The :doc:`Python_head` doc page describes the syntax for how Python wraps the various functions included in the LAMMPS library interface. From 343b24dd5edf52efa73b2cc2824bfd545de50f95 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 1 Oct 2020 10:50:33 -0600 Subject: [PATCH 02/34] more edits to C library chapter --- doc/src/Library_add.rst | 29 +++++++++++++++-------------- doc/src/Library_config.rst | 24 ++++++++++++------------ doc/src/Library_neighbor.rst | 4 ++-- doc/src/Library_objects.rst | 4 ++-- doc/src/Library_scatter.rst | 13 ++++++++++--- doc/src/Library_utility.rst | 4 ++-- 6 files changed, 43 insertions(+), 35 deletions(-) diff --git a/doc/src/Library_add.rst b/doc/src/Library_add.rst index e58b6c2b73..ef91c98ab0 100644 --- a/doc/src/Library_add.rst +++ b/doc/src/Library_add.rst @@ -2,11 +2,11 @@ Adding code to the Library interface ==================================== The functionality of the LAMMPS library interface has historically -always been motivated by the needs of its users and functions were -added or expanded as they were needed and used. Contributions to -the interface are always welcome. However with a refactoring of -the library interface and its documentation that started in 2020, -there are now a few requirements for inclusion of changes. +been motivated by the needs of its users. Functions have been added +or expanded as they were needed and used. Contributions to the +interface are always welcome. However with a refactoring of the +library interface and its documentation that started in 2020, there +are now a few requirements for including new changes or extensions. - New functions should be orthogonal to existing ones and not implement functionality that can already be achieved with the @@ -17,17 +17,18 @@ there are now a few requirements for inclusion of changes. ``doc/src`` folder. - If possible, new unit tests to test those new features should be added. - - The new feature should also be implemented and documented for - the Python and Fortran modules. + - The new feature should also be implemented and documented not + just for the C interface, but also the Python and Fortran interfaces. - All additions should work and be compatible with ``-DLAMMPS_BIGBIG``, - ``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` and compiling + ``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` and when compiling with and without MPI support. - The ``library.h`` file should be kept compatible to C code at a level similar to C89. Its interfaces may not reference any - custom data types (e.g. ``bigint``, ``tagint``, and so on) only - known inside of LAMMPS. - - only C style comments, not C++ style + custom data types (e.g. ``bigint``, ``tagint``, and so on) that + are only known inside of LAMMPS. + - only use C style comments, not C++ style + +Please note that these are *not* *strict* requirements, but the LAMMPS +developers appreciate if they are followed and can assist with +implementing what is missing. -Please note, that these are *not* *strict* requirements, but the -LAMMPS developers appreciate if they are followed closely and will -assist with implementing what is missing. diff --git a/doc/src/Library_config.rst b/doc/src/Library_config.rst index 0c07896ff6..3389d52173 100644 --- a/doc/src/Library_config.rst +++ b/doc/src/Library_config.rst @@ -18,18 +18,18 @@ This section documents the following functions: -------------------- -The following library functions can be used to query the LAMMPS library -about compile time settings and included packages and styles. This -enables programs that use the library interface to run LAMMPS -simulations to determine, whether the linked LAMMPS library is compatible -with the requirements of the application without crashing during the -LAMMPS functions (e.g. due to missing pair styles from packages) or to -choose between different options (e.g. whether to use ``lj/cut``, -``lj/cut/opt``, ``lj/cut/omp`` or ``lj/cut/intel``). Most of the -functions can be called directly without first creating a LAMMPS -instance. While crashes within LAMMPS may be recovered from through -enabling :ref:`exceptions `, avoiding them proactively is -a safer approach. +These library functions can be used to query the LAMMPS library for +compile time settings and included packages and styles. This enables +programs that use the library interface to determine whether the +linked LAMMPS library is compatible with the requirements of the +application without crashing during the LAMMPS functions (e.g. due to +missing pair styles from packages) or to choose between different +options (e.g. whether to use ``lj/cut``, ``lj/cut/opt``, +``lj/cut/omp`` or ``lj/cut/intel``). Most of the functions can be +called directly without first creating a LAMMPS instance. While +crashes within LAMMPS may be recovered from by enabling +:ref:`exceptions `, avoiding them proactively is a safer +approach. .. code-block:: C :caption: Example for using configuration settings functions diff --git a/doc/src/Library_neighbor.rst b/doc/src/Library_neighbor.rst index 3179b669f1..f50d28b81e 100644 --- a/doc/src/Library_neighbor.rst +++ b/doc/src/Library_neighbor.rst @@ -1,8 +1,8 @@ Accessing LAMMPS Neighbor lists =============================== -The following functions allow to access neighbor lists -generated by LAMMPS or query their properties: +The following functions enable access to neighbor lists generated by +LAMMPS or querying of their properties: - :cpp:func:`lammps_find_compute_neighlist` - :cpp:func:`lammps_find_fix_neighlist` diff --git a/doc/src/Library_objects.rst b/doc/src/Library_objects.rst index 3b87842169..5ce03f84a3 100644 --- a/doc/src/Library_objects.rst +++ b/doc/src/Library_objects.rst @@ -1,8 +1,8 @@ Retrieving or setting properties of LAMMPS objects ================================================== -This section documents accessing or modifying data from objects like -computes, fixes, or variables in LAMMPS using following functions: +This section documents accessing or modifying data stored by computes, +fixes, or variables in LAMMPS using the following functions: - :cpp:func:`lammps_extract_compute` - :cpp:func:`lammps_extract_fix` diff --git a/doc/src/Library_scatter.rst b/doc/src/Library_scatter.rst index e3ca34e999..9594593172 100644 --- a/doc/src/Library_scatter.rst +++ b/doc/src/Library_scatter.rst @@ -1,7 +1,16 @@ Library functions for scatter/gather operations ================================================ -This section documents the following functions: +This section has functions which gather per-atom data from one or more +processors into a contiguous global list ordered by atom ID. The same +list is returned to all calling processors. It also contains +functions which scatter per-atom data from a contiguous global list +across the processors that own those atom IDs. It also has a +create_atoms() function which can create a new simulation by +scattering atms appropriately to owning processors in the LAMMPS +spatial decomposition. + +It documents the following functions: - :cpp:func:`lammps_gather_atoms` - :cpp:func:`lammps_gather_atoms_concat` @@ -14,8 +23,6 @@ This section documents the following functions: - :cpp:func:`lammps_scatter` - :cpp:func:`lammps_scatter_subset` -.. TODO add description - ----------------------- .. doxygenfunction:: lammps_gather_atoms diff --git a/doc/src/Library_utility.rst b/doc/src/Library_utility.rst index 3d2fae53d3..6cc3337d48 100644 --- a/doc/src/Library_utility.rst +++ b/doc/src/Library_utility.rst @@ -1,8 +1,8 @@ Library interface utility functions =================================== -To simplify some of the tasks, the library interface contains -some utility functions that are not directly calling LAMMPS: +To simplify some tasks, the library interface contains these utility +functions. They do not directly call the LAMMPS library. - :cpp:func:`lammps_encode_image_flags` - :cpp:func:`lammps_decode_image_flags` From 9dc42262ec20ad3e7133b3bb1365831b9f95084b Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 1 Oct 2020 11:34:27 -0600 Subject: [PATCH 03/34] one more edit --- doc/src/Library_scatter.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Library_scatter.rst b/doc/src/Library_scatter.rst index 9594593172..4fb02ec3e3 100644 --- a/doc/src/Library_scatter.rst +++ b/doc/src/Library_scatter.rst @@ -6,9 +6,9 @@ processors into a contiguous global list ordered by atom ID. The same list is returned to all calling processors. It also contains functions which scatter per-atom data from a contiguous global list across the processors that own those atom IDs. It also has a -create_atoms() function which can create a new simulation by -scattering atms appropriately to owning processors in the LAMMPS -spatial decomposition. +create_atoms() function which can create new atoms by scattering them +appropriately to owning processors in the LAMMPS spatial +decomposition. It documents the following functions: From 533c453a08a583a5c1d430ad692b95db9798a12b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Thu, 1 Oct 2020 15:00:08 -0400 Subject: [PATCH 04/34] Update Python docs --- doc/src/Python_install.rst | 78 +++++++++++++++++++++------------ doc/src/Python_overview.rst | 2 +- doc/src/Python_run.rst | 86 ++++++++++++++++++++++++++----------- 3 files changed, 112 insertions(+), 54 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index bff395ddba..ce0bfec346 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -35,10 +35,10 @@ Both CMake and traditional make build options offer ways to automate these tasks LAMMPS can be configured and compiled as shared library with CMake by enabling the ``BUILD_SHARED_LIBS`` option. The file name of the shared library depends on the platform (Unix/Linux, MacOS, Windows) and the build configuration - being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name is - determined. + being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name of the + shared library and executable is determined. - After compilation, the generated binaries, shared library, Python module, + After compilation, the generated executables, shared library, Python module, and other files can be installed to a custom location defined by the ``CMAKE_INSTALL_PREFIX`` setting. By default, this is set to the current user's ``$HOME/.local`` directory. This leads to an installation to the following locations: @@ -52,6 +52,8 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``$HOME/.local/lib/`` (32bit) | | | | * ``$HOME/.local/lib64/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | ``$HOME/.local/bin/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | LAMMPS potential files | ``$HOME/.local/share/lammps/potentials/`` | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ @@ -77,7 +79,7 @@ Both CMake and traditional make build options offer ways to automate these tasks # compile LAMMPS (in parallel for faster builds) cmake --build . --parallel - # install LAMMPS into myvenv + # install LAMMPS into $HOME/.local cmake --install . 2. Configure Environment Variables @@ -100,10 +102,16 @@ Both CMake and traditional make build options offer ways to automate these tasks containing its potential files. This can be set with the ``LAMMPS_POTENTIALS`` environment variable: - .. code-block:: + .. code-block:: bash export LAMMPS_POTENTIALS=$HOME/.local/share/lammps/potentials + If you are planning to also use the LAMMPS executable (e.g., ``lmp``), also set the ``PATH`` variable: + + .. code-block:: bash + + export PATH=$HOME/.local/bin:$PATH + To set these environment variables for each new shell, add the above ``export`` commands at the end of the ``$HOME/.bashrc`` file. @@ -144,6 +152,8 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``/usr/lib/`` (32bit) | | | | * ``/usr/lib64/`` (64bit) | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | ``/usr/bin/`` | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ | LAMMPS potential files | ``/usr/share/lammps/potentials/`` | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ @@ -170,10 +180,10 @@ Both CMake and traditional make build options offer ways to automate these tasks sudo cmake --install . Unlike the local user installation, no additional environment - variables need to be set. The system locations such as ``/usr/lib`` and + variables need to be set. The system locations such as ``/usr/lib``, and ``/usr/lib64`` are already part of the search path of the dynamic library - loader. Therefore ``LD_LIBRARY_PATH`` or ``DYLD_LIBRARY_PATH`` on MacOS do not - have be set. + loader. Therefore ``LD_LIBRARY_PATH`` (or ``DYLD_LIBRARY_PATH`` on MacOS) does not + have be set. The same is true for ``PATH``. All other environment variables will be automatically set when launching a new shell. This is due to files installed in system folders @@ -236,6 +246,8 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | ``$VIRTUAL_ENV/bin/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | LAMMPS potential files | ``$VIRTUAL_ENV/share/lammps/potentials/`` | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ @@ -337,7 +349,7 @@ Both CMake and traditional make build options offer ways to automate these tasks wrap LAMMPS. On Linux this is a library file that ends in ``.so``, not ``.a``. - From the src directory, type + From the ``src`` directory, type .. code-block:: bash @@ -375,7 +387,7 @@ Both CMake and traditional make build options offer ways to automate these tasks If you set the paths to these files as environment variables, you only have to do it once. For the csh or tcsh shells, add something like - this to your ~/.cshrc file, one line for each of the two files: + this to your ``~/.cshrc`` file, one line for each of the two files: .. code-block:: csh @@ -414,6 +426,8 @@ Both CMake and traditional make build options offer ways to automate these tasks environment variable as described above. +.. _python_install_mpi4py: + Extending Python to run in parallel =================================== @@ -431,7 +445,7 @@ and as of version 2.0.0 mpi4py allows passing a custom MPI communicator to the LAMMPS constructor, which means one can easily run one or more LAMMPS instances on subsets of the total MPI ranks. -To install mpi4py (version 3.0.3 as of Sep 2020), +Install mpi4py via ``pip`` (version 3.0.3 as of Sep 2020): .. tabs:: @@ -458,6 +472,23 @@ To install mpi4py (version 3.0.3 as of Sep 2020), For more detailed installation instructions, please see the `mpi4py installation `_ page. +.. note:: + + To use mpi4py and LAMMPS in parallel from Python, you must + insure both are using the same version of MPI. If you only have one + MPI installed on your system, this is not an issue, but it can be if + you have multiple MPIs. Your LAMMPS build is explicit about which MPI + it is using, since it is either detected during CMake configuration or + in the traditional make build system you specify the details in your + low-level ``src/MAKE/Makefile.foo`` file. + mpi4py uses the ``mpicc`` command to find + information about the MPI it uses to build against. And it tries to + load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find + the MPI library that LAMMPS is using. If you have problems running + both mpi4py and LAMMPS together, this is an issue you may need to + address, e.g. by moving other MPI installations so that mpi4py finds + the right one. + If you have successfully installed mpi4py, you should be able to run Python and type @@ -470,7 +501,7 @@ on a simple test script .. code-block:: bash - $ mpirun -np 4 python test.py + $ mpirun -np 4 python3 test.py where ``test.py`` contains the lines @@ -478,22 +509,15 @@ where ``test.py`` contains the lines from mpi4py import MPI comm = MPI.COMM_WORLD - print "Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size()) + print("Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size())) and see one line of output for each processor you run on. -.. note:: - - To use mpi4py and LAMMPS in parallel from Python, you must - insure both are using the same version of MPI. If you only have one - MPI installed on your system, this is not an issue, but it can be if - you have multiple MPIs. Your LAMMPS build is explicit about which MPI - it is using, since you specify the details in your low-level - src/MAKE/Makefile.foo file. mpi4py uses the "mpicc" command to find - information about the MPI it uses to build against. And it tries to - load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find - the MPI library that LAMMPS is using. If you have problems running - both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by moving other MPI installations so that mpi4py finds - the right one. +.. code-block:: bash + # NOTE: the line order is not deterministic + $ mpirun -np 4 python3 test.py + Proc 0 out of 4 procs + Proc 1 out of 4 procs + Proc 2 out of 4 procs + Proc 3 out of 4 procs diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index b39d841979..e9aba544f9 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -46,7 +46,7 @@ launch one or more simulations. In Python lingo, this is called Second, the lower-level Python interface can be used indirectly through -the provided :code`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. +the provided :code:`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. These wrappers try to simplify the usage of LAMMPS in Python by providing an object-based interface to common LAMMPS functionality. They also reduces the amount of code necessary to parameterize LAMMPS diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index ba8cf77c12..726705e30e 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -5,9 +5,9 @@ Running LAMMPS and Python in serial: ------------------------------------- To run a LAMMPS in serial, type these lines into Python -interactively from the bench directory: +interactively from the ``bench`` directory: -.. parsed-literal:: +.. code-block:: python >>> from lammps import lammps >>> lmp = lammps() @@ -17,35 +17,22 @@ Or put the same lines in the file ``test.py`` and run it as .. code-block:: bash - % python test.py + $ python3 test.py Either way, you should see the results of running the ``in.lj`` benchmark on a single processor appear on the screen, the same as if you had typed something like: -.. parsed-literal:: +.. code-block:: bash lmp_serial -in in.lj -Test LAMMPS and Python in parallel: ---------------------------------------- - -To run LAMMPS in parallel, assuming you have installed the -`PyPar `_ package as discussed -above, create a ``test.py`` file containing these lines: - -.. code-block:: python - - import pypar - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp - pypar.finalize() +Running LAMMPS and Python in parallel with MPI (mpi4py) +------------------------------------------------------- To run LAMMPS in parallel, assuming you have installed the `mpi4py `_ package as discussed -above, create a ``test.py`` file containing these lines: +:ref:`python_install_mpi4py`, create a ``test.py`` file containing these lines: .. code-block:: python @@ -55,14 +42,61 @@ above, create a ``test.py`` file containing these lines: lmp.file("in.lj") me = MPI.COMM_WORLD.Get_rank() nprocs = MPI.COMM_WORLD.Get_size() - print "Proc %d out of %d procs has" % (me,nprocs),lmp + print("Proc %d out of %d procs has" % (me,nprocs),lmp) MPI.Finalize() -You can run either script in parallel as: +You can run the script in parallel as: .. code-block:: bash - $ mpirun -np 4 python test.py + $ mpirun -np 4 python3 test.py + +and you should see the same output as if you had typed + +.. code-block:: bash + + $ mpirun -np 4 lmp_mpi -in in.lj + +Note that without the mpi4py specific lines from ``test.py`` + +.. code-block:: + + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + +running the script with ``mpirun`` on :math:`P` processors would lead to +:math:`P` independent simulations to run parallel, each with a single +processor. Therefore, if you use the mpi4py lines and you see multiple LAMMPS +single processor outputs. that means mpi4py isn't working correctly. + +Also note that once you import the mpi4py module, mpi4py initializes MPI +for you, and you can use MPI calls directly in your Python script, as +described in the mpi4py documentation. The last line of your Python +script should be ``MPI.finalize()``, to insure MPI is shut down +correctly. + +Running LAMMPS and Python in parallel with MPI (pypar) +------------------------------------------------------ + +To run LAMMPS in parallel, assuming you have installed the +`PyPar `_ package as discussed +in :ref:`python_install_mpi4py`, create a ``test.py`` file containing these lines: + +.. code-block:: python + + import pypar + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + print("Proc %d out of %d procs has" % (pypar.rank(),pypar.size()), lmp) + pypar.finalize() + +You can run the script in parallel as: + +.. code-block:: bash + + $ mpirun -np 4 python3 test.py and you should see the same output as if you had typed @@ -72,7 +106,7 @@ and you should see the same output as if you had typed Note that if you leave out the 3 lines from ``test.py`` that specify PyPar commands you will instantiate and run LAMMPS independently on each of -the :math:`P` processors specified in the mpirun command. In this case you +the :math:`P` processors specified in the ``mpirun`` command. In this case you should get 4 sets of output, each showing that a LAMMPS run was made on a single processor, instead of one set of output showing that LAMMPS ran on 4 processors. If the 1-processor outputs occur, it @@ -84,8 +118,8 @@ described in the PyPar documentation. The last line of your Python script should be ``pypar.finalize()``, to insure MPI is shut down correctly. -Running Python scripts: ---------------------------- +Running Python scripts +---------------------- Note that any Python script (not just for LAMMPS) can be invoked in one of several ways: From c5fc3f2c78afb043dc45add4e154da774781c26a Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Thu, 1 Oct 2020 18:01:07 -0400 Subject: [PATCH 05/34] Update Python_usage.rst --- doc/src/Python_usage.rst | 246 ++++++++++++++++++++------------------- 1 file changed, 127 insertions(+), 119 deletions(-) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index 40705d33df..ebf28b5c35 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -7,8 +7,8 @@ Creating or deleting a LAMMPS object With the Python interface the creation of a :cpp:class:`LAMMPS ` instance is included in the constructors for the -:py:meth:`lammps `, :py:meth:`PyLammps `, -and :py:meth:`PyLammps ` classes. +:py:class:`lammps `, :py:class:`PyLammps `, +and :py:class:`IPyLammps ` classes. Internally it will call either :cpp:func:`lammps_open` or :cpp:func:`lammps_open_no_mpi` from the C library API to create the class instance. @@ -38,19 +38,22 @@ Here are simple examples using all three Python interfaces: # NOTE: argv[0] is set by the lammps class constructor args = ["-log", "none"] + # create LAMMPS instance lmp = lammps(cmdargs=args) + # get and print numerical version code print("LAMMPS Version: ", lmp.version()) + # explicitly close and delete LAMMPS instance (optional) lmp.close() .. tab:: PyLammps API - The :py:class:`PyLammps` class is a wrapper around the - :py:class:`lammps` class and all of its lower level functions. - By default, it will create a new instance of :py:class:`lammps` passing - along all arguments to the constructor of :py:class:`lammps`. + The :py:class:`PyLammps ` class is a wrapper around the + :py:class:`lammps ` class and all of its lower level functions. + By default, it will create a new instance of :py:class:`lammps ` passing + along all arguments to the constructor of :py:class:`lammps `. .. code-block:: python @@ -58,14 +61,18 @@ Here are simple examples using all three Python interfaces: # NOTE: argv[0] is set by the lammps class constructor args = ["-log", "none"] + # create LAMMPS instance L = PyLammps(cmdargs=args) + # get and print numerical version code print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) L.close() - :py:class:`PyLammps` objects can also be created on top of an existing :py:class:`lammps` object: + :py:class:`PyLammps ` objects can also be created on top of an existing + :py:class:`lammps ` object: .. code-block:: Python @@ -73,6 +80,7 @@ Here are simple examples using all three Python interfaces: ... # create LAMMPS instance lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance L = PyLammps(ptr=lmp) @@ -82,8 +90,8 @@ Here are simple examples using all three Python interfaces: .. tab:: IPyLammps API - The :py:class:`IPyLammps` class is an extension of the - :py:class:`PyLammps` class. It has the same construction behavior. By + The :py:class:`IPyLammps ` class is an extension of the + :py:class:`PyLammps ` class. It has the same construction behavior. By default, it will create a new instance of :py:class:`lammps` passing along all arguments to the constructor of :py:class:`lammps`. @@ -93,10 +101,13 @@ Here are simple examples using all three Python interfaces: # NOTE: argv[0] is set by the lammps class constructor args = ["-log", "none"] + # create LAMMPS instance L = IPyLammps(cmdargs=args) + # get and print numerical version code print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) L.close() @@ -108,6 +119,7 @@ Here are simple examples using all three Python interfaces: ... # create LAMMPS instance lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance L = PyLammps(ptr=lmp) @@ -117,53 +129,13 @@ Here are simple examples using all three Python interfaces: In all of the above cases, same as with the :ref:`C library API `, this will use the ``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was -compiled with. The :py:func:`lmp.close() ` call is +compiled with. + +The :py:func:`lmp.close() ` call is optional since the LAMMPS class instance will also be deleted automatically during the :py:class:`lammps ` class destructor. -.. code-block:: Python - - lmp = lammps() # create a LAMMPS object using the default liblammps.so library - # 4 optional args are allowed: name, cmdargs, ptr, comm - lmp = lammps(ptr=lmpptr) # use lmpptr as previously created LAMMPS object - lmp = lammps(comm=split) # create a LAMMPS object with a custom communicator, requires mpi4py 2.0.0 or later - lmp = lammps(name="g++") # create a LAMMPS object using the liblammps_g++.so library - lmp = lammps(name="g++",cmdargs=list) # add LAMMPS command-line args, e.g. list = ["-echo","screen"] - - lmp.close() # destroy a LAMMPS object - -The lines - -.. code-block:: Python - - from lammps import lammps - lmp = lammps() - -create an instance of LAMMPS, wrapped in a Python class by the lammps -Python module, and return an instance of the Python class as lmp. It -is used to make all subsequent calls to the LAMMPS library. - -Additional arguments to lammps() can be used to tell Python the name -of the shared library to load or to pass arguments to the LAMMPS -instance, the same as if LAMMPS were launched from a command-line -prompt. - -If the ptr argument is set like this: - -.. code-block:: Python - - lmp = lammps(ptr=lmpptr) - -then lmpptr must be an argument passed to Python via the LAMMPS -:doc:`python ` command, when it is used to define a Python -function that is invoked by the LAMMPS input script. This mode of -calling Python from LAMMPS is described in the :doc:`Python call ` doc page. The variable lmpptr refers to the -instance of LAMMPS that called the embedded Python interpreter. Using -it as an argument to lammps() allows the returned Python class -instance "lmp" to make calls to that instance of LAMMPS. See the -:doc:`python ` command doc page for examples using this syntax. - Note that you can create multiple LAMMPS objects in your Python script, and coordinate and run multiple simulations, e.g. @@ -178,12 +150,13 @@ script, and coordinate and run multiple simulations, e.g. Executing LAMMPS commands ************************* -Once an instance of the :py:class:`lammps`, :py:class:`PyLammps`, or -:py:class:`IPyLammps` class is created, there are multiple ways to "feed" it -commands. In a way that is not very different from running a LAMMPS input -script, except that Python has many more facilities for structured -programming than the LAMMPS input script syntax. Furthermore it is possible -to "compute" what the next LAMMPS command should be. +Once an instance of the :py:class:`lammps `, +:py:class:`PyLammps `, or +:py:class:`IPyLammps ` class is created, there are +multiple ways to "feed" it commands. In a way that is not very different from +running a LAMMPS input script, except that Python has many more facilities +for structured programming than the LAMMPS input script syntax. Furthermore +it is possible to "compute" what the next LAMMPS command should be. .. tabs:: @@ -194,20 +167,24 @@ to "compute" what the next LAMMPS command should be. single string, a list of strings and a block of commands in a single multi-line string. They are processed under the same boundary conditions as the C library counterparts. The example below demonstrates the use - of :py:func:`lammps.file`, :py:func:`lammps.command`, - :py:func:`lammps.commands_list`, and :py:func:`lammps.commands_string`: + of :py:func:`lammps.file()`, :py:func:`lammps.command()`, + :py:func:`lammps.commands_list()`, and :py:func:`lammps.commands_string()`: .. code-block:: python from lammps import lammps lmp = lammps() + # read commands from file 'in.melt' lmp.file('in.melt') + # issue a single command lmp.command('variable zpos index 1.0') + # create 10 groups with 10 atoms each cmds = ["group g{} id {}:{}".format(i,10*i+1,10*(i+1)) for i in range(10)] lmp.commands_list(cmds) + # run commands from a multi-line string block = """ clear @@ -220,7 +197,8 @@ to "compute" what the next LAMMPS command should be. .. tab:: PyLammps/IPyLammps API Unlike the lammps API, the PyLammps/IPyLammps APIs allow running LAMMPS - commands by calling equivalent member functions. + commands by calling equivalent member functions of :py:class:`PyLammps ` + and :py:class:`IPyLammps ` instances. For instance, the following LAMMPS command @@ -228,7 +206,8 @@ to "compute" what the next LAMMPS command should be. region box block 0 10 0 5 -0.5 0.5 - can be executed using the following Python code if *L* is a :py:class:`lammps` instance: + can be executed using with the lammps AI with the following Python code if *L* is an + instance of :py:class:`lammps `: .. code-block:: Python @@ -236,7 +215,7 @@ to "compute" what the next LAMMPS command should be. With the PyLammps interface, any LAMMPS command can be split up into arbitrary parts. These parts are then passed to a member function with the name of the command. - For the ``region`` command that means the :code:`region` method can be called. + For the ``region`` command that means the :code:`region()` method can be called. The arguments of the command can be passed as one string, or individually. @@ -269,10 +248,13 @@ to "compute" what the next LAMMPS command should be. from lammps import PyLammps L = PyLammps() + # read commands from file 'in.melt' L.file('in.melt') + # issue a single command L.variable('zpos', 'index', 1.0) + # create 10 groups with 10 atoms each for i in range(10): L.group(f"g{i}", "id", f"{10*i+1}:{10*(i+1)}") @@ -283,76 +265,102 @@ to "compute" what the next LAMMPS command should be. L.create_atoms(1, "single", 1.0, 1.0, "${zpos}") -.. code-block:: Python - - lmp.file(file) # run an entire input script, file = "in.lj" - lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100" - lmp.commands_list(cmdlist) # invoke commands in cmdlist = **"run 10", "run 20"** - lmp.commands_string(multicmd) # invoke commands in multicmd = "run 10\nrun 20" - -The file(), command(), commands_list(), commands_string() methods -allow an input script, a single command, or multiple commands to be -invoked. - - Retrieving or setting LAMMPS system properties ********************************************** -.. code-block:: Python +Similar to what is described in :doc:`Library_properties`, the instances of +:py:class:`lammps `, :py:class:`PyLammps `, or +:py:class:`IPyLammps ` can be used to extract different kinds +of information about the active LAMMPS instance and also to modify some of it. The +main difference between the interfaces is how the information is exposed. - version = lmp.version() # return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 +While the :py:class:`lammps ` is just a thin layer that wraps C API calls, +:py:class:`PyLammps ` and :py:class:`IPyLammps ` expose +information as objects and properties. - size = lmp.extract_setting(name) # return data type info +In some cases the data returned is a direct reference to the original data +inside LAMMPS cast to ``ctypes`` pointers. Where possible, the wrappers will +determine the ``ctypes`` data type and cast pointers accordingly. If +``numpy`` is installed arrays can also be extracted as numpy arrays, which +will access the C arrays directly and have the correct dimensions to protect +against invalid accesses. - xlo = lmp.extract_global(name,type) # extract a global quantity - # name = "boxxlo", "nlocal", etc - # type = 0 = int - # 1 = double +.. warning:: - boxlo,boxhi,xy,yz,xz,periodicity,box_change = lmp.extract_box() # extract box info + When accessing per-atom data, + please note that this data is the per-processor local data and indexed + accordingly. These arrays can change sizes and order at every neighbor list + rebuild and atom sort event as atoms are migrating between sub-domains. + +.. tabs:: + + .. tab:: lammps API + + .. code-block:: python + + from lammps import lammps + + lmp = lammps() + lmp.file("in.sysinit") + + natoms = lmp.get_natoms() + print(f"running simulation with {natoms} atoms") + + lmp.command("run 1000 post no"); + + for i in range(10): + lmp.command("run 100 pre no post no") + pe = lmp.get_thermo("pe") + ke = lmp.get_thermo("ke") + print(f"PE = {pe}\nKE = {ke}") + + lmp.close() + + Methods: + + * :py:meth:`get_version() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 + * :py:meth:`get_thermo() `: return current value of a thermo keyword + * :py:meth:`get_natoms() `: total # of atoms as int + * :py:meth:`reset_box() `: reset the simulation box size + * :py:meth:`extract_setting() `: return a global setting + * :py:meth:`extract_global() `: extract a global quantity + * :py:meth:`extract_atom() `: extract a per-atom quantity + * :py:meth:`extract_box() `: extract box info + * :py:meth:`create_atoms() `: create N atoms with IDs, types, x, v, and image flags + + Numpy Methods: + + * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array + + .. tab:: PyLammps/IPyLammps API + + .. code-block:: python + + from lammps import PyLammps + + L = PyLammps() + L.file("in.sysinit") + + print(f"running simulation with {L.system.natoms} atoms") + + L.run(1000, "post no"); + + for i in range(10): + L.run(100, "pre no post no") + pe = L.eval("pe") + ke = L.eval("ke") + print(f"PE = {pe}\nKE = {ke}") - value = lmp.get_thermo(name) # return current value of a thermo keyword - natoms = lmp.get_natoms() # total # of atoms as int - - lmp.reset_box(boxlo,boxhi,xy,yz,xz) # reset the simulation box size - - lmp.create_atoms(n,ids,types,x,v,image,shrinkexceed) # create N atoms with IDs, types, x, v, and image flags - - -The :py:meth:`get_thermo() ` method returns the current value of a thermo -keyword as a float. - -The get_natoms() method returns the total number of atoms in the -simulation, as an int. - - -The reset_box() method resets the size and shape of the simulation -box, e.g. as part of restoring a previously extracted and saved state -of a simulation. - - -The extract_setting(), extract_global(), extract_box(), -extract_atom(), extract_compute(), extract_fix(), and -extract_variable() methods return values or pointers to data -structures internal to LAMMPS. - -For extract_global() see the src/library.cpp file for the list of -valid names. New names could easily be added. A double or integer is -returned. You need to specify the appropriate data type via the type -argument. Retrieving or setting properties of LAMMPS objects ************************************************** -.. code-block:: Python +* :py:meth:`extract_compute() ` +* :py:meth:`extract_fix() ` +* :py:meth:`extract_variable() ` - coords = lmp.extract_atom(name,type) # extract a per-atom quantity - # name = "x", "type", etc - # type = 0 = vector of ints - # 1 = array of ints - # 2 = vector of doubles - # 3 = array of doubles +.. code-block:: Python eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix From 1f417f8eb4d4e5ca6d5d00bb247be6e13833bd62 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Oct 2020 00:28:13 -0400 Subject: [PATCH 06/34] mention Fortran interface in examples/COUPLE/fortran2 now that it is up-to-date again --- doc/src/Fortran.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/src/Fortran.rst b/doc/src/Fortran.rst index 50738330d2..6197d2ffd2 100644 --- a/doc/src/Fortran.rst +++ b/doc/src/Fortran.rst @@ -33,6 +33,13 @@ Fortran code using the interface. cover the entire range of functionality available in the C and Python library interfaces. +.. note:: + + A contributed (and complete!) Fortran interface is available + in the ``examples/COUPLE/fortran2`` folder. Please see the + README file in that folder for more information about that + Fortran interface and how to contact its author and maintainer. + ---------- Creating or deleting a LAMMPS object From 52c6353f868cc5c116232f89f411844dc0559e74 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 15:09:29 -0400 Subject: [PATCH 07/34] Fix typo --- src/library.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library.cpp b/src/library.cpp index da9ece326e..06c5a632d4 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4454,7 +4454,7 @@ the failing MPI ranks to send messages. * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. * \param buffer string buffer to copy the error message to * \param buf_size size of the provided string buffer - * \return 1 when all ranks had the error, 1 on a single rank error. + * \return 1 when all ranks had the error, 2 on a single rank error. */ int lammps_get_last_error_message(void *handle, char *buffer, int buf_size) { #ifdef LAMMPS_EXCEPTIONS From b57c8f6b7781feeb82bfd1f9570b89d688f3b9f2 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 16:53:41 -0400 Subject: [PATCH 08/34] Add tests for LAMMPS exceptions in Python --- unittest/python/python-open.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/unittest/python/python-open.py b/unittest/python/python-open.py index 6ad7d335d5..6153e032e3 100644 --- a/unittest/python/python-open.py +++ b/unittest/python/python-open.py @@ -18,6 +18,7 @@ try: machine = "" lmp = lammps(name=machine) has_mpi = lmp.has_mpi_support + has_exceptions = lmp.has_exceptions lmp.close() except: pass @@ -57,5 +58,32 @@ class PythonOpen(unittest.TestCase): self.assertEqual(lmp.opened,1) lmp.close() + @unittest.skipIf(not has_exceptions,"Skipping death test since LAMMPS isn't compiled with exception support") + def testUnknownCommand(self): + lmp = lammps(name=self.machine) + + with self.assertRaisesRegex(Exception, "ERROR: Unknown command: write_paper"): + lmp.command("write_paper") + + lmp.close() + + @unittest.skipIf(not has_exceptions,"Skipping death test since LAMMPS isn't compiled with exception support") + def testUnknownCommandInList(self): + lmp = lammps(name=self.machine) + + with self.assertRaisesRegex(Exception, "ERROR: Unknown command: write_paper"): + lmp.commands_list(["write_paper"]) + + lmp.close() + + @unittest.skipIf(not has_exceptions,"Skipping death test since LAMMPS isn't compiled with exception support") + def testUnknownCommandInList(self): + lmp = lammps(name=self.machine) + + with self.assertRaisesRegex(Exception, "ERROR: Unknown command: write_paper"): + lmp.commands_string("write_paper") + + lmp.close() + if __name__ == "__main__": unittest.main() From 60891fe6f998ffd09b36f8ef7854607989c670e3 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:19:04 -0400 Subject: [PATCH 09/34] Add Python_config.rst --- doc/src/Python_config.rst | 13 +++++++++++++ doc/src/Python_head.rst | 1 + 2 files changed, 14 insertions(+) create mode 100644 doc/src/Python_config.rst diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst new file mode 100644 index 0000000000..62bd52900f --- /dev/null +++ b/doc/src/Python_config.rst @@ -0,0 +1,13 @@ +Retrieving LAMMPS configuration information +******************************************* + +* :py:attr:`has_mpi_support ` +* :py:attr:`has_exceptions ` +* :py:attr:`has_gzip_support ` +* :py:attr:`has_png_support ` +* :py:attr:`has_jpeg_support ` +* :py:attr:`has_ffmpeg_support ` +* :py:attr:`installed_packages ` + +* :py:meth:`lammps.has_style() ` +* :py:meth:`lammps.available_styles() Date: Fri, 2 Oct 2020 17:19:51 -0400 Subject: [PATCH 10/34] Update Python_usage.rst --- doc/src/Python_usage.rst | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index ebf28b5c35..13c3b31cad 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -356,9 +356,10 @@ against invalid accesses. Retrieving or setting properties of LAMMPS objects ************************************************** -* :py:meth:`extract_compute() ` -* :py:meth:`extract_fix() ` -* :py:meth:`extract_variable() ` +* :py:meth:`extract_compute() `: extract value(s) from a compute +* :py:meth:`extract_fix() `: extract value(s) from a fix +* :py:meth:`extract_variable() `: extract value(s) from a variable +* :py:meth:`set_variable() `: set existing named string-style variable to value .. code-block:: Python @@ -381,14 +382,6 @@ Retrieving or setting properties of LAMMPS objects flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful -For extract_atom(), a pointer to internal LAMMPS atom-based data is -returned, which you can use via normal Python subscripting. See the -extract() method in the src/atom.cpp file for a list of valid names. -Again, new names could easily be added if the property you want is not -listed. A pointer to a vector of doubles or integers, or a pointer to -an array of doubles (double \*\*) or integers (int \*\*) is returned. You -need to specify the appropriate data type via the type argument. - For extract_compute() and extract_fix(), the global, per-atom, or local data calculated by the compute or fix can be accessed. What is returned depends on whether the compute or fix calculates a scalar or @@ -405,7 +398,8 @@ data types. See the doc pages for individual :doc:`computes ` and :doc:`fixes ` for a description of what they calculate and store. -For extract_variable(), an :doc:`equal-style or atom-style variable ` is evaluated and its result returned. +For extract_variable(), an :doc:`equal-style or atom-style variable ` +is evaluated and its result returned. For equal-style variables a single double value is returned and the group argument is ignored. For atom-style variables, a vector of @@ -464,10 +458,10 @@ like this: .. code-block:: Python - from ctypes import \* + from ctypes import * natoms = lmp.get_natoms() - n3 = 3\*natoms - x = (n3\*c_double)() + n3 = 3*natoms + x = (n3*c_double)() x[0] = x coord of atom with ID 1 x[1] = y coord of atom with ID 1 x[2] = z coord of atom with ID 1 From d9cbb354d2f6b63dc654a6014512f536b8d69354 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:22:01 -0400 Subject: [PATCH 11/34] Move lammps exception code into its own property --- python/lammps.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index 6f9cf5031d..1ca1b601f1 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -699,6 +699,18 @@ class lammps(object): # ------------------------------------------------------------------------- + @property + def _lammps_exception(self): + sb = create_string_buffer(100) + error_type = self.lib.lammps_get_last_error_message(self.lmp, sb, 100) + error_msg = sb.value.decode().strip() + + if error_type == 2: + return MPIAbortException(error_msg) + return Exception(error_msg) + + # ------------------------------------------------------------------------- + def file(self, path): """Read LAMMPS commands from a file. @@ -729,13 +741,7 @@ class lammps(object): self.lib.lammps_command(self.lmp,cmd) if self.has_exceptions and self.lib.lammps_has_error(self.lmp): - sb = create_string_buffer(100) - error_type = self.lib.lammps_get_last_error_message(self.lmp, sb, 100) - error_msg = sb.value.decode().strip() - - if error_type == 2: - raise MPIAbortException(error_msg) - raise Exception(error_msg) + raise self._lammps_exception # ------------------------------------------------------------------------- From 735597781914db9144dd4aa560edd652ba88699e Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:26:14 -0400 Subject: [PATCH 12/34] Add missing exception handling for functions that could cause errors --- python/lammps.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/python/lammps.py b/python/lammps.py index 1ca1b601f1..9f5900a6f1 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -725,6 +725,9 @@ class lammps(object): else: return self.lib.lammps_file(self.lmp, path) + if self.has_exceptions and self.lib.lammps_has_error(self.lmp): + raise self._lammps_exception + # ------------------------------------------------------------------------- def command(self,cmd): @@ -761,6 +764,9 @@ class lammps(object): self.lib.lammps_commands_list.argtypes = [c_void_p, c_int, c_char_p * narg] self.lib.lammps_commands_list(self.lmp,narg,args) + if self.has_exceptions and self.lib.lammps_has_error(self.lmp): + raise self._lammps_exception + # ------------------------------------------------------------------------- def commands_string(self,multicmd): @@ -776,6 +782,9 @@ class lammps(object): if type(multicmd) is str: multicmd = multicmd.encode() self.lib.lammps_commands_string(self.lmp,c_char_p(multicmd)) + if self.has_exceptions and self.lib.lammps_has_error(self.lmp): + raise self._lammps_exception + # ------------------------------------------------------------------------- def get_natoms(self): From 0089a35d95db5b9d242a0b0c48ac709e7f99f79b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:27:08 -0400 Subject: [PATCH 13/34] Remove dead code --- python/lammps.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index 9f5900a6f1..129f5eeb99 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -1706,13 +1706,6 @@ class lammps(object): def set_fix_external_callback(self, fix_name, callback, caller=None): import numpy as np - def _ctype_to_numpy_int(ctype_int): - if ctype_int == c_int32: - return np.int32 - elif ctype_int == c_int64: - return np.int64 - return np.intc - def callback_wrapper(caller, ntimestep, nlocal, tag_ptr, x_ptr, fext_ptr): tag = self.numpy.iarray(self.c_tagint, tag_ptr, nlocal, 1) x = self.numpy.darray(x_ptr, nlocal, 3) From d91d8de76d71ab87c9bacaf33e12b5635802fb24 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:28:25 -0400 Subject: [PATCH 14/34] Refactor LammpsNumpyWrapper to numpy_wrapper LammpsNumpyWrapper was a class that was defined inside of the lammps.numpy property when it was first accessed. This made it hard to document the methods of this class. This commit extracts this utility class into the lammps module and renames it to 'numpy_wrapper'. --- doc/src/Python_module.rst | 3 + python/lammps.py | 376 ++++++++++++++++++++------------------ 2 files changed, 205 insertions(+), 174 deletions(-) diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index 9fb634f05a..64ff7b53f7 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -44,6 +44,9 @@ functions. Below is a detailed documentation of the API. .. autoclass:: lammps.lammps :members: +.. autoclass:: lammps.numpy_wrapper + :members: + ---------- The ``PyLammps`` class API diff --git a/python/lammps.py b/python/lammps.py index 129f5eeb99..000867805d 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -465,181 +465,17 @@ class lammps(object): @property def numpy(self): - "Convert between ctypes arrays and numpy arrays" + """ Return object to access numpy versions of API + + It provides alternative implementations of API functions that + return numpy arrays instead of ctypes pointers. If numpy is not installed, + accessing this property will lead to an ImportError. + + :return: instance of numpy wrapper object + :rtype: numpy_wrapper + """ if not self._numpy: - import numpy as np - class LammpsNumpyWrapper: - def __init__(self, lmp): - self.lmp = lmp - - def _ctype_to_numpy_int(self, ctype_int): - if ctype_int == c_int32: - return np.int32 - elif ctype_int == c_int64: - return np.int64 - return np.intc - - def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): - """Retrieve per-atom properties from LAMMPS as NumPy arrays - - This is a wrapper around the :cpp:func:`lammps_extract_atom` - function of the C-library interface. Its documentation includes a - list of the supported keywords and their data types. - Since Python needs to know the data type to be able to interpret - the result, by default, this function will try to auto-detect the data - type by asking the library. You can also force a specific data type. - For that purpose the :py:mod:`lammps` module contains the constants - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, - ``LAMMPS_DOUBLE_2D``, ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and - ``LAMMPS_STRING``. - This function returns ``None`` if either the keyword is not - recognized, or an invalid data type constant is used. - - .. note:: - - While the returned arrays of per-atom data are dimensioned - for the range [0:nmax] - as is the underlying storage - - the data is usually only valid for the range of [0:nlocal], - unless the property of interest is also updated for ghost - atoms. In some cases, this depends on a LAMMPS setting, see - for example :doc:`comm_modify vel yes `. - - :param name: name of the property - :type name: string - :param dtype: type of the returned data (see :ref:`py_data_constants`) - :type dtype: int, optional - :param nelem: number of elements in array - :type nelem: int, optional - :param dim: dimension of each element - :type dim: int, optional - :return: requested data as NumPy array with direct access to C data - :rtype: numpy.array - """ - if dtype == LAMMPS_AUTODETECT: - dtype = self.lmp.extract_atom_datatype(name) - - if nelem == LAMMPS_AUTODETECT: - if name == "mass": - nelem = self.lmp.extract_global("ntypes") + 1 - else: - nelem = self.lmp.extract_global("nlocal") - if dim == LAMMPS_AUTODETECT: - if dtype in (LAMMPS_INT_2D, LAMMPS_DOUBLE_2D, LAMMPS_INT64_2D): - # TODO add other fields - if name in ("x", "v", "f", "angmom", "torque", "csforce", "vforce"): - dim = 3 - else: - dim = 2 - else: - dim = 1 - - raw_ptr = self.lmp.extract_atom(name, dtype) - - if dtype in (LAMMPS_DOUBLE, LAMMPS_DOUBLE_2D): - return self.darray(raw_ptr, nelem, dim) - elif dtype in (LAMMPS_INT, LAMMPS_INT_2D): - return self.iarray(c_int32, raw_ptr, nelem, dim) - elif dtype in (LAMMPS_INT64, LAMMPS_INT64_2D): - return self.iarray(c_int64, raw_ptr, nelem, dim) - return raw_ptr - - def extract_atom_iarray(self, name, nelem, dim=1): - warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) - - if name in ['id', 'molecule']: - c_int_type = self.lmp.c_tagint - elif name in ['image']: - c_int_type = self.lmp.c_imageint - else: - c_int_type = c_int - - if dim == 1: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT) - else: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT_2D) - - return self.iarray(c_int_type, raw_ptr, nelem, dim) - - def extract_atom_darray(self, name, nelem, dim=1): - warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) - - if dim == 1: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE) - else: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE_2D) - - return self.darray(raw_ptr, nelem, dim) - - def extract_compute(self, cid, style, datatype): - value = self.lmp.extract_compute(cid, style, datatype) - - if style in (LMP_STYLE_GLOBAL, LMP_STYLE_LOCAL): - if datatype == LMP_TYPE_VECTOR: - nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_VECTOR) - return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: - nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_ROWS) - ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) - return self.darray(value, nrows, ncols) - elif style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) - return self.darray(value, nlocal, ncols) - return value - - def extract_fix(self, fid, style, datatype, nrow=0, ncol=0): - value = self.lmp.extract_fix(fid, style, datatype, nrow, ncol) - if style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) - return self.darray(value, nlocal, ncols) - elif style == LMP_STYLE_LOCAL: - if datatype == LMP_TYPE_VECTOR: - nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) - return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: - nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) - ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) - return self.darray(value, nrows, ncols) - return value - - def extract_variable(self, name, group=None, datatype=LMP_VAR_EQUAL): - value = self.lmp.extract_variable(name, group, datatype) - if datatype == LMP_VAR_ATOM: - return np.ctypeslib.as_array(value) - return value - - def iarray(self, c_int_type, raw_ptr, nelem, dim=1): - np_int_type = self._ctype_to_numpy_int(c_int_type) - - if dim == 1: - ptr = cast(raw_ptr, POINTER(c_int_type * nelem)) - else: - ptr = cast(raw_ptr[0], POINTER(c_int_type * nelem * dim)) - - a = np.frombuffer(ptr.contents, dtype=np_int_type) - a.shape = (nelem, dim) - return a - - def darray(self, raw_ptr, nelem, dim=1): - if dim == 1: - ptr = cast(raw_ptr, POINTER(c_double * nelem)) - else: - ptr = cast(raw_ptr[0], POINTER(c_double * nelem * dim)) - - a = np.frombuffer(ptr.contents) - a.shape = (nelem, dim) - return a - - self._numpy = LammpsNumpyWrapper(self) + self._numpy = numpy_wrapper(self) return self._numpy # ------------------------------------------------------------------------- @@ -1825,6 +1661,198 @@ class lammps(object): neighbors = self.numpy.iarray(c_int, c_neighbors, c_numneigh.value, 1) return c_iatom.value, c_numneigh.value, neighbors +# ------------------------------------------------------------------------- + +class numpy_wrapper: + """lammps API NumPy Wrapper + + This is a wrapper class that provides additional methods on top of an + existing :py:class:`lammps` instance. The methods transform raw ctypes + pointers into NumPy arrays, which give direct access to the + original data while protecting against out-of-bounds accesses. + + There is no need to explicitly instantiate this class. Each instance + of :py:class:`lammps` has a :py:attr:`numpy ` property + that returns an instance. + + :param lmp: instance of the :py:class:`lammps` class + :type lmp: lammps + """ + def __init__(self, lmp): + self.lmp = lmp + + def _ctype_to_numpy_int(self, ctype_int): + import numpy as np + if ctype_int == c_int32: + return np.int32 + elif ctype_int == c_int64: + return np.int64 + return np.intc + + def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): + """Retrieve per-atom properties from LAMMPS as NumPy arrays + + This is a wrapper around the :cpp:func:`lammps_extract_atom` + function of the C-library interface. Its documentation includes a + list of the supported keywords and their data types. + Since Python needs to know the data type to be able to interpret + the result, by default, this function will try to auto-detect the data + type by asking the library. You can also force a specific data type. + For that purpose the :py:mod:`lammps` module contains the constants + ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, + ``LAMMPS_DOUBLE_2D``, ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and + ``LAMMPS_STRING``. + This function returns ``None`` if either the keyword is not + recognized, or an invalid data type constant is used. + + .. note:: + + While the returned arrays of per-atom data are dimensioned + for the range [0:nmax] - as is the underlying storage - + the data is usually only valid for the range of [0:nlocal], + unless the property of interest is also updated for ghost + atoms. In some cases, this depends on a LAMMPS setting, see + for example :doc:`comm_modify vel yes `. + + :param name: name of the property + :type name: string + :param dtype: type of the returned data (see :ref:`py_data_constants`) + :type dtype: int, optional + :param nelem: number of elements in array + :type nelem: int, optional + :param dim: dimension of each element + :type dim: int, optional + :return: requested data as NumPy array with direct access to C data + :rtype: numpy.array + """ + if dtype == LAMMPS_AUTODETECT: + dtype = self.lmp.extract_atom_datatype(name) + + if nelem == LAMMPS_AUTODETECT: + if name == "mass": + nelem = self.lmp.extract_global("ntypes") + 1 + else: + nelem = self.lmp.extract_global("nlocal") + if dim == LAMMPS_AUTODETECT: + if dtype in (LAMMPS_INT_2D, LAMMPS_DOUBLE_2D, LAMMPS_INT64_2D): + # TODO add other fields + if name in ("x", "v", "f", "angmom", "torque", "csforce", "vforce"): + dim = 3 + else: + dim = 2 + else: + dim = 1 + + raw_ptr = self.lmp.extract_atom(name, dtype) + + if dtype in (LAMMPS_DOUBLE, LAMMPS_DOUBLE_2D): + return self.darray(raw_ptr, nelem, dim) + elif dtype in (LAMMPS_INT, LAMMPS_INT_2D): + return self.iarray(c_int32, raw_ptr, nelem, dim) + elif dtype in (LAMMPS_INT64, LAMMPS_INT64_2D): + return self.iarray(c_int64, raw_ptr, nelem, dim) + return raw_ptr + + def extract_atom_iarray(self, name, nelem, dim=1): + warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) + + if name in ['id', 'molecule']: + c_int_type = self.lmp.c_tagint + elif name in ['image']: + c_int_type = self.lmp.c_imageint + else: + c_int_type = c_int + + if dim == 1: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT) + else: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT_2D) + + return self.iarray(c_int_type, raw_ptr, nelem, dim) + + def extract_atom_darray(self, name, nelem, dim=1): + warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) + + if dim == 1: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE) + else: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE_2D) + + return self.darray(raw_ptr, nelem, dim) + + def extract_compute(self, cid, style, datatype): + value = self.lmp.extract_compute(cid, style, datatype) + + if style in (LMP_STYLE_GLOBAL, LMP_STYLE_LOCAL): + if datatype == LMP_TYPE_VECTOR: + nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_VECTOR) + return self.darray(value, nrows) + elif datatype == LMP_TYPE_ARRAY: + nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_ROWS) + ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) + return self.darray(value, nrows, ncols) + elif style == LMP_STYLE_ATOM: + if datatype == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + return self.darray(value, nlocal) + elif datatype == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) + return self.darray(value, nlocal, ncols) + return value + + def extract_fix(self, fid, style, datatype, nrow=0, ncol=0): + value = self.lmp.extract_fix(fid, style, datatype, nrow, ncol) + if style == LMP_STYLE_ATOM: + if datatype == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + return self.darray(value, nlocal) + elif datatype == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) + return self.darray(value, nlocal, ncols) + elif style == LMP_STYLE_LOCAL: + if datatype == LMP_TYPE_VECTOR: + nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) + return self.darray(value, nrows) + elif datatype == LMP_TYPE_ARRAY: + nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) + ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) + return self.darray(value, nrows, ncols) + return value + + def extract_variable(self, name, group=None, datatype=LMP_VAR_EQUAL): + import numpy as np + value = self.lmp.extract_variable(name, group, datatype) + if datatype == LMP_VAR_ATOM: + return np.ctypeslib.as_array(value) + return value + + def iarray(self, c_int_type, raw_ptr, nelem, dim=1): + import numpy as np + np_int_type = self._ctype_to_numpy_int(c_int_type) + + if dim == 1: + ptr = cast(raw_ptr, POINTER(c_int_type * nelem)) + else: + ptr = cast(raw_ptr[0], POINTER(c_int_type * nelem * dim)) + + a = np.frombuffer(ptr.contents, dtype=np_int_type) + a.shape = (nelem, dim) + return a + + def darray(self, raw_ptr, nelem, dim=1): + import numpy as np + if dim == 1: + ptr = cast(raw_ptr, POINTER(c_double * nelem)) + else: + ptr = cast(raw_ptr[0], POINTER(c_double * nelem * dim)) + + a = np.frombuffer(ptr.contents) + a.shape = (nelem, dim) + return a + + # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- From fb1bd3e962a3611503d07323afb8159a5b50b768 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 18:01:52 -0400 Subject: [PATCH 15/34] Correct links --- doc/src/Python_config.rst | 14 +++++++------- doc/src/Python_usage.rst | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 62bd52900f..8e14b5085c 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -1,13 +1,13 @@ Retrieving LAMMPS configuration information ******************************************* -* :py:attr:`has_mpi_support ` -* :py:attr:`has_exceptions ` -* :py:attr:`has_gzip_support ` -* :py:attr:`has_png_support ` -* :py:attr:`has_jpeg_support ` -* :py:attr:`has_ffmpeg_support ` -* :py:attr:`installed_packages ` +* :py:attr:`has_mpi_support ` +* :py:attr:`has_exceptions ` +* :py:attr:`has_gzip_support ` +* :py:attr:`has_png_support ` +* :py:attr:`has_jpeg_support ` +* :py:attr:`has_ffmpeg_support ` +* :py:attr:`installed_packages ` * :py:meth:`lammps.has_style() ` * :py:meth:`lammps.available_styles() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 + * :py:meth:`version() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 * :py:meth:`get_thermo() `: return current value of a thermo keyword * :py:meth:`get_natoms() `: total # of atoms as int * :py:meth:`reset_box() `: reset the simulation box size @@ -330,7 +330,7 @@ against invalid accesses. Numpy Methods: - * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array + * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array .. tab:: PyLammps/IPyLammps API From 4f1ed775e97850327a02e18d4214d16509a63693 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:03:19 -0400 Subject: [PATCH 16/34] Add missing docstrings --- python/lammps.py | 200 ++++++++++++++++++++++++++--------------------- 1 file changed, 113 insertions(+), 87 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index 000867805d..8b477055d3 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -737,14 +737,12 @@ class lammps(object): list of the supported keywords. This function returns ``None`` if the keyword is not recognized. Otherwise it will return a positive integer value that - corresponds to one of the constants define in the :py:mod:`lammps` module: - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, ``LAMMPS_DOUBLE_2D``, - ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. + corresponds to one of the :ref:`data type ` + constants define in the :py:mod:`lammps` module. :param name: name of the property :type name: string - :return: datatype of global property + :return: data type of global property, see :ref:`py_datatype_constants` :rtype: int """ if name: name = name.encode() @@ -766,15 +764,13 @@ class lammps(object): Since Python needs to know the data type to be able to interpret the result, by default, this function will try to auto-detect the data type by asking the library. You can also force a specific data type. For that - purpose the :py:mod:`lammps` module contains the constants ``LAMMPS_INT``, - ``LAMMPS_DOUBLE``, ``LAMMPS_INT64``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. - This function returns ``None`` if either the keyword is not recognized, + purpose the :py:mod:`lammps` module contains :ref:`data type ` + constants. This function returns ``None`` if either the keyword is not recognized, or an invalid data type constant is used. :param name: name of the property :type name: string - :param dtype: data type of the returned data (see :ref:`py_data_constants`) + :param dtype: data type of the returned data (see :ref:`py_datatype_constants`) :type dtype: int, optional :return: value of the property or None :rtype: int, float, or NoneType @@ -815,14 +811,12 @@ class lammps(object): list of the supported keywords. This function returns ``None`` if the keyword is not recognized. Otherwise it will return an integer value that - corresponds to one of the constants define in the :py:mod:`lammps` module: - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, ``LAMMPS_DOUBLE_2D``, - ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. + corresponds to one of the :ref:`data type ` constants + defined in the :py:mod:`lammps` module. :param name: name of the property :type name: string - :return: data type of per-atom property (see :ref:`py_data_constants`) + :return: data type of per-atom property (see :ref:`py_datatype_constants`) :rtype: int """ if name: name = name.encode() @@ -840,11 +834,9 @@ class lammps(object): list of the supported keywords and their data types. Since Python needs to know the data type to be able to interpret the result, by default, this function will try to auto-detect the data type - by asking the library. You can also force a specific data type. For - that purpose the :py:mod:`lammps` module contains the constants - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, ``LAMMPS_DOUBLE_2D``, - ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. + by asking the library. You can also force a specific data type by setting ``dtype`` + to one of the :ref:`data type ` constants defined in the + :py:mod:`lammps` module. This function returns ``None`` if either the keyword is not recognized, or an invalid data type constant is used. @@ -859,7 +851,7 @@ class lammps(object): :param name: name of the property :type name: string - :param dtype: data type of the returned data (see :ref:`py_data_constants`) + :param dtype: data type of the returned data (see :ref:`py_datatype_constants`) :type dtype: int, optional :return: requested data or ``None`` :rtype: ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.POINTER(ctypes.c_int32)), @@ -907,12 +899,12 @@ class lammps(object): :param id: compute ID :type id: string - :param style: style of the data retrieve (global, atom, or local) + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` :type style: int - :param type: type or size of the returned data (scalar, vector, or array) + :param type: type or size of the returned data (scalar, vector, or array), see :ref:`py_type_constants` :type type: int - :return: requested data - :rtype: integer or double or pointer to 1d or 2d double array or None + :return: requested data as scalar, pointer to 1d or 2d double array, or None + :rtype: c_double, ctypes.POINTER(c_double), ctypes.POINTER(ctypes.POINTER(c_double)), or NoneType """ if id: id = id.encode() else: return None @@ -977,33 +969,29 @@ class lammps(object): :param id: fix ID :type id: string - :param style: style of the data retrieve (global, atom, or local) + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` :type style: int - :param type: type or size of the returned data (scalar, vector, or array) + :param type: type or size of the returned data (scalar, vector, or array), see :ref:`py_type_constants` :type type: int :param nrow: index of global vector element or row index of global array element :type nrow: int :param ncol: column index of global array element :type ncol: int - :return: requested data - :rtype: integer or double value, pointer to 1d or 2d double array or None + :return: requested data or None + :rtype: c_double, ctypes.POINTER(c_double), ctypes.POINTER(ctypes.POINTER(c_double)), or NoneType """ if id: id = id.encode() else: return None if style == LMP_STYLE_GLOBAL: - if type == LMP_TYPE_SCALAR \ - or type == LMP_TYPE_VECTOR \ - or type == LMP_TYPE_ARRAY: + if type in (LMP_TYPE_SCALAR, LMP_TYPE_VECTOR, LMP_TYPE_ARRAY): self.lib.lammps_extract_fix.restype = POINTER(c_double) ptr = self.lib.lammps_extract_fix(self.lmp,id,style,type,nrow,ncol) result = ptr[0] self.lib.lammps_free(ptr) return result - elif type == LMP_SIZE_VECTOR \ - or type == LMP_SIZE_ROWS \ - or type == LMP_SIZE_COLS: + elif type in (LMP_SIZE_VECTOR, LMP_SIZE_ROWS, LMP_SIZE_COLS): self.lib.lammps_extract_fix.restype = POINTER(c_int) ptr = self.lib.lammps_extract_fix(self.lmp,id,style,type,nrow,ncol) return ptr[0] @@ -1030,15 +1018,12 @@ class lammps(object): self.lib.lammps_extract_fix.restype = POINTER(c_double) elif type == LMP_TYPE_ARRAY: self.lib.lammps_extract_fix.restype = POINTER(POINTER(c_double)) - elif type == LMP_TYPE_SCALAR \ - or type == LMP_SIZE_VECTOR \ - or type == LMP_SIZE_ROWS \ - or type == LMP_SIZE_COLS: + elif type in (LMP_TYPE_SCALAR, LMP_SIZE_VECTOR, LMP_SIZE_ROWS, LMP_SIZE_COLS): self.lib.lammps_extract_fix.restype = POINTER(c_int) else: return None ptr = self.lib.lammps_extract_fix(self.lmp,id,style,type,nrow,ncol) - if type == LMP_TYPE_VECTOR or type == LMP_TYPE_ARRAY: + if type in (LMP_TYPE_VECTOR, LMP_TYPE_ARRAY): return ptr else: return ptr[0] @@ -1051,17 +1036,17 @@ class lammps(object): # for vector, must copy nlocal returned values to local c_double vector # memory was allocated by library interface function - def extract_variable(self,name,group=None,type=LMP_VAR_EQUAL): + def extract_variable(self, name, group=None, vartype=LMP_VAR_EQUAL): """ Evaluate a LAMMPS variable and return its data This function is a wrapper around the function :cpp:func:`lammps_extract_variable` of the C-library interface, evaluates variable name and returns a copy of the computed data. The memory temporarily allocated by the C-interface is deleted - after the data is copied to a python variable or list. + after the data is copied to a Python variable or list. The variable must be either an equal-style (or equivalent) variable or an atom-style variable. The variable type has to - provided as type parameter which may be two constants: + provided as ``vartype`` parameter which may be two constants: ``LMP_VAR_EQUAL`` or ``LMP_VAR_STRING``; it defaults to equal-style variables. The group parameter is only used for atom-style variables and @@ -1069,26 +1054,24 @@ class lammps(object): :param name: name of the variable to execute :type name: string - :param group: name of group for atom style variable - :type group: string - :param type: type of variable - :type type: int + :param group: name of group for atom-style variable + :type group: string, only for atom-style variables + :param vartype: type of variable, see :ref:`py_vartype_constants` + :type vartype: int :return: the requested data - :rtype: double, array of doubles, or None + :rtype: c_double, (c_double), or NoneType """ if name: name = name.encode() else: return None if group: group = group.encode() - if type == LMP_VAR_EQUAL: + if vartype == LMP_VAR_EQUAL: self.lib.lammps_extract_variable.restype = POINTER(c_double) ptr = self.lib.lammps_extract_variable(self.lmp,name,group) result = ptr[0] self.lib.lammps_free(ptr) return result - if type == LMP_VAR_ATOM: - self.lib.lammps_extract_global.restype = POINTER(c_int) - nlocalptr = self.lib.lammps_extract_global(self.lmp,"nlocal".encode()) - nlocal = nlocalptr[0] + elif vartype == LMP_VAR_ATOM: + nlocal = self.extract_global("nlocal") result = (c_double*nlocal)() self.lib.lammps_extract_variable.restype = POINTER(c_double) ptr = self.lib.lammps_extract_variable(self.lmp,name,group) @@ -1692,18 +1675,9 @@ class numpy_wrapper: def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): """Retrieve per-atom properties from LAMMPS as NumPy arrays - This is a wrapper around the :cpp:func:`lammps_extract_atom` - function of the C-library interface. Its documentation includes a - list of the supported keywords and their data types. - Since Python needs to know the data type to be able to interpret - the result, by default, this function will try to auto-detect the data - type by asking the library. You can also force a specific data type. - For that purpose the :py:mod:`lammps` module contains the constants - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, - ``LAMMPS_DOUBLE_2D``, ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and - ``LAMMPS_STRING``. - This function returns ``None`` if either the keyword is not - recognized, or an invalid data type constant is used. + This is a wrapper around the :py:meth:`lammps.extract_atom()` method. + It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. .. note:: @@ -1716,14 +1690,14 @@ class numpy_wrapper: :param name: name of the property :type name: string - :param dtype: type of the returned data (see :ref:`py_data_constants`) + :param dtype: type of the returned data (see :ref:`py_datatype_constants`) :type dtype: int, optional :param nelem: number of elements in array :type nelem: int, optional :param dim: dimension of each element :type dim: int, optional - :return: requested data as NumPy array with direct access to C data - :rtype: numpy.array + :return: requested data as NumPy array with direct access to C data or None + :rtype: numpy.array or NoneType """ if dtype == LAMMPS_AUTODETECT: dtype = self.lmp.extract_atom_datatype(name) @@ -1780,51 +1754,103 @@ class numpy_wrapper: return self.darray(raw_ptr, nelem, dim) - def extract_compute(self, cid, style, datatype): - value = self.lmp.extract_compute(cid, style, datatype) + def extract_compute(self, cid, style, type): + """Retrieve data from a LAMMPS compute + + This is a wrapper around the + :py:meth:`lammps.extract_compute() ` method. + It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. + + :param id: compute ID + :type id: string + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` + :type style: int + :param type: type of the returned data (scalar, vector, or array), see :ref:`py_type_constants` + :type type: int + :return: requested data either as float, as NumPy array with direct access to C data, or None + :rtype: float, numpy.array, or NoneType + """ + value = self.lmp.extract_compute(cid, style, type) if style in (LMP_STYLE_GLOBAL, LMP_STYLE_LOCAL): - if datatype == LMP_TYPE_VECTOR: + if type == LMP_TYPE_VECTOR: nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_VECTOR) return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: + elif type == LMP_TYPE_ARRAY: nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_ROWS) ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) return self.darray(value, nrows, ncols) elif style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + if type == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal") return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + elif type == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal") ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) return self.darray(value, nlocal, ncols) return value - def extract_fix(self, fid, style, datatype, nrow=0, ncol=0): - value = self.lmp.extract_fix(fid, style, datatype, nrow, ncol) + def extract_fix(self, fid, style, type, nrow=0, ncol=0): + """Retrieve data from a LAMMPS fix + + This is a wrapper around the :py:meth:`lammps.extract_fix() ` method. + It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. + + :param id: fix ID + :type id: string + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` + :type style: int + :param type: type or size of the returned data (scalar, vector, or array), see :ref:`py_type_constants` + :type type: int + :param nrow: index of global vector element or row index of global array element + :type nrow: int + :param ncol: column index of global array element + :type ncol: int + :return: requested data + :rtype: integer or double value, pointer to 1d or 2d double array or None + + """ + value = self.lmp.extract_fix(fid, style, type, nrow, ncol) if style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + if type == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal") return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + elif type == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal") ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) return self.darray(value, nlocal, ncols) elif style == LMP_STYLE_LOCAL: - if datatype == LMP_TYPE_VECTOR: + if type == LMP_TYPE_VECTOR: nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: + elif type == LMP_TYPE_ARRAY: nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) return self.darray(value, nrows, ncols) return value - def extract_variable(self, name, group=None, datatype=LMP_VAR_EQUAL): + def extract_variable(self, name, group=None, vartype=LMP_VAR_EQUAL): + """ Evaluate a LAMMPS variable and return its data + + This function is a wrapper around the function + :py:meth:`lammps.extract_variable() ` + method. It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. + + :param name: name of the variable to execute + :type name: string + :param group: name of group for atom-style variable (ignored for equal-style variables) + :type group: string + :param vartype: type of variable, see :ref:`py_vartype_constants` + :type vartype: int + :return: the requested data or None + :rtype: c_double, numpy.array, or NoneType + """ import numpy as np - value = self.lmp.extract_variable(name, group, datatype) - if datatype == LMP_VAR_ATOM: + value = self.lmp.extract_variable(name, group, vartype) + if vartype == LMP_VAR_ATOM: return np.ctypeslib.as_array(value) return value From 6672568fca41da6ccb7a73669741e47a4886405b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:03:50 -0400 Subject: [PATCH 17/34] Change links --- doc/src/Python_config.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 8e14b5085c..7660f96835 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -1,13 +1,13 @@ Retrieving LAMMPS configuration information ******************************************* -* :py:attr:`has_mpi_support ` -* :py:attr:`has_exceptions ` -* :py:attr:`has_gzip_support ` -* :py:attr:`has_png_support ` -* :py:attr:`has_jpeg_support ` -* :py:attr:`has_ffmpeg_support ` -* :py:attr:`installed_packages ` +* :py:attr:`lammps.has_mpi_support ` +* :py:attr:`lammps.has_exceptions ` +* :py:attr:`lammps.has_gzip_support ` +* :py:attr:`lammps.has_png_support ` +* :py:attr:`lammps.has_jpeg_support ` +* :py:attr:`lammps.has_ffmpeg_support ` +* :py:attr:`lammps.installed_packages ` * :py:meth:`lammps.has_style() ` * :py:meth:`lammps.available_styles() Date: Mon, 5 Oct 2020 14:04:14 -0400 Subject: [PATCH 18/34] Add example showing Python exception handling --- doc/src/Python_error.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc/src/Python_error.rst b/doc/src/Python_error.rst index 92f68c423f..f57ec06576 100644 --- a/doc/src/Python_error.rst +++ b/doc/src/Python_error.rst @@ -7,6 +7,27 @@ current Python process with an error message. C++ exceptions allow capturing them on the C++ side and rethrowing them on the Python side. This way LAMMPS errors can be handled through the Python exception handling mechanism. +.. code-block:: Python + + from lammps import lammps, MPIAbortException + + lmp = lammps() + + try: + # LAMMPS will normally terminate itself and the running process if an error + # occurs. This would kill the Python interpreter. To avoid this, make sure to + # compile with LAMMPS_EXCEPTIONS enabled. This ensures the library API calls + # will not terminate the parent process. Instead, the library wrapper will + # detect that an error has occured and throw a Python exception + + lmp.command('unknown') + except MPIAbortException as ae: + # Single MPI process got killed. This would normally be handled by an MPI abort + pass + except Exception as e: + # All (MPI) processes have reached this error + pass + .. warning:: Capturing a LAMMPS exception in Python can still mean that the From ed17eabe1705b114a24113852ceec903adc6816b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:04:44 -0400 Subject: [PATCH 19/34] Add missing code highlights --- doc/src/Python_ext.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/Python_ext.rst b/doc/src/Python_ext.rst index 30782c9464..40f6e10609 100644 --- a/doc/src/Python_ext.rst +++ b/doc/src/Python_ext.rst @@ -2,14 +2,14 @@ Extending the library and Python interface ****************************************** As noted above, these Python class methods correspond one-to-one with -the functions in the LAMMPS library interface in src/library.cpp and -library.h. This means you can extend the Python wrapper via the +the functions in the LAMMPS library interface in ``src/library.cpp`` and +``library.h``. This means you can extend the Python wrapper via the following steps: -* Add a new interface function to src/library.cpp and - src/library.h. +* Add a new interface function to ``src/library.cpp`` and + ``src/library.h``. * Rebuild LAMMPS as a shared library. -* Add a wrapper method to python/lammps.py for this interface +* Add a wrapper method to ``python/lammps.py`` for this interface function. * You should now be able to invoke the new interface function from a Python script. From 8f808a5e6e57adb787ad45da2203c1b3f952095b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:06:09 -0400 Subject: [PATCH 20/34] Update Python_usage.rst and Python_module.rst --- doc/src/Python_module.rst | 18 +++-- doc/src/Python_usage.rst | 151 ++++++++++++++++++++++++-------------- 2 files changed, 106 insertions(+), 63 deletions(-) diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index 64ff7b53f7..a78fad8519 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -91,7 +91,7 @@ Additional components of the ``lammps`` module The :py:mod:`lammps` module additionally contains several constants and the :py:class:`NeighList ` class: -.. _py_data_constants: +.. _py_datatype_constants: Data Types ---------- @@ -116,7 +116,9 @@ Style Constants Constants in the :py:mod:`lammps` module to select what style of data to request from computes or fixes. See :cpp:enum:`_LMP_STYLE_CONST` for the equivalent constants in the C library interface. Used in - :py:func:`lammps.extract_compute` and :py:func:`lammps.extract_fix`. + :py:func:`lammps.extract_compute`, :py:func:`lammps.extract_fix`, and their NumPy variants + :py:func:`lammps.numpy.extract_compute() ` and + :py:func:`lammps.numpy.extract_fix() `. .. _py_type_constants: @@ -129,18 +131,20 @@ Type Constants Constants in the :py:mod:`lammps` module to select what type of data to request from computes or fixes. See :cpp:enum:`_LMP_TYPE_CONST` for the equivalent constants in the C library interface. Used in - :py:func:`lammps.extract_compute` and :py:func:`lammps.extract_fix`. + :py:func:`lammps.extract_compute`, :py:func:`lammps.extract_fix`, and their NumPy variants + :py:func:`lammps.numpy.extract_compute() ` and + :py:func:`lammps.numpy.extract_fix() `. -.. _py_var_constants: +.. _py_vartype_constants: -Variable Style Constants +Variable Type Constants ------------------------ .. py:data:: LMP_VAR_EQUAL, LMP_VAR_ATOM :type: int - Constants in the :py:mod:`lammps` module to select what style of - variable to query when calling :py:func:`lammps.extract_variable`. + Constants in the :py:mod:`lammps` module to select what type of + variable to query when calling :py:func:`lammps.extract_variable`. See also: :doc:`variable command `. Classes representing internal objects ------------------------------------- diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index 135406a740..dc17d007b9 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -129,7 +129,7 @@ Here are simple examples using all three Python interfaces: In all of the above cases, same as with the :ref:`C library API `, this will use the ``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was -compiled with. +compiled with. The :py:func:`lmp.close() ` call is optional since the LAMMPS class instance will also be deleted @@ -251,7 +251,7 @@ it is possible to "compute" what the next LAMMPS command should be. # read commands from file 'in.melt' L.file('in.melt') - + # issue a single command L.variable('zpos', 'index', 1.0) @@ -316,7 +316,7 @@ against invalid accesses. lmp.close() - Methods: + **Methods**: * :py:meth:`version() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 * :py:meth:`get_thermo() `: return current value of a thermo keyword @@ -328,23 +328,23 @@ against invalid accesses. * :py:meth:`extract_box() `: extract box info * :py:meth:`create_atoms() `: create N atoms with IDs, types, x, v, and image flags - Numpy Methods: + **Numpy Methods**: * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array .. tab:: PyLammps/IPyLammps API .. code-block:: python - + from lammps import PyLammps - + L = PyLammps() L.file("in.sysinit") - + print(f"running simulation with {L.system.natoms} atoms") - + L.run(1000, "post no"); - + for i in range(10): L.run(100, "pre no post no") pe = L.eval("pe") @@ -356,60 +356,99 @@ against invalid accesses. Retrieving or setting properties of LAMMPS objects ************************************************** -* :py:meth:`extract_compute() `: extract value(s) from a compute -* :py:meth:`extract_fix() `: extract value(s) from a fix -* :py:meth:`extract_variable() `: extract value(s) from a variable -* :py:meth:`set_variable() `: set existing named string-style variable to value +.. tabs:: -.. code-block:: Python + .. tab:: lammps API - eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute - v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix - # id = ID of compute or fix - # style = 0 = global data - # 1 = per-atom data - # 2 = local data - # type = 0 = scalar - # 1 = vector - # 2 = array - # i,j = indices of value in global vector or array + For :py:meth:`lammps.extract_compute() ` and + :py:meth:`lammps.extract_fix() `, the global, per-atom, + or local data calculated by the compute or fix can be accessed. What is returned + depends on whether the compute or fix calculates a scalar or vector or array. + For a scalar, a single double value is returned. If the compute or fix calculates + a vector or array, a pointer to the internal LAMMPS data is returned, which you can + use via normal Python subscripting. - var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable - # name = name of variable - # group = group ID (ignored for equal-style variables) - # flag = 0 = equal-style variable - # 1 = atom-style variable + The one exception is that for a fix that calculates a + global vector or array, a single double value from the vector or array + is returned, indexed by I (vector) or I and J (array). I,J are + zero-based indices. + See the :doc:`Howto output ` doc page for a discussion of + global, per-atom, and local data, and of scalar, vector, and array + data types. See the doc pages for individual :doc:`computes ` + and :doc:`fixes ` for a description of what they calculate and + store. - flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful + For :py:meth:`lammps.extract_variable() `, + an :doc:`equal-style or atom-style variable ` is evaluated and + its result returned. -For extract_compute() and extract_fix(), the global, per-atom, or -local data calculated by the compute or fix can be accessed. What is -returned depends on whether the compute or fix calculates a scalar or -vector or array. For a scalar, a single double value is returned. If -the compute or fix calculates a vector or array, a pointer to the -internal LAMMPS data is returned, which you can use via normal Python -subscripting. The one exception is that for a fix that calculates a -global vector or array, a single double value from the vector or array -is returned, indexed by I (vector) or I and J (array). I,J are -zero-based indices. The I,J arguments can be left out if not needed. -See the :doc:`Howto output ` doc page for a discussion of -global, per-atom, and local data, and of scalar, vector, and array -data types. See the doc pages for individual :doc:`computes ` -and :doc:`fixes ` for a description of what they calculate and -store. + For equal-style variables a single ``c_double`` value is returned and the + group argument is ignored. For atom-style variables, a vector of + ``c_double`` is returned, one value per atom, which you can use via normal + Python subscripting. The values will be zero for atoms not in the + specified group. -For extract_variable(), an :doc:`equal-style or atom-style variable ` -is evaluated and its result returned. + :py:meth:`lammps.numpy.extract_compute() `, + :py:meth:`lammps.numpy.extract_fix() `, and + :py:meth:`lammps.numpy.extract_variable() ` are + equivlanent NumPy implementations that return NumPy arrays instead of ``ctypes`` pointers. -For equal-style variables a single double value is returned and the -group argument is ignored. For atom-style variables, a vector of -doubles is returned, one value per atom, which you can use via normal -Python subscripting. The values will be zero for atoms not in the -specified group. + The :py:meth:`lammps.set_variable() ` method sets an + existing string-style variable to a new string value, so that subsequent LAMMPS + commands can access the variable. + + **Methods**: + + * :py:meth:`lammps.extract_compute() `: extract value(s) from a compute + * :py:meth:`lammps.extract_fix() `: extract value(s) from a fix + * :py:meth:`lammps.extract_variable() `: extract value(s) from a variable + * :py:meth:`lammps.set_variable() `: set existing named string-style variable to value + + **NumPy Methods**: + + * :py:meth:`lammps.numpy.extract_compute() `: extract value(s) from a compute, return arrays as numpy arrays + * :py:meth:`lammps.numpy.extract_fix() `: extract value(s) from a fix, return arrays as numpy arrays + * :py:meth:`lammps.numpy.extract_variable() `: extract value(s) from a variable, return arrays as numpy arrays + + + .. tab:: PyLammps/IPyLammps API + + PyLammps and IPyLammps classes currently do not add any additional ways of + retrieving information out of computes and fixes. This information can still be accessed by using the lammps API: + + .. code-block:: python + + L.lmp.extract_compute(...) + L.lmp.extract_fix(...) + # OR + L.lmp.numpy.extract_compute(...) + L.lmp.numpy.extract_fix(...) + + LAMMPS variables can be both defined and accessed via the :py:class:`PyLammps ` interface. + + To define a variable you can use the :doc:`variable ` command: + + .. code-block:: Python + + L.variable("a index 2") + + A dictionary of all variables is returned by the :py:attr:`PyLammps.variables ` property: + + you can access an individual variable by retrieving a variable object from the + ``L.variables`` dictionary by name + + .. code-block:: Python + + a = L.variables['a'] + + The variable value can then be easily read and written by accessing the value + property of this object. + + .. code-block:: Python + + print(a.value) + a.value = 4 -The set_variable() method sets an existing string-style variable to a -new string value, so that subsequent LAMMPS commands can access the -variable. Gather and Scatter Data between MPI processors @@ -458,7 +497,7 @@ like this: .. code-block:: Python - from ctypes import * + from ctypes import c_double natoms = lmp.get_natoms() n3 = 3*natoms x = (n3*c_double)() From c06348c507ab4f8889dffa4f09945934757b2506 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 15:07:57 -0400 Subject: [PATCH 21/34] Update Python docs --- doc/src/Python_usage.rst | 3 +++ doc/src/python.rst | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index dc17d007b9..a2750d8195 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -356,6 +356,9 @@ against invalid accesses. Retrieving or setting properties of LAMMPS objects ************************************************** +This section documents accessing or modifying data from objects like +computes, fixes, or variables in LAMMPS using the :py:mod:`lammps` module. + .. tabs:: .. tab:: lammps API diff --git a/doc/src/python.rst b/doc/src/python.rst index f3238e8bb5..f38e756232 100644 --- a/doc/src/python.rst +++ b/doc/src/python.rst @@ -350,7 +350,7 @@ which loads and runs the following function from examples/python/funcs.py: .. code-block:: python def loop(N,cut0,thresh,lmpptr): - print "LOOP ARGS",N,cut0,thresh,lmpptr + print("LOOP ARGS", N, cut0, thresh, lmpptr) from lammps import lammps lmp = lammps(ptr=lmpptr) natoms = lmp.get_natoms() @@ -365,12 +365,12 @@ which loads and runs the following function from examples/python/funcs.py: lmp.command("pair_coeff * * 1.0 1.0") # ditto lmp.command("run 10") # ditto pe = lmp.extract_compute("thermo_pe",0,0) # extract total PE from LAMMPS - print "PE",pe/natoms,thresh + print("PE", pe/natoms, thresh) if pe/natoms < thresh: return with these input script commands: -.. parsed-literal:: +.. code-block:: LAMMPS python loop input 4 10 1.0 -4.0 SELF format iffp file funcs.py python loop invoke @@ -473,11 +473,11 @@ like this: .. code-block:: python import exceptions - print "Inside simple function" + print("Inside simple function") try: foo += 1 # one or more statements here - except Exception, e: - print "FOO error:",e + except Exception as e: + print("FOO error:", e) then you will get this message printed to the screen: From 68147306e7d31931dfeac4bc3a0b4dcc616213fa Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 16:15:40 -0400 Subject: [PATCH 22/34] Add Python_neighbor.rst --- doc/src/Python_head.rst | 1 + doc/src/Python_neighbor.rst | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 doc/src/Python_neighbor.rst diff --git a/doc/src/Python_head.rst b/doc/src/Python_head.rst index 6952215188..e78e727a10 100644 --- a/doc/src/Python_head.rst +++ b/doc/src/Python_head.rst @@ -13,6 +13,7 @@ used together. Python_usage Python_call Python_config + Python_neighbor Python_module Python_examples Python_error diff --git a/doc/src/Python_neighbor.rst b/doc/src/Python_neighbor.rst new file mode 100644 index 0000000000..2e8f84050c --- /dev/null +++ b/doc/src/Python_neighbor.rst @@ -0,0 +1,18 @@ +Accessing LAMMPS Neighbor lists +******************************* + +**Methods:** + +* :py:meth:`lammps.get_neighlist() `: Get neighbor list for given index +* :py:meth:`lammps.get_neighlist_size()`: Get number of elements in neighbor list +* :py:meth:`lammps.get_neighlist_element_neighbors()`: Get element in neighbor list and its neighbors + +* :py:meth:`lammps.find_pair_neighlist() `: Find neighbor list of pair style +* :py:meth:`lammps.find_fix_neighlist() `: Find neighbor list of pair style +* :py:meth:`lammps.find_compute_neighlist() `: Find neighbor list of pair style + + +**NumPy Methods:** + +* :py:meth:`lammps.numpy.get_neighlist() `: Get neighbor list for given index, which uses NumPy arrays for its element neighbor arrays +* :py:meth:`lammps.numpy.get_neighlist_element_neighbors() `: Get element in neighbor list and its neighbors (as numpy array) From 02b10380bcd6e65ab0649036e783914a3d9bcdc6 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 16:21:37 -0400 Subject: [PATCH 23/34] Create ctypes only neighbor list API variant This moves the lammps.get_neighlist() method to lammps.numpy.get_neighlist(). lammps.get_neighlist() now returns a NeighList object, while the NumPy variants returns a NumPyNeighList object. The main difference between the two is that while the ctypes variant returns neighlist elements as atom idx (int), numneighs (int), neighbors (POINTER(c_int)) the NumPy variant returns atom idx (int), neighbors (numpy.array) --- doc/src/Python_module.rst | 4 + .../python/in.fix_python_invoke_neighlist | 9 +- python/lammps.py | 166 ++++++++++++++---- 3 files changed, 137 insertions(+), 42 deletions(-) diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index a78fad8519..04bc3f2c5b 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -152,3 +152,7 @@ Classes representing internal objects .. autoclass:: lammps.NeighList :members: :no-undoc-members: + +.. autoclass:: lammps.NumPyNeighList + :members: + :no-undoc-members: diff --git a/examples/python/in.fix_python_invoke_neighlist b/examples/python/in.fix_python_invoke_neighlist index e5445227b1..af0399ae1f 100644 --- a/examples/python/in.fix_python_invoke_neighlist +++ b/examples/python/in.fix_python_invoke_neighlist @@ -32,8 +32,9 @@ def post_force_callback(lmp, v): t = L.extract_global("ntimestep", 0) print(pid_prefix, "### POST_FORCE ###", t) - #mylist = L.get_neighlist(0) - mylist = L.find_pair_neighlist("lj/cut", request=0) + #mylist = L.numpy.get_neighlist(0) + idx = L.find_pair_neighlist("lj/cut", request=0) + mylist = L.numpy.get_neighlist(idx) print(pid_prefix, mylist) nlocal = L.extract_global("nlocal") nghost = L.extract_global("nghost") @@ -43,8 +44,8 @@ def post_force_callback(lmp, v): v = L.numpy.extract_atom("v", nelem=nlocal+nghost, dim=3) f = L.numpy.extract_atom("f", nelem=nlocal+nghost, dim=3) - for iatom, numneigh, neighs in mylist: - print(pid_prefix, "- {}".format(iatom), x[iatom], v[iatom], f[iatom], " : ", numneigh, "Neighbors") + for iatom, neighs in mylist: + print(pid_prefix, "- {}".format(iatom), x[iatom], v[iatom], f[iatom], " : ", len(neighs), "Neighbors") for jatom in neighs: if jatom < nlocal: print(pid_prefix, " * ", jatom, x[jatom], v[jatom], f[jatom]) diff --git a/python/lammps.py b/python/lammps.py index 8b477055d3..1f38dd7772 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -81,7 +81,12 @@ class MPIAbortException(Exception): class NeighList: """This is a wrapper class that exposes the contents of a neighbor list. - It can be used like a regular Python list. + It can be used like a regular Python list. Each element is a tuple of: + + * the atom local index + * its number of neighbors + * and a pointer to an c_int array containing local atom indices of its + neighbors Internally it uses the lower-level LAMMPS C-library interface. @@ -109,8 +114,8 @@ class NeighList: def get(self, element): """ - :return: tuple with atom local index, number of neighbors and array of neighbor local atom indices - :rtype: (int, int, numpy.array) + :return: tuple with atom local index, numpy array of neighbor local atom indices + :rtype: (int, int, ctypes.POINTER(c_int)) """ iatom, numneigh, neighbors = self.lmp.get_neighlist_element_neighbors(self.idx, element) return iatom, numneigh, neighbors @@ -129,6 +134,35 @@ class NeighList: for ii in range(inum): yield self.get(ii) +# ------------------------------------------------------------------------- + +class NumPyNeighList(NeighList): + """This is a wrapper class that exposes the contents of a neighbor list. + + It can be used like a regular Python list. Each element is a tuple of: + + * the atom local index + * a NumPy array containing the local atom indices of its neighbors + + Internally it uses the lower-level LAMMPS C-library interface. + + :param lmp: reference to instance of :py:class:`lammps` + :type lmp: lammps + :param idx: neighbor list index + :type idx: int + """ + def __init__(self, lmp, idx): + super(NumPyNeighList, self).__init__(lmp, idx) + + def get(self, element): + """ + :return: tuple with atom local index, numpy array of neighbor local atom indices + :rtype: (int, numpy.array) + """ + iatom, neighbors = self.lmp.numpy.get_neighlist_element_neighbors(self.idx, element) + return iatom, neighbors + + # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- @@ -1537,11 +1571,15 @@ class lammps(object): self.callback[fix_name] = { 'function': cFunc, 'caller': caller } self.lib.lammps_set_fix_external_callback(self.lmp, fix_name.encode(), cFunc, cCaller) + # ------------------------------------------------------------------------- def get_neighlist(self, idx): """Returns an instance of :class:`NeighList` which wraps access to the neighbor list with the given index + See :py:meth:`lammps.numpy.get_neighlist() ` if you want to use + NumPy arrays instead of ``c_int`` pointers. + :param idx: index of neighbor list :type idx: int :return: an instance of :class:`NeighList` wrapping access to neighbor list data @@ -1549,7 +1587,37 @@ class lammps(object): """ if idx < 0: return None - return NeighList(self, idx) + return NeighList(self.lmp, idx) + + # ------------------------------------------------------------------------- + + def get_neighlist_size(self, idx): + """Return the number of elements in neighbor list with the given index + + :param idx: neighbor list index + :type idx: int + :return: number of elements in neighbor list with index idx + :rtype: int + """ + return self.lib.lammps_neighlist_num_elements(self.lmp, idx) + + # ------------------------------------------------------------------------- + + def get_neighlist_element_neighbors(self, idx, element): + """Return data of neighbor list entry + + :param element: neighbor list index + :type element: int + :param element: neighbor list element index + :type element: int + :return: tuple with atom local index, number of neighbors and array of neighbor local atom indices + :rtype: (int, int, POINTER(c_int)) + """ + c_iatom = c_int() + c_numneigh = c_int() + c_neighbors = POINTER(c_int)() + self.lib.lammps_neighlist_element_neighbors(self.lmp, idx, element, byref(c_iatom), byref(c_numneigh), byref(c_neighbors)) + return c_iatom.value, c_numneigh.value, c_neighbors # ------------------------------------------------------------------------- @@ -1579,7 +1647,7 @@ class lammps(object): style = style.encode() exact = int(exact) idx = self.lib.lammps_find_pair_neighlist(self.lmp, style, exact, nsub, request) - return self.get_neighlist(idx) + return idx # ------------------------------------------------------------------------- @@ -1595,7 +1663,7 @@ class lammps(object): """ fixid = fixid.encode() idx = self.lib.lammps_find_fix_neighlist(self.lmp, fixid, request) - return self.get_neighlist(idx) + return idx # ------------------------------------------------------------------------- @@ -1611,38 +1679,7 @@ class lammps(object): """ computeid = computeid.encode() idx = self.lib.lammps_find_compute_neighlist(self.lmp, computeid, request) - return self.get_neighlist(idx) - - # ------------------------------------------------------------------------- - - def get_neighlist_size(self, idx): - """Return the number of elements in neighbor list with the given index - - :param idx: neighbor list index - :type idx: int - :return: number of elements in neighbor list with index idx - :rtype: int - """ - return self.lib.lammps_neighlist_num_elements(self.lmp, idx) - - # ------------------------------------------------------------------------- - - def get_neighlist_element_neighbors(self, idx, element): - """Return data of neighbor list entry - - :param element: neighbor list index - :type element: int - :param element: neighbor list element index - :type element: int - :return: tuple with atom local index, number of neighbors and array of neighbor local atom indices - :rtype: (int, int, numpy.array) - """ - c_iatom = c_int() - c_numneigh = c_int() - c_neighbors = POINTER(c_int)() - self.lib.lammps_neighlist_element_neighbors(self.lmp, idx, element, byref(c_iatom), byref(c_numneigh), byref(c_neighbors)) - neighbors = self.numpy.iarray(c_int, c_neighbors, c_numneigh.value, 1) - return c_iatom.value, c_numneigh.value, neighbors + return idx # ------------------------------------------------------------------------- @@ -1664,6 +1701,8 @@ class numpy_wrapper: def __init__(self, lmp): self.lmp = lmp + # ------------------------------------------------------------------------- + def _ctype_to_numpy_int(self, ctype_int): import numpy as np if ctype_int == c_int32: @@ -1672,6 +1711,8 @@ class numpy_wrapper: return np.int64 return np.intc + # ------------------------------------------------------------------------- + def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): """Retrieve per-atom properties from LAMMPS as NumPy arrays @@ -1727,6 +1768,8 @@ class numpy_wrapper: return self.iarray(c_int64, raw_ptr, nelem, dim) return raw_ptr + # ------------------------------------------------------------------------- + def extract_atom_iarray(self, name, nelem, dim=1): warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) @@ -1744,6 +1787,8 @@ class numpy_wrapper: return self.iarray(c_int_type, raw_ptr, nelem, dim) + # ------------------------------------------------------------------------- + def extract_atom_darray(self, name, nelem, dim=1): warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) @@ -1754,6 +1799,8 @@ class numpy_wrapper: return self.darray(raw_ptr, nelem, dim) + # ------------------------------------------------------------------------- + def extract_compute(self, cid, style, type): """Retrieve data from a LAMMPS compute @@ -1791,6 +1838,8 @@ class numpy_wrapper: return self.darray(value, nlocal, ncols) return value + # ------------------------------------------------------------------------- + def extract_fix(self, fid, style, type, nrow=0, ncol=0): """Retrieve data from a LAMMPS fix @@ -1831,6 +1880,8 @@ class numpy_wrapper: return self.darray(value, nrows, ncols) return value + # ------------------------------------------------------------------------- + def extract_variable(self, name, group=None, vartype=LMP_VAR_EQUAL): """ Evaluate a LAMMPS variable and return its data @@ -1854,6 +1905,43 @@ class numpy_wrapper: return np.ctypeslib.as_array(value) return value + # ------------------------------------------------------------------------- + + def get_neighlist(self, idx): + """Returns an instance of :class:`NumPyNeighList` which wraps access to the neighbor list with the given index + + :param idx: index of neighbor list + :type idx: int + :return: an instance of :class:`NumPyNeighList` wrapping access to neighbor list data + :rtype: NumPyNeighList + """ + if idx < 0: + return None + return NumPyNeighList(self.lmp, idx) + + # ------------------------------------------------------------------------- + + def get_neighlist_element_neighbors(self, idx, element): + """Return data of neighbor list entry + + This function is a wrapper around the function + :py:meth:`lammps.get_neighlist_element_neighbors() ` + method. It behaves the same as the original method, but returns a NumPy array containing the neighbors + instead of a ``ctypes`` pointer. + + :param element: neighbor list index + :type element: int + :param element: neighbor list element index + :type element: int + :return: tuple with atom local index and numpy array of neighbor local atom indices + :rtype: (int, numpy.array) + """ + iatom, numneigh, c_neighbors = self.lmp.get_neighlist_element_neighbors(idx, element) + neighbors = self.iarray(c_int, c_neighbors, numneigh, 1) + return iatom, neighbors + + # ------------------------------------------------------------------------- + def iarray(self, c_int_type, raw_ptr, nelem, dim=1): import numpy as np np_int_type = self._ctype_to_numpy_int(c_int_type) @@ -1867,6 +1955,8 @@ class numpy_wrapper: a.shape = (nelem, dim) return a + # ------------------------------------------------------------------------- + def darray(self, raw_ptr, nelem, dim=1): import numpy as np if dim == 1: From 22cca93603fed52fd82b9fb59a7a0237b19838f1 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:34:08 -0400 Subject: [PATCH 24/34] Add tests for neighbor list API --- python/lammps.py | 2 +- unittest/python/python-commands.py | 43 ++++++++++++++++++++++++++++++ unittest/python/python-numpy.py | 43 ++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/python/lammps.py b/python/lammps.py index 1f38dd7772..2e7b9ab86f 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -1587,7 +1587,7 @@ class lammps(object): """ if idx < 0: return None - return NeighList(self.lmp, idx) + return NeighList(self, idx) # ------------------------------------------------------------------------- diff --git a/unittest/python/python-commands.py b/unittest/python/python-commands.py index 0b853a207e..6bd5a2a247 100644 --- a/unittest/python/python-commands.py +++ b/unittest/python/python-commands.py @@ -85,6 +85,49 @@ create_atoms 1 single & natoms = self.lmp.get_natoms() self.assertEqual(natoms,2) + def testNeighborList(self): + self.lmp.command("units lj") + self.lmp.command("atom_style atomic") + self.lmp.command("atom_modify map array") + self.lmp.command("boundary f f f") + self.lmp.command("region box block 0 2 0 2 0 2") + self.lmp.command("create_box 1 box") + + x = [ + 1.0, 1.0, 1.0, + 1.0, 1.0, 1.5 + ] + + types = [1, 1] + + self.assertEqual(self.lmp.create_atoms(2, id=None, type=types, x=x), 2) + nlocal = self.lmp.extract_global("nlocal") + self.assertEqual(nlocal, 2) + + self.lmp.command("mass 1 1.0") + self.lmp.command("velocity all create 3.0 87287") + self.lmp.command("pair_style lj/cut 2.5") + self.lmp.command("pair_coeff 1 1 1.0 1.0 2.5") + self.lmp.command("neighbor 0.1 bin") + self.lmp.command("neigh_modify every 20 delay 0 check no") + + self.lmp.command("run 0") + + self.assertEqual(self.lmp.find_pair_neighlist("lj/cut"), 0) + nlist = self.lmp.get_neighlist(0) + self.assertEqual(len(nlist), 2) + atom_i, numneigh_i, neighbors_i = nlist[0] + atom_j, numneigh_j, _ = nlist[1] + + self.assertEqual(atom_i, 0) + self.assertEqual(atom_j, 1) + + self.assertEqual(numneigh_i, 1) + self.assertEqual(numneigh_j, 0) + + self.assertEqual(1, neighbors_i[0]) + + ############################## if __name__ == "__main__": unittest.main() diff --git a/unittest/python/python-numpy.py b/unittest/python/python-numpy.py index 3c8ff9f512..46794590f4 100644 --- a/unittest/python/python-numpy.py +++ b/unittest/python/python-numpy.py @@ -135,5 +135,48 @@ class PythonNumpy(unittest.TestCase): self.assertTrue((x[1] == (1.0, 1.0, 1.5)).all()) self.assertEqual(len(v), 2) + def testNeighborList(self): + self.lmp.command("units lj") + self.lmp.command("atom_style atomic") + self.lmp.command("atom_modify map array") + self.lmp.command("boundary f f f") + self.lmp.command("region box block 0 2 0 2 0 2") + self.lmp.command("create_box 1 box") + + x = [ + 1.0, 1.0, 1.0, + 1.0, 1.0, 1.5 + ] + + types = [1, 1] + + self.assertEqual(self.lmp.create_atoms(2, id=None, type=types, x=x), 2) + nlocal = self.lmp.extract_global("nlocal") + self.assertEqual(nlocal, 2) + + self.lmp.command("mass 1 1.0") + self.lmp.command("velocity all create 3.0 87287") + self.lmp.command("pair_style lj/cut 2.5") + self.lmp.command("pair_coeff 1 1 1.0 1.0 2.5") + self.lmp.command("neighbor 0.1 bin") + self.lmp.command("neigh_modify every 20 delay 0 check no") + + self.lmp.command("run 0") + + self.assertEqual(self.lmp.find_pair_neighlist("lj/cut"), 0) + nlist = self.lmp.numpy.get_neighlist(0) + self.assertEqual(len(nlist), 2) + atom_i, neighbors_i = nlist[0] + atom_j, neighbors_j = nlist[1] + + self.assertEqual(atom_i, 0) + self.assertEqual(atom_j, 1) + + self.assertEqual(len(neighbors_i), 1) + self.assertEqual(len(neighbors_j), 0) + + self.assertIn(1, neighbors_i) + self.assertNotIn(0, neighbors_j) + if __name__ == "__main__": unittest.main() From 93ed9b42661747803a538960da91c40127094bee Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:34:50 -0400 Subject: [PATCH 25/34] Add PyLammps parts --- doc/src/Python_usage.rst | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index a2750d8195..7c23980015 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -334,6 +334,58 @@ against invalid accesses. .. tab:: PyLammps/IPyLammps API + In addition to the functions provided by :py:class:`lammps `, :py:class:`PyLammps ` objects + have several properties which allow you to query the system state: + + L.system + Is a dictionary describing the system such as the bounding box or number of atoms + + L.system.xlo, L.system.xhi + bounding box limits along x-axis + + L.system.ylo, L.system.yhi + bounding box limits along y-axis + + L.system.zlo, L.system.zhi + bounding box limits along z-axis + + L.communication + configuration of communication subsystem, such as the number of threads or processors + + L.communication.nthreads + number of threads used by each LAMMPS process + + L.communication.nprocs + number of MPI processes used by LAMMPS + + L.fixes + List of fixes in the current system + + L.computes + List of active computes in the current system + + L.dump + List of active dumps in the current system + + L.groups + List of groups present in the current system + + **Retrieving the value of an arbitrary LAMMPS expressions** + + LAMMPS expressions can be immediately evaluated by using the ``eval`` method. The + passed string parameter can be any expression containing global :doc:`thermo` values, + variables, compute or fix data (see :doc:`Howto_output`): + + + .. code-block:: Python + + result = L.eval("ke") # kinetic energy + result = L.eval("pe") # potential energy + + result = L.eval("v_t/2.0") + + **Example** + .. code-block:: python from lammps import PyLammps From b8c66b099d74892a719ca395764d0969251e4cc1 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:42:43 -0400 Subject: [PATCH 26/34] Fix typo --- doc/src/Python_config.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 7660f96835..2bd562c533 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -10,4 +10,4 @@ Retrieving LAMMPS configuration information * :py:attr:`lammps.installed_packages ` * :py:meth:`lammps.has_style() ` -* :py:meth:`lammps.available_styles() ` From caf434811a3baf748c7d7d41750af991f05abbca Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:54:48 -0400 Subject: [PATCH 27/34] Add example to Python_config.rst --- doc/src/Python_config.rst | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 2bd562c533..bb44ae5630 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -1,12 +1,44 @@ Retrieving LAMMPS configuration information ******************************************* +The following methods can be used to query the LAMMPS library +about compile time settings and included packages and styles. + +.. code-block:: Python + :caption: Example for using configuration settings functions + + from lammps import lammps + + lmp = lammps() + + try: + lmp.file("in.missing") + except Exception as e: + print("LAMMPS failed with error:", e) + + # write compressed dump file depending on available of options + + if lmp.has_style("dump", "atom/zstd"): + lmp.command("dump d1 all atom/zstd 100 dump.zst") + elif lmp.has_style("dump", "atom/gz"): + lmp.command("dump d1 all atom/gz 100 dump.gz") + elif lmp.has_gzip_support(): + lmp.command("dump d1 all atom 100 dump.gz") + else: + lmp.command("dump d1 all atom 100 dump") + + +----------------------- + +**Methods:** + * :py:attr:`lammps.has_mpi_support ` * :py:attr:`lammps.has_exceptions ` * :py:attr:`lammps.has_gzip_support ` * :py:attr:`lammps.has_png_support ` * :py:attr:`lammps.has_jpeg_support ` * :py:attr:`lammps.has_ffmpeg_support ` + * :py:attr:`lammps.installed_packages ` * :py:meth:`lammps.has_style() ` From 5244f49234037ad5b7a9cedf5e37eda351c57794 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 18:04:30 -0400 Subject: [PATCH 28/34] Fix broken page --- doc/src/compute_tally.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/compute_tally.rst b/doc/src/compute_tally.rst index 6487618516..0e2856ea5e 100644 --- a/doc/src/compute_tally.rst +++ b/doc/src/compute_tally.rst @@ -107,8 +107,8 @@ The computes in this package are not compatible with dynamic groups. Related commands """""""""""""""" -*compute group/group*\ _compute_group_group.html, *compute -heat/flux*\ _compute_heat_flux.html +* :doc:`compute group/group ` +* :doc:`compute heat/flux ` Default """"""" From f2ba00ea9cc633db76ca3305ef92234d2295ce99 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 21:50:37 -0400 Subject: [PATCH 29/34] update label in graph --- doc/graphviz/lammps-invoke-python.dot | 2 +- doc/src/JPG/lammps-invoke-python.png | Bin 37367 -> 37244 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/graphviz/lammps-invoke-python.dot b/doc/graphviz/lammps-invoke-python.dot index 4fcbc9e482..f880eecfd7 100644 --- a/doc/graphviz/lammps-invoke-python.dot +++ b/doc/graphviz/lammps-invoke-python.dot @@ -10,7 +10,7 @@ digraph api { capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; capi -> instance [dir=both]; - label="LAMMPS Shared Library"; + label="LAMMPS Shared Library\nor LAMMPS Executable"; } python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; subgraph cluster1 { diff --git a/doc/src/JPG/lammps-invoke-python.png b/doc/src/JPG/lammps-invoke-python.png index bb629ae1da7db83a4acbeb57ea0bc92abd8e417c..d1e25f52ea1fd7944391009f31fe4b176e4812c4 100644 GIT binary patch literal 37244 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 From b5db29bae41841d049aba855828381fc3cd02f77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 21:51:30 -0400 Subject: [PATCH 30/34] revise python in LAMMPS docs --- doc/src/Python_head.rst | 43 ++++++++------- doc/src/Python_install.rst | 32 +++++++----- doc/src/Python_overview.rst | 101 +++++++++++++++++++++--------------- doc/src/Python_run.rst | 2 +- doc/src/Python_usage.rst | 2 +- 5 files changed, 105 insertions(+), 75 deletions(-) diff --git a/doc/src/Python_head.rst b/doc/src/Python_head.rst index e78e727a10..99d005dd97 100644 --- a/doc/src/Python_head.rst +++ b/doc/src/Python_head.rst @@ -1,8 +1,8 @@ Use Python with LAMMPS ********************** -These doc pages describe various ways that LAMMPS and Python can be -used together. +These pages describe various ways that LAMMPS and Python can be used +together. .. toctree:: :maxdepth: 1 @@ -20,26 +20,31 @@ used together. Python_ext Python_trouble -If you're not familiar with `Python `_, it's a -powerful scripting and programming language which can do most -everything that lower-level languages like C or C++ can do in fewer -lines of code. The only drawback is slower execution speed. Python -is also easy to use as a "glue" language to drive a program through -its library interface, or to hook multiple pieces of software -together, such as a simulation code plus a visualization tool, or to -run a coupled multiscale or multiphysics model. +If you are not familiar with `Python `_, it is a +powerful scripting and programming language which can do almost +everything that compiled languages like C, C++, or Fortran can do in +fewer lines of code. It also comes with a large collection of add-on +modules for many purposes (either bundled or easily installed from +Python code repositories). The major drawback is slower execution speed +of the script code compared to compiled programming languages. But when +the script code is interfaced to optimized compiled code, performance can +be on par with a standalone executable, for as long as the scripting is +restricted to high-level operations. Thus Python is also convenient to +use as a "glue" language to "drive" a program through its library +interface, or to hook multiple pieces of software together, such as a +simulation code and a visualization tool, or to run a coupled +multi-scale or multi-physics model. -See the :doc:`Howto_couple ` doc page for more ideas about -coupling LAMMPS to other codes. See the :doc:`Howto library ` doc page for a description of the LAMMPS -library interface provided in src/library.h and src/library.h. That -interface is exposed to Python either when calling LAMMPS from Python -or when calling Python from a LAMMPS input script and then calling -back to LAMMPS from Python code. The library interface is designed to -be easy to add functionality to. Thus the Python interface to LAMMPS -is also easy to extend as well. +See the :doc:`Howto_couple` page for more ideas about coupling LAMMPS +to other codes. See the :doc:`Library` page for a description of the +LAMMPS library interfaces. That interface is exposed to Python either +when calling LAMMPS from Python or when calling Python from a LAMMPS +input script and then calling back to LAMMPS from Python code. The +C-library interface is designed to be easy to add functionality to, +thus the Python interface to LAMMPS is easy to extend as well. If you create interesting Python scripts that run LAMMPS or interesting Python functions that can be called from a LAMMPS input script, that you think would be generally useful, please post them as a pull request to our `GitHub site `_, -and they can be added to the LAMMPS distribution or webpage. +and they can be added to the LAMMPS distribution or web page. diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index ce0bfec346..5c244e6c16 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -3,13 +3,15 @@ Installation The LAMMPS Python module enables calling the :ref:`LAMMPS C library API ` from Python by dynamically loading functions in the LAMMPS shared library through the -Python ``ctypes`` module. Because of the dynamic loading, it is required that -LAMMPS is compiled in *shared mode*. +Python ``ctypes`` module. Because of the dynamic loading, it is required that +LAMMPS is compiled in :ref:`"shared" mode `. It is also recommended +to compile LAMMPS with :ref:`C++ exceptions ` enabled. Two files are necessary for Python to be able to invoke LAMMPS code: -* LAMMPS Python Module (``python/lammps.py``) -* LAMMPS Shared Library (e.g., ``liblammps.so``) +* The LAMMPS Python Module (``lammps.py``) from the ``python`` folder +* The LAMMPS Shared Library (``liblammps.so``, ``liblammps.dylib`` or ``liblammps.dll``) + from the folder where you compiled LAMMPS. .. _python_virtualenv: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment @@ -24,7 +26,7 @@ Installing the LAMMPS Python Module and Shared Library Making LAMMPS usable within Python and vice versa requires putting the LAMMPS Python module into a location that the Python interpreter can find and installing the LAMMPS shared library into a folder that the dynamic loader -searches. For some potentials LAMMPS also needs to know where it can find the +searches. For some potentials LAMMPS also needs to know where it can find the necessary potential files. Both CMake and traditional make build options offer ways to automate these tasks. @@ -225,13 +227,17 @@ Both CMake and traditional make build options offer ways to automate these tasks LAMMPS and its Python module can be installed together into a Python virtual environment. - A virtual environment is a minimalistic Python installation inside of a - folder. It allows isolating and customizing a Python environment that is - independent from a user or system installation. This gives you the flexibility - to install (newer) versions of Python packages that would potentially conflict - with already installed system packages. It also does not requite any superuser - privileges. See `PEP 405: Python Virtual Environments `_ - for more information. + A virtual environment is a minimal Python installation inside of a + folder. It allows isolating and customizing a Python environment + that is mostly independent from a user or system installation. + For the core Python environment, it uses symbolic links to the + system installation and thus it can be set up quickly and will not + take up much disk space. This gives you the flexibility to + install (newer/different) versions of Python packages that would + potentially conflict with already installed system packages. It + also does not requite any superuser privileges. See `PEP 405: + Python Virtual Environments `_ for more + information. To install into the virtual environment, it is first activated and the ``CMAKE_INSTALL_PREFIX`` is set to value of the ``$VIRTUAL_ENV`` environment @@ -266,7 +272,7 @@ Both CMake and traditional make build options offer ways to automate these tasks 2. Modify the ``$HOME/myenv/bin/activate`` script - The ``activate`` script initializes the environment for use. For convienience, + The ``activate`` script initializes the environment for use. For convenience, add two additional lines at the end of this script: * To allow the dynamic library loader to find the LAMMPS shared library, add diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index e9aba544f9..cbc656b602 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -1,42 +1,60 @@ Overview ======== -The LAMMPS distribution includes a python directory with all you need -to run LAMMPS from Python. The python/lammps.py file wraps the LAMMPS -library interface, with one wrapper function per LAMMPS library -function. This file makes it is possible to do the following either -from a Python script, or interactively from a Python prompt: create -one or more instances of LAMMPS, invoke LAMMPS commands or give it an -input script, run LAMMPS incrementally, extract LAMMPS results, an -modify internal LAMMPS variables. From a Python script you can do -this in serial or parallel. Running Python interactively in parallel -does not generally work, unless you have a version of Python that -extends Python to enable multiple instances of Python to read what you -type. +The LAMMPS distribution includes a python directory with all you need to +run LAMMPS from Python. The ``python/lammps.py`` contains :doc:`the +"lammps" Python ` that wraps the LAMMPS C-library +interface. This file makes it is possible to do the following either +from a Python script, or interactively from a Python prompt: -To do all of this, you must first build LAMMPS as a shared library, -then insure that your Python can find the python/lammps.py file and -the shared library. +- create one or more instances of LAMMPS +- invoke LAMMPS commands or read them from an input script +- run LAMMPS incrementally +- extract LAMMPS results +- and modify internal LAMMPS data structures. + +From a Python script you can do this in serial or parallel. Running +Python interactively in parallel does not generally work, unless you +have a version of Python that extends Python to enable multiple +instances of Python to read what you type. + +To do all of this, you must build LAMMPS in :ref:`"shared" mode ` +and make certain that your Python interpreter can find the ``lammps.py`` +file and the LAMMPS shared library file. + +.. _ctypes: https://docs.python.org/3/library/ctypes.html + +The Python wrapper for LAMMPS uses the `ctypes `_ package in +Python, which auto-generates the interface code needed between Python +and a set of C-style library functions. Ctypes has been part of the +standard Python distribution since version 2.5. You can check which +version of Python you have by simply typing "python" at a shell prompt. +Below is an example output for Python version 3.8.5. + +.. code-block:: + + $ python + Python 3.8.5 (default, Aug 12 2020, 00:00:00) + [GCC 10.2.1 20200723 (Red Hat 10.2.1-1)] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> -The Python wrapper for LAMMPS uses the "ctypes" package in Python, -which auto-generates the interface code needed between Python and a -set of C-style library functions. Ctypes is part of standard Python -for versions 2.5 and later. You can check which version of Python you -have by simply typing "python" at a shell prompt. .. warning:: Python 2 support is deprecated - While the LAMMPS Python module was originally developed to support both - Python 2 and 3, Python 2 is no longer maintained as of `January 1, 2020 `_. - Therefore, we will no longer backport any new features to Python 2 and - highly recommend using Python versions 3.6+. + While the LAMMPS Python module was originally developed to support + both, Python 2 and 3, any new code is only tested with Python 3. + Please note that Python 2 is no longer maintained as of `January 1, + 2020 `_. Therefore, we + highly recommend using Python version 3.6 or later. Compatibility to + Python 2 will be removed eventually. --------- LAMMPS can work together with Python in three ways. First, Python can -wrap LAMMPS through the its :doc:`library interface `, so +wrap LAMMPS through the its :doc:`library interface `, so that a Python script can create one or more instances of LAMMPS and -launch one or more simulations. In Python lingo, this is called +launch one or more simulations. In Python terms, this is referred to as "extending" Python with a LAMMPS module. .. figure:: JPG/python-invoke-lammps.png @@ -45,27 +63,28 @@ launch one or more simulations. In Python lingo, this is called Launching LAMMPS via Python -Second, the lower-level Python interface can be used indirectly through -the provided :code:`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. -These wrappers try to simplify the usage of LAMMPS in Python by -providing an object-based interface to common LAMMPS functionality. -They also reduces the amount of code necessary to parameterize LAMMPS -scripts through Python and make variables and computes directly -accessible. +Second, the lower-level Python interface in the :py:class:`lammps Python +class ` can be used indirectly through the provided +:py:class:`PyLammps ` and :py:class:`IPyLammps +` wrapper classes, also written in Python. These +wrappers try to simplify the usage of LAMMPS in Python by providing a +more object-based interface to common LAMMPS functionality. They also +reduce the amount of code necessary to parameterize LAMMPS scripts +through Python and make variables and computes directly accessible. .. figure:: JPG/pylammps-invoke-lammps.png :figclass: align-center Using the PyLammps / IPyLammps wrappers -Third, LAMMPS can use the Python interpreter, so that a LAMMPS -input script or styles can invoke Python code directly, and pass -information back-and-forth between the input script and Python -functions you write. This Python code can also callback to LAMMPS -to query or change its attributes through the LAMMPS Python module -mentioned above. In Python lingo, this is "embedding" Python in -LAMMPS. When used in this mode, Python can perform script operations -that the simple LAMMPS input script syntax can not. +Third, LAMMPS can use the Python interpreter, so that a LAMMPS input +script or styles can invoke Python code directly, and pass information +back-and-forth between the input script and Python functions you write. +This Python code can also call back to LAMMPS to query or change its +attributes through the LAMMPS Python module mentioned above. In Python +terms, this is called "embedding" Python into LAMMPS. When used in this +mode, Python can perform script operations that the simple LAMMPS input +script syntax can not. .. figure:: JPG/lammps-invoke-python.png :figclass: align-center diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index 726705e30e..1f91dfadd7 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -68,7 +68,7 @@ Note that without the mpi4py specific lines from ``test.py`` running the script with ``mpirun`` on :math:`P` processors would lead to :math:`P` independent simulations to run parallel, each with a single processor. Therefore, if you use the mpi4py lines and you see multiple LAMMPS -single processor outputs. that means mpi4py isn't working correctly. +single processor outputs, mpi4py is not working correctly. Also note that once you import the mpi4py module, mpi4py initializes MPI for you, and you can use MPI calls directly in your Python script, as diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index 7c23980015..777f226e68 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -446,7 +446,7 @@ computes, fixes, or variables in LAMMPS using the :py:mod:`lammps` module. :py:meth:`lammps.numpy.extract_compute() `, :py:meth:`lammps.numpy.extract_fix() `, and :py:meth:`lammps.numpy.extract_variable() ` are - equivlanent NumPy implementations that return NumPy arrays instead of ``ctypes`` pointers. + equivalent NumPy implementations that return NumPy arrays instead of ``ctypes`` pointers. The :py:meth:`lammps.set_variable() ` method sets an existing string-style variable to a new string value, so that subsequent LAMMPS From 5d08f629abbb28684684c04bcf58f2c55671d079 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 05:30:09 -0400 Subject: [PATCH 31/34] fix typo --- doc/src/Install_patch.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Install_patch.rst b/doc/src/Install_patch.rst index 0bbd7bbf00..3ccb9fef03 100644 --- a/doc/src/Install_patch.rst +++ b/doc/src/Install_patch.rst @@ -10,7 +10,7 @@ If you prefer to download a tarball, as described on the :doc:`tarball download ` page, you can stay current by downloading "patch files" when new patch releases are made. A link to a patch file is posted on the -`bugf fixes and new feature page `_ +`bug fixes and new feature page `_ of the LAMMPS website, along with a list of changed files and details about what is in the new patch release. This page explains how to apply the patch file to your local From 1afd9b1c83a1ee15be5170c392fb8090736484e1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 12:15:56 -0400 Subject: [PATCH 32/34] update Python installation docs --- doc/src/Python_install.rst | 678 +++++++++----------- doc/utils/sphinx-config/false_positives.txt | 1 + 2 files changed, 308 insertions(+), 371 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 5c244e6c16..234a98ca0c 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -1,21 +1,22 @@ Installation ************ -The LAMMPS Python module enables calling the :ref:`LAMMPS C library API ` -from Python by dynamically loading functions in the LAMMPS shared library through the -Python ``ctypes`` module. Because of the dynamic loading, it is required that -LAMMPS is compiled in :ref:`"shared" mode `. It is also recommended -to compile LAMMPS with :ref:`C++ exceptions ` enabled. +The LAMMPS Python module enables calling the :ref:`LAMMPS C library API +` from Python by dynamically loading functions in the +LAMMPS shared library through the Python `ctypes `_ +module. Because of the dynamic loading, it is required that LAMMPS is +compiled in :ref:`"shared" mode `. It is also recommended to +compile LAMMPS with :ref:`C++ exceptions ` enabled. Two files are necessary for Python to be able to invoke LAMMPS code: * The LAMMPS Python Module (``lammps.py``) from the ``python`` folder -* The LAMMPS Shared Library (``liblammps.so``, ``liblammps.dylib`` or ``liblammps.dll``) - from the folder where you compiled LAMMPS. - +* The LAMMPS Shared Library (``liblammps.so``, ``liblammps.dylib`` or + ``liblammps.dll``) from the folder where you compiled LAMMPS. +.. _ctypes: https://docs.python.org/3/library/ctypes.html .. _python_virtualenv: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment -.. _python_venv: https://docs.python.org/3.8/library/venv.html +.. _python_venv: https://docs.python.org/3/library/venv.html .. _python_pep405: https://www.python.org/dev/peps/pep-0405 .. _python_install_guides: @@ -23,27 +24,60 @@ Two files are necessary for Python to be able to invoke LAMMPS code: Installing the LAMMPS Python Module and Shared Library ====================================================== -Making LAMMPS usable within Python and vice versa requires putting the LAMMPS -Python module into a location that the Python interpreter can find and -installing the LAMMPS shared library into a folder that the dynamic loader -searches. For some potentials LAMMPS also needs to know where it can find the -necessary potential files. +Making LAMMPS usable within Python and vice versa requires putting the +LAMMPS Python module file (``lammps.py``) into a location where the +Python interpreter can find it and installing the LAMMPS shared library +into a folder that the dynamic loader searches or into the same folder +where the ``lammps.py`` file is. There are multiple ways to achieve +this. -Both CMake and traditional make build options offer ways to automate these tasks. +#. Install both files into a Python ``site-packages`` folder, either + system-wide or in the corresponding user-specific folder. This way no + additional environment variables need to be set, but the shared + library is otherwise not accessible. + +#. Do a full LAMMPS installation of libraries, executables, selected + headers, documentation (if enabled), and supporting files (only + available via CMake), which can also be either system-wide or into + user specific folders. + +#. Do an installation into a virtual environment. This can either be + an installation of the python module only or a full installation. + +#. Leave the files where they are in the source/development tree and + adjust some environment variables. .. tabs:: - .. tab:: CMake (local user) + .. tab:: Full install (CMake-only) - LAMMPS can be configured and compiled as shared library with CMake by enabling the ``BUILD_SHARED_LIBS`` option. - The file name of the shared library depends on the platform (Unix/Linux, MacOS, Windows) and the build configuration - being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name of the - shared library and executable is determined. + :ref:`Build the LAMMPS executable and library ` with + ``-DBUILD_SHARED_LIBS=on``, ``-DLAMMPS_EXCEPTIONS=on`` and + ``-DPKG_PYTHON=on`` (The first option is required, the other two + are optional by recommended). The exact file name of the shared + library depends on the platform (Unix/Linux, MacOS, Windows) and + the build configuration being used. The installation base folder + is already set by default to the ``$HOME/.local`` directory, but + it can be changed to a custom location defined by the + ``CMAKE_INSTALL_PREFIX`` CMake variable. This uses a folder + called ``build`` to store files generated during compilation. + Make certain this folder is empty or does not exist if you do not + want to inherit any settings from a previous compilation attempt. - After compilation, the generated executables, shared library, Python module, - and other files can be installed to a custom location defined by the - ``CMAKE_INSTALL_PREFIX`` setting. By default, this is set to the current - user's ``$HOME/.local`` directory. This leads to an installation to the following locations: + .. code-block:: bash + + # configure LAMMPS compilation + cmake -B build -C cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on cmake + + # compile LAMMPS + cmake --build build + + # install LAMMPS into $HOME/.local + cmake --install build + + + This leads to an installation to the following locations: +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | @@ -54,96 +88,17 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``$HOME/.local/lib/`` (32bit) | | | | * ``$HOME/.local/lib64/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS executable | ``$HOME/.local/bin/`` | | + | LAMMPS executable | * ``$HOME/.local/bin/`` | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS potential files | ``$HOME/.local/share/lammps/potentials/`` | | + | LAMMPS potential files | * ``$HOME/.local/share/lammps/potentials/`` | Set ``LAMMPS_POTENTIALS`` environment variable to this path | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - The following is a minimal working example: - - 1. Install LAMMPS Shared Library and Python module using CMake - - .. code-block:: bash - - # create and change into build directory - mkdir build - cd build - - # configure LAMMPS compilation - # compile with shared library, PYTHON package, and C++ exceptions - # TODO: add more options to customize your LAMMPS installation - cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - ../cmake - - # compile LAMMPS (in parallel for faster builds) - cmake --build . --parallel - - # install LAMMPS into $HOME/.local - cmake --install . - - 2. Configure Environment Variables - - To use this installation you have to ensure that the folder containing - the LAMMPS shared library is part of the ``LD_LIBRARY_PATH`` environment variable (or - ``DYLD_LIBRARY_PATH`` on MacOS). This allows the dynamic library loader of your system - to find the LAMMPS shared library when needed. - - .. code-block:: bash - - # Unix/Linux - export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH - - # MacOS - export DYLD_LIBRARY_PATH=$HOME/.local/lib:$DYLD_LIBRARY_PATH - - - LAMMPS will also need to know the location of the folder - containing its potential files. This can be set with the ``LAMMPS_POTENTIALS`` - environment variable: - - .. code-block:: bash - - export LAMMPS_POTENTIALS=$HOME/.local/share/lammps/potentials - - If you are planning to also use the LAMMPS executable (e.g., ``lmp``), also set the ``PATH`` variable: - - .. code-block:: bash - - export PATH=$HOME/.local/bin:$PATH - - To set these environment variables for each new shell, add the above - ``export`` commands at the end of the ``$HOME/.bashrc`` file. - - 3. Verify if LAMMPS can be successfully started from Python - - .. code-block:: bash - - $ python - Python 3.8.5 (default, Sep 5 2020, 10:50:12) - [GCC 10.2.0] on linux - Type "help", "copyright", "credits" or "license" for more information. - >>> import lammps - >>> lmp = lammps.lammps() - LAMMPS (18 Sep 2020) - using 1 OpenMP thread(s) per MPI task - >>> - - .. note:: - - If you recompile LAMMPS, you will have to also rerun the install step to - ensure the latest Python module and shared library are installed. - - .. tab:: CMake (system-wide) - - A system-wide installation allows all users to run Python with LAMMPS - included. Note that during the installation step you will need to either be - root or use ``sudo`` to elevate your write privileges. The compilation steps are identical - to the local user installation, with the only difference that - ``CMAKE_INSTALL_PREFIX`` is set to system folder such as ``/usr``. This leads to - the following installation locations: + For a system-wide installation you need to set + ``CMAKE_INSTALL_PREFIX`` to a system folder like ``/usr`` (or + ``/usr/local``). The installation step (**not** the + configuration/compilation) needs to be done with superuser + privilege, e.g. by using ``sudo cmake --install build``. The + installation folders will then by changed to: +------------------------+---------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | @@ -154,260 +109,88 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``/usr/lib/`` (32bit) | | | | * ``/usr/lib64/`` (64bit) | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS executable | ``/usr/bin/`` | | + | LAMMPS executable | * ``/usr/bin/`` | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS potential files | ``/usr/share/lammps/potentials/`` | | + | LAMMPS potential files | * ``/usr/share/lammps/potentials/`` | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - The following is a minimal working example: + To be able to use the "user" installation you have to ensure that + the folder containing the LAMMPS shared library is either included + in a path searched by the shared linker (e.g. like + ``/usr/lib64/``) or part of the ``LD_LIBRARY_PATH`` environment + variable (or ``DYLD_LIBRARY_PATH`` on MacOS). Otherwise you will + get an error when trying to create a LAMMPS object through the + Python module. - 1. Install LAMMPS shared library and Python module into system folder + .. code-block:: bash - .. code-block:: bash + # Unix/Linux + export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH - # configure LAMMPS compilation - # compile with shared library, PYTHON package, and C++ exceptions - # TODO: add more options to customize your LAMMPS installation - cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - -D CMAKE_INSTALL_PREFIX=/usr \ - ../cmake + # MacOS + export DYLD_LIBRARY_PATH=$HOME/.local/lib:$DYLD_LIBRARY_PATH - # compile LAMMPS (in parallel for faster builds) - cmake --build . --parallel + If you plan to use the LAMMPS executable (e.g., ``lmp``), you may + also need to adjust the ``PATH`` environment variable (but many + newer Linux distributions already have ``$HOME/.local/bin`` + included). Example: - # install LAMMPS into /usr (requires write access) - sudo cmake --install . + .. code-block:: bash - Unlike the local user installation, no additional environment - variables need to be set. The system locations such as ``/usr/lib``, and - ``/usr/lib64`` are already part of the search path of the dynamic library - loader. Therefore ``LD_LIBRARY_PATH`` (or ``DYLD_LIBRARY_PATH`` on MacOS) does not - have be set. The same is true for ``PATH``. + export PATH=$HOME/.local/bin:$PATH - All other environment variables will be automatically set when - launching a new shell. This is due to files installed in system folders - ``/etc/profile.d/``, such as ``/etc/profile.d/lammps.sh``, that are loaded when a - login shell is started. + To make those changes permanent, you can add the commands to your + ``$HOME/.bashrc`` file. For a system-wide installation is is not + necessary due to files installed in system folders that are loaded + automatically when a login shell is started. - 2. Open a new shell + .. tab:: Python module only - Close the current shell and open a new one or use ``source /etc/profile`` to - update your environment + Compile LAMMPS with either :doc:`CMake ` or the + :doc:`traditional make ` procedure in :ref:`shared + mode `. After compilation has finished type (in the + compilation folder): - .. note:: + .. code-block:: bash - On some systems you might also need to log out your current user and log back in. + make install-python - 3. Verify if LAMMPS can be successfully started from Python - - Open a new terminal and test if LAMMPS can be started from within Python: - - .. code-block:: bash - - $ python - Python 3.8.5 (default, Sep 5 2020, 10:50:12) - [GCC 10.2.0] on linux - Type "help", "copyright", "credits" or "license" for more information. - >>> import lammps - >>> lmp = lammps.lammps() - LAMMPS (18 Sep 2020) - using 1 OpenMP thread(s) per MPI task - >>> - - .. note:: - - If you recompile LAMMPS, you will have to also rerun the install step to - ensure the latest Python module and shared library are installed. - - .. tab:: CMake (virtual environment) - - LAMMPS and its Python module can be installed together into a - Python virtual environment. - - A virtual environment is a minimal Python installation inside of a - folder. It allows isolating and customizing a Python environment - that is mostly independent from a user or system installation. - For the core Python environment, it uses symbolic links to the - system installation and thus it can be set up quickly and will not - take up much disk space. This gives you the flexibility to - install (newer/different) versions of Python packages that would - potentially conflict with already installed system packages. It - also does not requite any superuser privileges. See `PEP 405: - Python Virtual Environments `_ for more - information. - - To install into the virtual environment, it is first activated and the - ``CMAKE_INSTALL_PREFIX`` is set to value of the ``$VIRTUAL_ENV`` environment - variable. This leads to the following installation locations: + This will try to install (only) the shared library and the python + module into a system folder and if that fails (due to missing + write permissions) will instead do the installation to a user + folder under ``$HOME/.local``. For a system-wide installation you + would have to gain superuser privilege, e.g. though ``sudo`` +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | +========================+===========================================================+=============================================================+ - | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | - | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + | LAMMPS Python Module | * ``$HOME/.local/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$HOME/.local/lib64/pythonX.Y/site-packages/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | - | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | - +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS executable | ``$VIRTUAL_ENV/bin/`` | | - +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS potential files | ``$VIRTUAL_ENV/share/lammps/potentials/`` | | + | LAMMPS shared library | * ``$HOME/.local/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$HOME/.local/lib64/pythonX.Y/site-packages/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - The following is a minimal working example using CMake: + For a system-wide installation those folders would then become. - 1. Create a virtual environment + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===================================================+=============================================================+ + | LAMMPS Python Module | * ``/usr/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``/usr/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``/usr/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``/usr/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - Use the `venv `_ module to create a new environment - inside of the folder ``$HOME/myenv``. For Python versions prior 3.3, - you can use `virtualenv `_ instead. + No environment variables need to be set for those, as those + folders are searched by default by Python or the LAMMPS Python + module. - .. code-block:: bash - - # create virtual environment in folder $HOME/myenv - python3 -m venv $HOME/myenv - - 2. Modify the ``$HOME/myenv/bin/activate`` script - - The ``activate`` script initializes the environment for use. For convenience, - add two additional lines at the end of this script: - - * To allow the dynamic library loader to find the LAMMPS shared library, add - the folder where it will be installed to ``LD_LIBRARY_PATH`` environment - variable (``DYLD_LIBRARY_PATH`` on MacOS). When installing LAMMPS into a - virtual environment this location will be ``$VIRTUAL_ENV/lib``. - Run the following command to add the necessary line to the ``activate`` script: - - .. code-block:: bash - - # Unix/Linux - echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate - - # MacOS - echo 'export DYLD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate - - * Any LAMMPS installation will need to know the location of the folder containing its potential files. - This can be set with the ``LAMMPS_POTENTIALS`` environment variable. When installing LAMMPS into a - virtual environment this location will be ``$VIRTUAL_ENV/share/lammps/potentials``. - Run the following command to add the change in the ``activate`` script: - - .. code-block:: bash - - echo 'export LAMMPS_POTENTIALS=$VIRTUAL_ENV/share/lammps/potentials' >> $HOME/myenv/bin/activate - - 3. Compile LAMMPS and install it into virtual environment - - .. code-block:: bash - - # create and change into build directory - mkdir build - cd build - - # activate environment, this sets VIRTUAL_ENV and other environment variables - source $HOME/myenv/bin/activate - - # configure LAMMPS compilation - # compile with shared library, PYTHON package, and C++ exceptions - # and install into virtual environment folder (VIRTUAL_ENV) - # TODO: add more options to customize your LAMMPS installation - (myenv)$ cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV \ - ../cmake - - # compile LAMMPS (in parallel for faster builds) - (myenv)$ cmake --build . --parallel - - # install LAMMPS into myenv - (myenv)$ cmake --install . - - 4. Verify if LAMMPS can be successfully started from Python - - .. code-block:: bash - - (myenv)$ python - Python 3.8.5 (default, Sep 5 2020, 10:50:12) - [GCC 10.2.0] on linux - Type "help", "copyright", "credits" or "license" for more information. - >>> import lammps - >>> lmp = lammps.lammps() - LAMMPS (18 Sep 2020) - using 1 OpenMP thread(s) per MPI task - >>> - - .. note:: - - If you recompile LAMMPS, you will have to also rerun the install step to - ensure the virtual environment contains the latest Python module and shared - library. - - - .. tab:: Traditional make - - Instructions on how to build LAMMPS as a shared library are given on - the :doc:`Build_basics ` doc page. A shared library is - one that is dynamically loadable, which is what Python requires to - wrap LAMMPS. On Linux this is a library file that ends in ``.so``, not - ``.a``. - - From the ``src`` directory, type - - .. code-block:: bash - - make foo mode=shared - - where ``foo`` is the machine target name, such as ``mpi`` or ``serial``. - This should create the file ``liblammps_foo.so`` in the ``src`` directory, as - well as a soft link ``liblammps.so``, which is what the Python wrapper will - load by default. Note that if you are building multiple machine - versions of the shared library, the soft link is always set to the - most recently built version. - - .. note:: - - If you are building LAMMPS with an MPI or FFT library or other - auxiliary libraries (used by various packages), then all of these - extra libraries must also be shared libraries. If the LAMMPS - shared-library build fails with an error complaining about this, see - the :doc:`Build_basics ` doc page. - - You can achieve that Python can find these files in one of two ways: - - * set two environment variables pointing to the location in the source tree - * run ``make install-python`` or run the ``python/install.py`` script explicitly - - When calling ``make install-python`` LAMMPS will try to install the - python module and the shared library into the python site-packages folders; - either the system-wide ones, or the local users ones (in case of insufficient - permissions for the global install). Python will then find the module - and shared library file automatically. The exact location of these folders - depends on your python version and your operating system. - - You can override the python version to version x.y when calling - ``make`` with ``PYTHON=pythonX.Y``. - - If you set the paths to these files as environment variables, you only - have to do it once. For the csh or tcsh shells, add something like - this to your ``~/.cshrc`` file, one line for each of the two files: - - .. code-block:: csh - - setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/python - setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src - - On MacOS you may also need to set ``DYLD_LIBRARY_PATH`` accordingly. - For Bourne/Korn shells accordingly into the corresponding files using - the ``export`` shell builtin. - - If you use ``make install-python`` or the ``python/install.py`` script, you need - to invoke it every time you rebuild LAMMPS (as a shared library) or - make changes to the ``python/lammps.py`` file, so that the site-packages - files are updated with the new version. + For the traditional make process you can override the python + version to version x.y when calling ``make`` with + ``PYTHON=pythonX.Y``. For a CMake based compilation this choice + has to be made during the CMake configuration step. If the default settings of ``make install-python`` are not what you want, you can invoke ``install.py`` from the python directory manually as @@ -423,14 +206,156 @@ Both CMake and traditional make build options offer ways to automate these tasks If you use a legacy installation folder, you will need to set your ``PYTHONPATH`` and ``LD_LIBRARY_PATH`` (and/or ``DYLD_LIBRARY_PATH``) environment - variables accordingly, as described above. + variables accordingly as explained in the description for "In place use". - Note that if you want Python to be able to load different versions of - the LAMMPS shared library (see :ref:`python_create_lammps`), you will - need to manually copy files like ``liblammps_mpi.so`` into the appropriate - system directory. This is not needed if you set the ``LD_LIBRARY_PATH`` - environment variable as described above. + .. tab:: Virtual environment + A virtual environment is a minimal Python installation inside of a + folder. It allows isolating and customizing a Python environment + that is mostly independent from a user or system installation. + For the core Python environment, it uses symbolic links to the + system installation and thus it can be set up quickly and will not + take up much disk space. This gives you the flexibility to + install (newer/different) versions of Python packages that would + potentially conflict with already installed system packages. It + also does not requite any superuser privileges. See `PEP 405: + Python Virtual Environments `_ for more + information. + + To create a virtual environment in the folder ``$HOME/myenv``, + use the `venv `_ module as follows. + + .. code-block:: bash + + # create virtual environment in folder $HOME/myenv + python3 -m venv $HOME/myenv + + For Python versions prior 3.3 you can use `virtualenv + `_ command instead of "python3 -m venv". This + step has to be done only once. + + To activate the virtual environment type: + + .. code-block:: bash + + source $HOME/myenv/bin/activate + + This has to be done every time you log in or open a new terminal + window and after you turn off the virtual environment with the + ``deactivate`` command. + + When using CMake to build LAMMPS, you need to set + ``CMAKE_INSTALL_PREFIX`` to the value of the ``$VIRTUAL_ENV`` + environment variable during the configuration step. For the + traditional make procedure, not additional steps are needed. + After compiling LAMMPS you can do a "Python module only" + installation with ``make install-python`` and the LAMMPS Python + module and the shared library file are installed into the + following locations: + + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + + If you do a full installation (CMake only) with "install", this + leads to the following installation locations: + + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | + | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | * ``$VIRTUAL_ENV/bin/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | * ``$VIRTUAL_ENV/share/lammps/potentials/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + + In that case you need to modify the ``$HOME/myenv/bin/activate`` + script in a similar fashion you need to update your + ``$HOME/.bashrc`` file to include the shared library and + executable locations in ``LD_LIBRARY_PATH`` (or + ``DYLD_LIBRARY_PATH`` on MacOS) and ``PATH``, respectively. + + For example with: + + .. code-block:: bash + + # Unix/Linux + echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + # MacOS + echo 'export DYLD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + .. tab:: In place usage + + You can also :doc:`compile LAMMPS ` as usual in + :ref:`"shared" mode ` leave the shared library and Python + module files inside the source/compilation folders. Instead of + copying the files where they can be found, you need to set the environment + variables ``PYTHONPATH`` (for the Python module) and + ``LD_LIBRARY_PATH`` (or ``DYLD_LIBRARY_PATH`` on MacOS + + For Bourne shells (bash, ksh and similar) the commands are: + + .. code-block:: bash + + export PYTHONPATH=${PYTHONPATH}:${HOME}/lammps/python + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/lammps/src + + For the C-shells like csh or tcsh the commands are: + + .. code-block:: csh + + setenv PYTHONPATH ${PYTHONPATH}:${HOME}/lammps/python + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/lammps/src + + On MacOS you may also need to set ``DYLD_LIBRARY_PATH`` accordingly. + You can make those changes permanent by editing your ``$HOME/.bashrc`` + or ``$HOME/.login`` files, respectively. + + +To verify if LAMMPS can be successfully started from Python, start the +Python interpreter, load the ``lammps`` Python module and create a +LAMMPS instance. This should not generate an error message and produce +output similar to the following: + + .. code-block:: bash + + $ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + +.. note:: + + Unless you opted for "In place use", you will have to rerun the installation + any time you recompile LAMMPS to ensure the latest Python module and shared + library are installed and used. + +.. note:: + + If you want Python to be able to load different versions of the + LAMMPS shared library with different settings, you will need to + manually copy the files under different names + (e.g. ``liblammps_mpi.so`` or ``liblammps_gpu.so``) into the + appropriate folder as indicated above. You can then select the + desired library through the *name* argument of the LAMMPS object + constructor (see :ref:`python_create_lammps`). .. _python_install_mpi4py: @@ -451,49 +376,60 @@ and as of version 2.0.0 mpi4py allows passing a custom MPI communicator to the LAMMPS constructor, which means one can easily run one or more LAMMPS instances on subsets of the total MPI ranks. -Install mpi4py via ``pip`` (version 3.0.3 as of Sep 2020): +Installation of mpi4py (version 3.0.3 as of Sep 2020) can be done as +follows: -.. tabs:: +- Via ``pip`` into a local user folder with: - .. tab:: local user + .. code-block:: bash - .. code-block:: bash + pip install --user mpi4py - pip install --user mpi4py +- Via ``dnf`` into a system folder for RedHat/Fedora systems: - .. tab:: system-wide + .. code-block:: bash - .. code-block:: bash + # for use with OpenMPI + sudo dnf install python3-mpi4py-openmpi + # for use with MPICH + sudo dnf install python3-mpi4py-openmpi - sudo pip install mpi4py +- Via ``pip`` into a system folder (not recommended): - .. tab:: virtual environment + .. code-block:: bash - .. code-block:: bash + sudo dnf install mpi4py - $ source $HOME/myenv/activate - (myenv)$ pip install mpi4py +- Via ``pip`` into a virtual environment (see above): + + .. code-block:: bash + + $ source $HOME/myenv/activate + (myenv)$ pip install mpi4py .. _mpi4py_install: https://mpi4py.readthedocs.io/en/stable/install.html -For more detailed installation instructions, please see the `mpi4py installation `_ page. +For more detailed installation instructions and additional options, +please see the `mpi4py installation `_ page. .. note:: - To use mpi4py and LAMMPS in parallel from Python, you must - insure both are using the same version of MPI. If you only have one - MPI installed on your system, this is not an issue, but it can be if - you have multiple MPIs. Your LAMMPS build is explicit about which MPI - it is using, since it is either detected during CMake configuration or - in the traditional make build system you specify the details in your - low-level ``src/MAKE/Makefile.foo`` file. - mpi4py uses the ``mpicc`` command to find - information about the MPI it uses to build against. And it tries to - load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find + To use ``mpi4py`` and LAMMPS in parallel from Python, you must make + certain that both are using the same implementation and version of an + MPI library. If you only have one MPI library installed on your + system, this is not an issue, but it can be if you have multiple MPI + installations (e.g. on an HPC cluster to be selected through + environment modules). Your LAMMPS build is explicit about which MPI + it is using, since it is either detected during CMake configuration + or in the traditional make build system you specify the details in + your low-level ``src/MAKE/Makefile.foo`` file. The installation + process of ``mpi4py`` uses the ``mpicc`` command to find information + about the MPI it uses to build against. And it tries to load + "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find the MPI library that LAMMPS is using. If you have problems running both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by moving other MPI installations so that mpi4py finds - the right one. + address, e.g. by loading the module for different MPI installation so + that mpi4py finds the right one. If you have successfully installed mpi4py, you should be able to run Python and type diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index b276933a88..cabe8182e7 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -3285,6 +3285,7 @@ vectorized Vegt vel Velázquez +venv Verlag verlet Verlet From 2f857176c8f8c59e61052469498bfc73d976e2a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 13:45:46 -0400 Subject: [PATCH 33/34] stay compatible with cmake older than version 3.14 --- doc/src/Python_install.rst | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 234a98ca0c..0626c23860 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -61,23 +61,25 @@ this. it can be changed to a custom location defined by the ``CMAKE_INSTALL_PREFIX`` CMake variable. This uses a folder called ``build`` to store files generated during compilation. - Make certain this folder is empty or does not exist if you do not - want to inherit any settings from a previous compilation attempt. .. code-block:: bash + # create build folder + mkdir build + cd build + # configure LAMMPS compilation - cmake -B build -C cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on cmake + cmake -C cmake/presets/minimal.cmake -D BUILD_SHARED_LIBS=on \ + -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on cmake # compile LAMMPS - cmake --build build + cmake --build . # install LAMMPS into $HOME/.local - cmake --install build + cmake --install . - This leads to an installation to the following locations: + This leads to an installation to the following locations: +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | @@ -97,7 +99,7 @@ this. ``CMAKE_INSTALL_PREFIX`` to a system folder like ``/usr`` (or ``/usr/local``). The installation step (**not** the configuration/compilation) needs to be done with superuser - privilege, e.g. by using ``sudo cmake --install build``. The + privilege, e.g. by using ``sudo cmake --install .``. The installation folders will then by changed to: +------------------------+---------------------------------------------------+-------------------------------------------------------------+ From 9274912a81fddb287e21a3477e3eb193e1862fb7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 16:19:43 -0400 Subject: [PATCH 34/34] add note about no longer supporting PyPar and remove instructions related to it. --- doc/src/Python_install.rst | 71 +++++++++++++++++++------------------- doc/src/Python_run.rst | 42 ---------------------- 2 files changed, 36 insertions(+), 77 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 0626c23860..6927d0745f 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -31,16 +31,16 @@ into a folder that the dynamic loader searches or into the same folder where the ``lammps.py`` file is. There are multiple ways to achieve this. -#. Install both files into a Python ``site-packages`` folder, either - system-wide or in the corresponding user-specific folder. This way no - additional environment variables need to be set, but the shared - library is otherwise not accessible. - #. Do a full LAMMPS installation of libraries, executables, selected headers, documentation (if enabled), and supporting files (only available via CMake), which can also be either system-wide or into user specific folders. +#. Install both files into a Python ``site-packages`` folder, either + system-wide or in the corresponding user-specific folder. This way no + additional environment variables need to be set, but the shared + library is otherwise not accessible. + #. Do an installation into a virtual environment. This can either be an installation of the python module only or a full installation. @@ -368,15 +368,16 @@ If you wish to run LAMMPS in parallel from Python, you need to extend your Python with an interface to MPI. This also allows you to make MPI calls directly from Python in your script, if you desire. -We have tested this with mpi4py and pypar: +We have tested this with `MPI for Python `_ +(aka mpi4py) and you will find installation instruction for it below. -* `MPI for Python `_ -* `pypar `_ +.. note:: -We recommend the use of mpi4py as it is the more complete MPI interface, -and as of version 2.0.0 mpi4py allows passing a custom MPI communicator -to the LAMMPS constructor, which means one can easily run one or more -LAMMPS instances on subsets of the total MPI ranks. + Older LAMMPS versions were also tested with `PyPar `_ + but we can no longer test it, since it does not work with the Python + (3.x) versions on our test servers. Since there have been no updates + to PyPar visible in its repository since November 2016 we have to assume + it is no longer maintained. Installation of mpi4py (version 3.0.3 as of Sep 2020) can be done as follows: @@ -396,12 +397,6 @@ follows: # for use with MPICH sudo dnf install python3-mpi4py-openmpi -- Via ``pip`` into a system folder (not recommended): - - .. code-block:: bash - - sudo dnf install mpi4py - - Via ``pip`` into a virtual environment (see above): .. code-block:: bash @@ -409,29 +404,34 @@ follows: $ source $HOME/myenv/activate (myenv)$ pip install mpi4py +- Via ``pip`` into a system folder (not recommended): + + .. code-block:: bash + + sudo pip install mpi4py + .. _mpi4py_install: https://mpi4py.readthedocs.io/en/stable/install.html For more detailed installation instructions and additional options, please see the `mpi4py installation `_ page. -.. note:: - To use ``mpi4py`` and LAMMPS in parallel from Python, you must make - certain that both are using the same implementation and version of an - MPI library. If you only have one MPI library installed on your - system, this is not an issue, but it can be if you have multiple MPI - installations (e.g. on an HPC cluster to be selected through - environment modules). Your LAMMPS build is explicit about which MPI - it is using, since it is either detected during CMake configuration - or in the traditional make build system you specify the details in - your low-level ``src/MAKE/Makefile.foo`` file. The installation - process of ``mpi4py`` uses the ``mpicc`` command to find information - about the MPI it uses to build against. And it tries to load - "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find - the MPI library that LAMMPS is using. If you have problems running - both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by loading the module for different MPI installation so - that mpi4py finds the right one. +To use ``mpi4py`` and LAMMPS in parallel from Python, you **must** make +certain that **both** are using the **same** implementation and version +of MPI library. If you only have one MPI library installed on your +system this is not an issue, but it can be if you have multiple MPI +installations (e.g. on an HPC cluster to be selected through environment +modules). Your LAMMPS build is explicit about which MPI it is using, +since it is either detected during CMake configuration or in the +traditional make build system you specify the details in your low-level +``src/MAKE/Makefile.foo`` file. The installation process of ``mpi4py`` +uses the ``mpicc`` command to find information about the MPI it uses to +build against. And it tries to load "libmpi.so" from the +``LD_LIBRARY_PATH``. This may or may not find the MPI library that +LAMMPS is using. If you have problems running both mpi4py and LAMMPS +together, this is an issue you may need to address, e.g. by loading the +module for different MPI installation so that mpi4py finds the right +one. If you have successfully installed mpi4py, you should be able to run Python and type @@ -465,3 +465,4 @@ and see one line of output for each processor you run on. Proc 1 out of 4 procs Proc 2 out of 4 procs Proc 3 out of 4 procs + diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index 1f91dfadd7..41086a63d6 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -76,48 +76,6 @@ described in the mpi4py documentation. The last line of your Python script should be ``MPI.finalize()``, to insure MPI is shut down correctly. -Running LAMMPS and Python in parallel with MPI (pypar) ------------------------------------------------------- - -To run LAMMPS in parallel, assuming you have installed the -`PyPar `_ package as discussed -in :ref:`python_install_mpi4py`, create a ``test.py`` file containing these lines: - -.. code-block:: python - - import pypar - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - print("Proc %d out of %d procs has" % (pypar.rank(),pypar.size()), lmp) - pypar.finalize() - -You can run the script in parallel as: - -.. code-block:: bash - - $ mpirun -np 4 python3 test.py - -and you should see the same output as if you had typed - -.. code-block:: bash - - $ mpirun -np 4 lmp_mpi -in in.lj - -Note that if you leave out the 3 lines from ``test.py`` that specify PyPar -commands you will instantiate and run LAMMPS independently on each of -the :math:`P` processors specified in the ``mpirun`` command. In this case you -should get 4 sets of output, each showing that a LAMMPS run was made -on a single processor, instead of one set of output showing that -LAMMPS ran on 4 processors. If the 1-processor outputs occur, it -means that PyPar is not working correctly. - -Also note that once you import the PyPar module, PyPar initializes MPI -for you, and you can use MPI calls directly in your Python script, as -described in the PyPar documentation. The last line of your Python -script should be ``pypar.finalize()``, to insure MPI is shut down -correctly. - Running Python scripts ----------------------