From 0cac22c2694fa7931aa05821893378e48d4126aa Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Fri, 1 Mar 2019 14:36:47 -0500 Subject: [PATCH 1/5] Add pygmt.config() to change gmt defaults locally and globally. --- doc/api/index.rst | 7 ++++++ pygmt/__init__.py | 2 +- pygmt/modules.py | 31 ++++++++++++++++++++++++ pygmt/tests/baseline/test_config.png | Bin 0 -> 52130 bytes pygmt/tests/test_config.py | 34 +++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 pygmt/tests/baseline/test_config.png create mode 100644 pygmt/tests/test_config.py diff --git a/doc/api/index.rst b/doc/api/index.rst index 3b2a4aeab6d..bb9c492db33 100644 --- a/doc/api/index.rst +++ b/doc/api/index.rst @@ -45,6 +45,13 @@ Saving and displaying the figure: Data Processing --------------- +Operations on GMT settings: + +.. autosummary:: + :toctree: generated + + config + Operations on tabular data: .. autosummary:: diff --git a/pygmt/__init__.py b/pygmt/__init__.py index 9c40f485c36..7585fbde550 100644 --- a/pygmt/__init__.py +++ b/pygmt/__init__.py @@ -15,7 +15,7 @@ from .session_management import begin as _begin, end as _end from .figure import Figure from .gridding import surface -from .modules import info, grdinfo, which +from .modules import info, grdinfo, which, config from . import datasets diff --git a/pygmt/modules.py b/pygmt/modules.py index 12e1f0e7c7b..463e0e784b5 100644 --- a/pygmt/modules.py +++ b/pygmt/modules.py @@ -142,3 +142,34 @@ def which(fname, **kwargs): if not path: raise FileNotFoundError("File '{}' not found.".format(fname)) return path + + +class config: + """ + Class for setting GMT defaults. + """ + + def __init__(self, **kwargs): + # Save values so that we can revert to their initial values + self.old_defaults = {} + with Session() as lib: + for key in kwargs: + self.old_defaults[key] = lib.get_default(key) + + # call gmt set to change GMT defaults + arg_str = " ".join( + ["{}={}".format(key, value) for key, value in kwargs.items()] + ) + with Session() as lib: + lib.call_module("set", arg_str) + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + # revert to initial values + arg_str = " ".join( + ["{}={}".format(key, value) for key, value in self.old_defaults.items()] + ) + with Session() as lib: + lib.call_module("set", arg_str) diff --git a/pygmt/tests/baseline/test_config.png b/pygmt/tests/baseline/test_config.png new file mode 100644 index 0000000000000000000000000000000000000000..d234eb2684cbd284cde579fa254250e206bfe33e GIT binary patch literal 52130 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

=Y`gZ+4|J4$%b7hko zh(74%>$(q(B6P9K6Kv81t_Q5*KFQBDYZ_f;=U)1zHB+K~%`NlQ>q(%XHq5gh=qV0i zPap7B?a58L9)w>ooQloiK&JeBpmcHA%TM&BFl9Nn_*s?%%z zDL-vrXl0RB2fZj1VeQ1H(IT^b)i^4i+2gJH0@K*;z5CTgt?QROR0ZAN*RP!-x3v!u z-3@%q?#tHLWg!!@*2No?zuUWsSu6bCeypx9j8q8VB$eh8DWz7FOxHhY^~~ru!h6{t3M~XkZK>5 zCor@`I?_#q4bf@KL4A&Ed)S#PR4H}XvYr<5V!cX3irXg_>`z$~krM{r*sCqsq&DZ= zPT}ciwRFmQlW*O4_6xC@Y)sX0-3yF)hq;n9M6gN8jHS|wrHEPn+eMWp+ps=YiEKbH`LHPP~){C!*itX7##GJ;p>L?nBrdKjp zZH*raV719=O&UbmXPP|zOHmIXxaWX2oltYGVLq~$!3e3NQm`i3>8Phqt8>9?$(f}xF6C8%li^xnUjy~g+$R->pk zfx|H(Z*IT&YgH7-Co?d0=oM_bao!+;xPt83N!OI;#erl7DeoApWeahit%6uDnVT$pwJfv_Jt;azIu?H^!kc#a;wR1_nJ-L z6}}wd6xFuO8o;~fUOF(V$A%bxSr^48)hOIUF*XJ^9MkUWn5&vfCQzD+o&+&kH=Y>r zUd#e+PfcS+KavB#(s@(mBL3e^;B*q6eNbbULEI<2)gB!sb;%GjmXAh!N9FC|Fc1y; zfL%bH?u&$*Gu>lj7jhib9PrO6bq3Hz-oo?Cc?uum6BKhJocf|77h9xlM<1J}GsiBB&KXV)7r%l`oxVcxiaY4|O*uq6m^)|U!&Gtlq8mam z!@~8(kcOa4zTA7Zm7Iuz=E|}DEk&;Qeu0i~-j|pvJ_J&F52`_!ryGxse$b1rXNcqZ z4i#TeecnAU&0&8nl5D zAfZk^Ud|g{$U(LwL#7XfQ6Se|rKu;wxwfJ#$BDa&7O3b7a`yvFQ0)B~BwN>{V41H# z~=M5C}i56fEasRjeY(MA7;6C}mFu;QMzey+H-^*`EAG!k!y6EN|dhAK?Acr%w!4ohZ9^b=s?Y{(kdbI?;W+wp zo>BAcgOq}BZH{d(e=#VH=US;x;;Vo^~8@<&%DpA@W9pp-BNYM67* z(EAPv0|dRHLKp)3R@u&G`#mZnE%t8Vm$^iUHS*Fkoa3jwi$Stm{6v#z{g z>7IwTtB)ti3cRtq$yHn9JUTo1D$)!6%mn^>S4wgZVT-<5pfYuf{k_kid zFIB9J_rLo=(?A9+?gTV&0ybirl_v5%(y5dV+9pX~f{p8uqNHLvnw&@m`(;kC;q*;6 z+3#!J@B7A5S?b$%dWOv4!Ta1?EOgbItZuf8gWUaxJRDnu7nUvrwfnZJ{e@y|-bqN% z|Aj(Bg8^OzCjOkH=?`c>;*p{yPY$ZwiHG%$MP2m*cwzPRA9u`{_jpZU z!`}&uxQqg)zZ`A}P$WL{=H3$iWu<$ckQbRMlbCjfVE&v+6_WzW3Lepbk!zV4Q%mmtjT=Dc>ilUmGdU%aeGqh+o9XqW zX3Emf<_m3$gFA8vr3rSX+vdl$MsRQ>9Jt8oaWku=kIx0AV0la|)(~{TnW_TmscHE1 zvz*9w>d^Cir0w=qTb`UV@T=+TEd^EktF_k%e~63sg&)_mfcLknLIq^0O%w4#y>#*u zfR9{?RG{?s1CVHC*i30;_~obIsuz`zei)4rKXYO}JtJC#b4P{}z0FfGn7)KpGN49<+7a2oXSK(M z8Q})DF}en%Rd7s~FfYDjTGj38V@@T+)Oi6G+Ky_t-gTMl>)k=07O;0%uyA6MjCo}Is>deH9xANx!bOhTqq>jY7W{O|M$kDh z1F;-C1O#}*#BKF-G`PiBUg!Y1$#gV;1W-lMSEqv-F%I-fY!}&msBW|yjCyvCs2W$a zGDS%r|HK{LwvDj6HGu`Uw#PG}%b$W`Z$@E?{t(DyBA$Km^=<=}%AY~ci|1qc!FT9A z2z{~XXWl7+GOS%<1>@1HSGc&}&fZS;VSD`)svwrI$g9t@9j9CwQZ1FF%GF36Sx)}? zQcAx8oY7OY%<8w5J@Dt8EH*_8LR2RQt!MO3#i5>sE>hz?LT;Q?N>20<(AmC!qp?W# zEEClxUW}*skbMP{$2o4oZBCZQY~XCtHj?h0I?n4IWHnl{jyFnO%mVl}&+ZuYP0Zc)H~RYEg?~-_yotGWGo@Ti@00*Tw8ruQzy} zZbW-2=?~tb6baQ}*T^w?iq@%#DzvB;XO{E4!Akh^;?i`G6N2?&2>8I(OLEmaSkVJ! zrm|wYjyeUy)10-iy>ZtyW~XHtIru3mew7E?AcQ>IdktQ0VTZelw8fmX$IuR`fP9 zjEB6>@Nk=~r|U~Zkvdn)RET?Cg4Pp>kXz1rSr_6rB)Zw=8nm4{FKB0rw4=+C^+0W^ z0#dN%ni(Low+RUg0G|Dl2rAS8b7S)d&%5Palw z@tE7O-d--w{K9Czd_TtVSX{%bAoA7uOsGo2V4g?bfetuSeDIZF zhiSad5Xz@?m>|b832p{MJ#x9=<(3%$LWOvj&tOxkn{vHcIVR;|`TT5S)tX;6q5F`c zmsj|b*f!NA3eiu| z$zu=f&DdmNZo?Pf9q!6{OR}Xsk;_FAjGaS_yfo$5NkuNULqHRyM7mNFCL1as6!Q+9U7_GdpvvpfDQl;#%dtB zjAW~{>M+121F3`^EZ^F!nKfGqq8c}^JCwzE=@dWrYaDr3e-BOJt?whG{z-@)x=@#! zp{r1jv-aT%rSz8U{Z6W31h$K|UQrY;Vm8kqSw#j7hF7`~qKO{mG#vY3f0@N-X^^?Q z(~12R$B(Jj@ZCAf*@4NBnn&#e8G|+Xdl^1MZG;ZK4pW^SjL0%AjnOoK-D>Xr8su-raao@@rK4 z7vCy_Knh&puGB2kI}Eil&9-{dM6YO-T+-KIz9X}yVgz43{3HVPc37$>>4M|RQnpfW zF55diTGm&5>ex&iT{qUaa0esxb+9~kpGTWHx5@}c>YuAl&VVJl2f4JSQNL=qAzd}E zn|kYTk4yb|RmR;cq92LR&Qosr)ll$Vx)ihiG~bay=m!QfoHF7;_hK| z`8jN%*=^mi;k%z0O(iO&L{DtTQ4jv$ZERsil?RO#vgOg|rki^Q)p8r_YK)()k3sYa zI#+h4HqBa>^XF_-bCDP@3E-pz_4RNN1I$edoL25=zgO!sM_tRG?{baF>=DCA51yQ7 zLD3h3;%v6sm27wMRoio`)S8B4V2(&$>37 zj#$Tr*F3{);)O?ba&)`TzK#*fTyk{QJ6M_349E%7Sy~Q$Cv7^RyPV|cDs@P0Ycm@k@I>>yTZt4|wkx~j)HxlZUa}6}-s7wlR$@>Xo z1}ode?wJm}JtO)lWsbg!h!Y`pwG_CVK zwD)5blpN>6FSrs08*z&%!j}kho|3Jw@5N@D$TrdF3S{}ABy$$ogts4*&V7CIU3vI< zi73f@KR=(~(%kpM0|yDLvs$EL1)OQ|tDTS3N4}(&LfbBJcWd>A6tU);h~y%Zr43W} zJ1M}p^-0C_O?RjncGD^jYv(Bi`7SY9Oq|w`{1iG;{p!_=Sy0?AKa0SNyxjfRFZ<8L z48|Y`OkGtyUPU`wzSQzE@N1gIGym4lnQKmy6hL7r(UU>y&>~ z-~YbEHfrE0Hay*>Na>boph9<$l?7tW1+#Y#2|#ZO9bNj-`683$EB;ydBk>0|1snsg zlC9V+w|4!RGUKBj%6{lo;OJ6+0{7Bru)C7F_#+@|ddF+ut3u@rp@NIr` zQC>Gg6Y&$9BA&zn7=je(cs|~LzU_Ex@F7UZj;LEP)Pe|XC9-KHjne*+UjMfHtISUJ zq+=e{q%i$r)t<^UXjX5Ii}&S!59eHE_dY&LJ|~Civh+UIw58nZASVB-(Zzqv%;*A2=K3|y{f-z!kh^t-){xA@ zl6C3agjN`cX(9@Vz$cljpF65Z0wb?$!psz&kiB1mxOv(U|bUdA2f8{>A|ynJIr|8`l%6vA+V#*_Jcfb^UN*&Uv(9>uK3J z>bJiw1#_GT(lglo@_H)IfQL1+6|w{2IlmXv7J5R(Lz^IqrPBCmGtvjOhcAfrE zaE2GZhaTLi14PpGJ469FigOuv>M}f1;pMCIi^vT)VQ2U1R(^&7`E*$-QV8kfZrx@& zv{n!6Jd&~9wOUZNpC5kq7-8Kcz zyVAcy{PSr^^0A+A1|6RtgYftLFy7pX)Y`NfO#48z+CC{0(-ytCp=w!tamdrIq_+Mj ztOlcP{&MNVp+TbW``ho1o0J7HlRIwsU%lUP+~t3EGy_wNJ$mT>@O;NVME>V*-~4ZB zXa5S60i9@1!bgI+Xs9p9la9F&${8t+MfK28QJ z0bajdcq-w6r;p0b7qD0uiTunc;O1g=68$MItU?y}w~x_u@`_Ew4Cj~mB|6U<+#|UK z)6g!av;QtVn6QY5Ki$E!$GlOyX#1JesNL~kPlZtROM$k+(rt-nDPoG+KXLrtmZi)- zC)eQchID*i-TJ>cHNaRmGio6@p2EU7yNf&B4KE0!pXEDUP z5h=%K+@h(szV=Dn(KHDAY^khDWPy@7zI;>)(aE#ID#~F+!K9-80$tyqL5`_^HYE}{gqO!q?)-s=V^@Z2Pv2z5eEuGs zYM<84*=~?G{Uuh|S|s}@*;~=O=eb{&O5SBl#UNxQvoKU%J-v0U)sGYZHnb@HPJD=f zf~{!jMurf=whx@dvY5omV$B~!sei2D5j}Xq)GRFKu!!v*jg(7VCB?B?*ad^(8$6b3 z9%Uui3N+$-turK6{DcL}?EB%&SQx%tC8lF|kI#iK;fpVhoYRLgR3;hH%YO*bJNFJR zl=wC*Dz_)3h~I?WA_*sr250*byzmB7R&09iB1dcH*BXmm&!%F2m5!&`SJP3GKluga zmOgFouh)6PE8SHg*u>!?fm2YJn*4K_%aZaI^wmjBlJbzu7bNj`q5giHev+OtCbwZ^ zQqU-^0D>q!r*RsMb%<#Dv^8IqerK|Fz-ra#u#3$bGBo`V$;%8v6yj00VYlhvN!ax0CgEs7R-lWsDwJ!S^70=jra zFK=q0iMK7CIdyu3U*dMvlFZHX{Ud!QcRdb9Y?HyPS==bZpIwDPC&0Io z^0ExTHeH=Ky|IB{8#SIM+=hk81Hsx8M4jP_yU7+7HdbC^$<>+WKFsmHc{Sd|i9%jQ zw&0}&JIFqp;-s|{W%uy#pfvr_vs|JU~{OKx_ zjOpbiL-o!@*pu90$w-{LWR?C~5>{XV_bHuAP`q9`UMt-yH>r8DGQW%vI3bAliv zJ_RqrQ#*UJRQn!xMdRC2xZWQt?+O$~Cih(CCKPu2DzJ>x;t<2^7p-_C3^nHr?%{4- zlknp-55itT>n_c`g<0EPI416%rAk;$o&jOx?JR!9rd5TDvw1PL`nT#>_1_rl2yvE( z1^XUJI*}QzzHe9A=@>eR4eyBnOXTYP_Q)SE^eymwSx*^-+b}gHESJ{yt`m?a0&xoD zh^uz4*@~0UqlL%MjAeCVM z`h4`H4OOI>Dl;Tm;Hz){#XH&orR#Q6gg!QLC9a-(Tl8eaxXNK;&qiv~ES-dM$ibn; zVB*jf8O~3y4gnAZP|c4LvR2J{~2EXe_DQ zaI=r24;*`WqH6K(tldzFK`1*cUi1M?%6d4&an_>l%q4=X;Gy z-0x||de-+|Hl9y{kWH;kWJ*PyBvEL0>ulv`pDZ#*Ok9YX<1C%fNHu%)*uBhjj)yP= zoe>iO@O*hPbQ_NgU)mRBVOA1Q88U#NSKwFaNf>hFZ!vV}$8l(<|JXzIJE5m9B0>1# z#I=zD?x4EI8nWN=6>s#8xt&^+A9K}J)K3L_gTqx&;FjN#L?z|v&l!R+EFPHZ-Gw*O#pwT4N>5G$VfjMVth`{Tm|+=P(B^vjuA z-%1T^G~9Pc`^sGYC4zaoSO^-x)=3P``Qn9c*K_#Yg~|v~F|u!GuS4>G>Yik=^Q3F% zbSQa;w80y@W$(D$Aj_Q3eb%;XkTP{y*xBP?vdTRBK~7XVzWdHK*VG$B64Aa*T96Of zJ}OuM+yPX|9zmt?AU1I*b>L}VPJ9KZ%ut@p^5wC^43OIyKti;_ar6No1#nN-PGXmkK-&VxR_MA{=RVCsAWN@~ zp6dWh5dV?*?oVA6IxyY)PJmsJJ_v-xEQmm6AV8m?)av zaVwt*BgGMqV(mubS0az3{ODW#d$@EA;x(YD+88&HhhBaZI4suIHSqz>hgn)y^;ECK z7#p<&ZBnP3ec0g!_Nn&wPK)!8Z9aSHpkfm>A7)Nv8y%}icDn$Ud;fv7n#|Dx^nujy zT;$167JM#qC~;^4aAQFIiXaKYV?WMM!MksrfQV(mDq%j0Wu>2GdW~10gaUX9Q2b1R!x+Ha zAA3m~tdjvZEnA&;_8G4i_h_GaHwqcoioFt=mNg#zfwd*Kpb1f~Uj-FN+$@n#RhLmu1%J6leaiI83LnCDf5hk8i@x5$>A5mD zBHmEH4~qx8{q*wYHo}SyiezNwT+fE$BLW2a%Y;Vg;@e+*^Es_?w0!!?`N{}gg^?*9 z4v6-f9~43qKq}@w0L>aW{1k!V(KqGs^o8^eWNv6IGPO^yI2SxPC}E`0fV|ZD(opqd z-pN++%xb?vd(0K-$=ebaTM%jPJ4=|e0L7D}g(ciRZ1q;-3zrkn3rnO(U;-4Dd+WK( z)*=31r3b(=pY?(y3@;QYf;o2g?GF$fT&>iWDera_b*ptElCS!iwz2ep9!UL#XP-=r+gI0{2l_zaD-id9|HIUSQ`(A7$~tE zk{k&2es~g#N9uz3mW`OA!*j^@)%W=Q8vea~S0uz!fg;%5C`f?)_?!$ShQiP^F95a` zvR{zAIbu70_bs4VO<$?q2ynlrjo+z#E#)HWgZXFobHu)+SH;oVIQ!zV_qhT7XC(&{ znX125EB?=V-faL0K`f(sY@1Yh9O5d6n4QFYx?(8WQ*y!43Mme!-|#Vie&mpliWi3rf(H+mJuFD@QFxfb1iASyzl3mA*cx5R{>$avhAIDH z8t-D>{qnd(PL3pLKzl6}Ta(6ko-qQd+buqpZ#wc)Cuy&7-adPVB}|d6~c$U%f}p z7e97iQv!XxeQCawoF9PbFruR}Z!59^h~<(eF?iBA`##il9Y2aFVrtdhRXpI^ypxSN zSY#8Vf;$HMZM@Y%q5x{^w_6D^Pc5PkO^Y*7-hru8a?|D_2l|Xy(6Np;k&45KFI7*` zN3Wuoim_-+nL#Mv?N0NlgoDqRVMl1lc~D>Q?7+y6&p4t$+D<#HG& zddvTnBWtMZd%D$cSk0?39Ad90atR!$z`1|I*>65jz?nGNf8;Di8m5#A7euF5JPGNu zDdqyz0T-(J7Bf5Wt<@qrxnNAFidE-l`b(@0O05z&WYoV^ zJAV(%?AwlnJ2o!whZ{bhyw8RL6Zl{s`{;oH$wZ`M>X56?l#o*iU%aqF`XjX5c&~Q> zxh3fQyWDW@z?8bnhei3Ed})HlvX#(38B%x$2$pb`8QdCw0MdXZqgz)rk{5J~=vFrf zTN4Ksntc`z&~Ggzm;ik^K1A#DQ1?}=$)Gg^!QzODwA9-YP`^e^+rEWd#C1kXiJBL! zad8ol#ezAl$io+? z7vT1CDE5`6R3Z4nDL&mChsG)qv@NOrnT-KQ=h|0ILhdbzlAu?D#GiX*E$nBnbILAv z>v<`(ukBR95B7JqwziN3wg?1*^7Us!4i1j7Adl+)n(MJK>iqGMk&$CcrIk@GFYQ-P zPfncQ=ix2sFRe`5SstqsJJ?;_sWQ?4KiII3f*)A(vp^oUa#iiF&vq|Y898k2?VuEJ z@6$=ur9Qse(tJpdFT+mskU){^Awl~lPI8lhU|KO=YBI=|>B5o*PJ4U(#>38=?RR^g z91eYBf6Bc;GL-i(e8ctyZM_B98MUw_3cRPP3wUzEN>RF z7y}y$gY+$EQ@d^1`fGvy#XxaWZS)fT?4-uRCpA1E)Ea(Ag-L@P_$d1zEm z|CPqwRsv#8I=N|KL_3eQ2-*|a=IU z*Oc4a>$5<9`7}5X)&}s37KFbzL-M5emkHPM#WOqQdd^otFDu1Yt}Ueh@~b!JSllHi zJjy+GoIFc*yEF9QUI*n3E}-{j2+;a!_5v`9n6sxKPYPiMgjJah`slAd27qa+DZK)r zDRB)r1pE|_>q~Elz*(LC$UR_3yX1h1C}MSz=oFA=@TIzC;WLE~XK~IKPn}}A`*VG5 zw49*=K%noa;VX^sdMQ3}y3g9OCTJf~0k4Lw6R&8dEqH2i2yv9dE7VYBkc{2+^@gYTE54N2&d#GFSyS3R2=c{_0HNNnm8)}?k)on zG;pKAm?$RecH)R_J4s|IYMrBlX;@8uDVXX?62_t zGwI;&fmu+)T#YdRd7J;PtFCU%PgAr_-$jG&AC{Ah68KMwE*n$|mIHio+p|~r>Gx*z z>STB2&%*vzEF^bp0>o>%Rwr}<#~j4FM>YRn zs75cJrot>{(lt6|RnN=Sb!+z<7&WA`v9Xc=HMy5%+@uoCSxEm>-^8^l5Y~J|m07MJipd>&cPX>?APV1m zZtYtW!U!L^S0H?P1it)YMe!=&=J1Fe`lDTEUb7rJ;8Tvb zyg4k4&>|v$q_3Q!0^x~}F>Es0@?QXElj&a%68v9YllaFK{$?-#pwxeJ0qy^f#=09{ zCM0N~-CN1YqVxvmO^A=CgzWbhcYR;%K)SuHHYEmvJeo9b65-NX^si>?l$eR4Q$X}} z^7-)r$fJ)CZ}HRR$E&eCW({$tc3co3}|7+)h=u5hyn^q4Rc6r^SH-LF$iT2GK24 zkBoGD?rEdX>{Spw{1fR0 zcQ-7l3hJJKU1?vJ#JwB7q;mM2*=x>yajI*^UFE zC1^YC$#gi8Yj9ZWU<7lpxWfz@*Hq!oe1zP5iz2V}_BxWyx0l9+3q;UW;(jt93(5&} zCkMmnQy)zas}f=g8w(ps_3n$a@daw%^GVThM|ndV!H-w2=!(cYFp19>lfm5&M0r`s zqmQg=rt1W>p#apZ*Owm+mQ4h!U)m#;5(Nrw_Bwvmvin! zUd{=#9e>Y}V!qR%2)-D;@kgPvpccH~b_tKEY9G6JdhXpsR86QP&lY>wnFUSiY>0@S z2Lo90z8)*Tw%mq$&`}d<<4yT^+I5By7`He14sW$(c~$9V8-d*kc2U_#lcKy}Mlje$ zUjZGv`mX(p8Pr0p#6-3`{||n`RbkdfpHsPE1{$v>Cy5yCbI`V{m-8p%Lo1gGMA<$k z*c#O-_p_~n9c$*VgYMd}Kl&eon{(r3`_+v_1ga)$FlO>q9oh_#27ffj&cOlh`hMYz z)d1nOG6hC77qQuY@rMjWUU;N9ucb)P7Z5jJE{-Wug zsJnmyxgZ*}`l7iBj#z1RtSk_ez(Dz0vv&l~L*yh)C zw9)S~{E=$_S0(voEGDo?BHR3QTf{h39T8%xpK5At3OrQtXAA{89Ah-533iMK0G%Ko z|ExUEMH^aU!UM4`{)t7ZI)gYJH1bq9|8X(-)L*i=O`Qe|PWMG?yRZY5kNG9p>9u|E zgk26mC~FwHUj4%l$TM06Z3cTCa|311n^27Cl4bPYEz=bn1$^)5{}FJE;yJd9``sf~ zLEpbzd{X~}JV)aAC-}pd#XpkxM-u-XvG_mv*|8=5cdBC;ffJP+RwXc7thvYaR{f1d*73TPeI~W$n8K!FCU>MRWJ5`2|6}EmB`T! z7bvtlY^>MS)upDU>WQK^v2_N9hQx%0wYSM2OE<>&<2(kaK^9&yzh#BHJ2zASskpg0 zw`!@=ttW~OjLV9ugx4pZH{JW*%lIMUUOzhf=!g0E_?T$0dz^-BM*U)oh8zajCHL6a za^$D-+(IvmYZHX49dJ2XaQl~QxDWrIGQg2M{wauH?BX9u{3D5f%7w=^@K3~uafW}F zME_n3GK~9dRc3mI-s>^WvsFB0<>+IXbAPNqO-j2tqd+aBAd#x9G&{YDzZm^1X5R1q znE%c7lpL%JHD{mosfs#bO~|KEmA!WO!w3DB|2@%N65Ci{Vh+FRi~VS|Qm63TMr#fI z^q|l6$J8yjr2f7P4kp<7lhr%oxUbw--~2!AeF-$w-~0cxQ(4=ytB4dy_AQi;U8E>` zQnK%4t(5vG)F}H}C<#Tj!3ddT%f61GVJyQSF}C4<-!oJn&FB37=XZX;bH3+yyw98( z?|JU?zW2G$ectyz_j&HC^6jJ!tl1z2@n(BulgOxBxNL_b)I>wgp{<|I;=xN@o+*(f zAzBYwhq~T!a#!J+!UO-~D6zb&YuRsR!HiW41+D%S6vX7|7of%W-!y0#IvsMdy=sa? zsBMp2APt8%iR8>o# zuXJB)`5}j*BwvA4L8zzqwZVIr5jR`_-7NNBcrI5*;f}@UKz@O<)JU#766ypj;#_2W z`k4WZ1*p)UO-}DN@>o5`01!b}spN${!l+5CqqU-Sxux?wDpd?PSV}ii6)zlNZT~qY zCGmq$7vmm&oVh*6R@;pnbW$4=lgael+!H=`HI8Wof%;Pd1qsECWrnZC}typNf z=#VAAwe_>A_YM-$6mXN7TOVU5W<-mM>6%2; zo0dbg?mNGSp1zN&Qp9zWF35EI`pNcl;G|AGt(y|kpyl0&?cl!IKQJ&bJ^g`L3|irF z7b~q7nV`InhV`9;2+a%*gJ<=UnQ~0c7@Hwp|aa$f?#nINBfIj2hygu=bqFCvs zx!Q#vqYQ|OO~&B1>RY*167DPA1gGx;KiZqLBYiXwL=~5&y_IdfHbC&3d%;$GW>!V* ztxsV|Q|ck8E06q(x||TOIDs%|9_$80@_$hquRww|3OGl!^Zsx5hZY!7GYdJMpbn;| zsd3~z=Dx3Ijgu&ge*2njt_`bTMSu@<`O8~!IY%)Yf9OiCfriu@ZfdGzP=J`YU(?iaq;Hvh-m}xaDLxK3E_o%k&h&%5-;Xpx|1~^}cMw6A|k3g~; zjq31-M*!=?t2pYWXq}2750gA8A7~?RViPr`AFfAh?YTNejPJ3JTNb>_KK}ys=_@uo z;F32a393(sL`>O(Br7lgk#bWcVxRARXy;+}HnkSI;0R9@a0~i@7l#-s8_oban4vPY zZU$yqk84V(Rm4ZC!z{|m2}&q{UD`#>fP5-g7~Tq3SpWpuXQ=Vo+fOKCS+fdiJ+n4} zB4Lf5Flw(^;?W#kyZgC&4bzSPrDpjntl5K=U#|w#vy@AIT^g&R0ROK`<2PZfOXGK8 ztV`oRQX0MWdxWo8M>~TA6(ZzQJRChZXS222MwG}-2P>IIGYFC=WcVqgtu}AbULvsB z=gS+wmgI!Hc=_T8C=6ctzg-#AF5?^QZ1cKeNlPGX5|76}4g?el%^*w04N*+o4ReTf zWUcqbK(EW>S_5#e^ovbi zmsJ!2WMmi)A~=lepxl~P)CL|HvcX*rDH>h-7}|qPh&ol1xrFxmtw!LhzjEsOi}II9 zIM=5Qzk~r>m&R|xSeM4{!uW4WLp8u`U^N!tpVo1Gvi-Yw{|`ySAy2^)xP4C9h$>nW z4?>;ZszPm9=ldB=^Xt(h|FIRL0GQuXio)}h^xT4=)WLee_QMQtT-MkrC_a?V4L zpp?ndc+P*JaplVXz=GrgY!>%WTL?R=5K627O>YSl1ZH}G+VZ+U$Q_dbj`*U7R?`Uq z)RxGGaR~cMpS#E9*h8?jJ$nINs}{B9pQuNR@msKC+9ZNylOgwGBXCmw>3+~FSlD~7 z2D>1Ma*Rk}DdGi$i?md$Z%ZgS3&bF`4Dy9xLsZ>oZ8*Yr&^a6-sL7^qKqb#Wt&s+y z2|B$d}ae7A7w@YRHJa=o`xd*Cn#uPkU{9d+Xf2^l98J+8HM#^(X=T`yPd zRFS~plH%fI2KYb;@b}3O3RnGo;#{)d52OI^nlI5P`R#|fS)vY5+1c{vv1Y+oahVC! z4p$sukwrK}aHwd8tQo!AsENNR9s#%iJX(}_>XUfz4&&+X-@nh#N0IlC-G3}D0?fy8 znX^&KppUI5U<=LU4DD^z%-^uL{DJ4KOQwt;&1SOOiH>*^s8)LY`%^Wa8s1-4C1{?o zaO-J{H1F_9d3*XgG@6cOqwT`)RiJ**fR@m)o5o8*2{^r`8rveuCm0i1dh@&j^g1tF z2N4Fq)OENV>L8P2QswGZ=w+RA5<|#L5ReEHSEJS$@15K)gCP(C)a_(`rgMWHPms(kc;ba0n2WO8!gbG>-w>lH)cE7mL;c0kW--hc1iimH<2gu{@v- zWcb^aW&FSG3z`inminS`sH;rq@;m7Y{;et}8P0ukbl~uAafB_ni+kNwe4Fe$#Iv3C zb+YXk+#9OC{KR~ymP{=B_jllriAAt4bDA9JeFMZl@2A8+$7d4lwAMPl*7E{ZdUicS zVpYZ0C9y7v_57g~9azt#S{)4kwIn{`Uobe>;|l>aQgvGh3QJ-D5#aJ~u#@=$)h#BM z+otORH~8Dnj|PTIfk1!%!Kn`V{H`(Cg(ENzak-b^Il1L*xa8U`U}CuBATAB!>OhDb z*tm~oWAyh6=79DiyCy%;=XW4$HkZ~9Ldg@RQr%|8w>*D9lb_!%-$K9zUl^AW2@b(h z2DM0Nm#)9$UfMMLW9Y?((p1@nz5%Fs@0@q;rVRW%`R3vVkQ`jj7q~dbTc!bxEv;+O6oop8;m;Im-WLG4Hey81&n$knt&2lB~W+ad7yW1_GTU zfR2Zb$4Dnw)4MOTDskBib z_wxP$XjT4o5Lb*i_Sx_`K2^e5d~w+V-${0$c!&aq2g!M{A|M@fCnfK;{&NrMd+8?9 zpu+?SO2C^qPL-;+$B4tinEggvs%M;LDrUI|`TY~L*z{MUN_UG> z)Wt18jx2T10{*pP(Q4^20(pzX!Eq=oG7MxO|5=f=8N!#fQw6@_y(Mj898I3M^dmA} z4`qom1!ylbHva^AJ9o|pSI07#W5_Zo7#%-*3U7u^r;$lXOKf7e+0K+Lj4 zeTWnkOD4UKYNwC%ka{_%M$g3O$q*ry`4%AenUXaPlEX`dD9Pc5XoLxeQ z>i&*CFI?%ty4{b(pLx6)f{T>L;5Kx;V@wegv>!vQap7)-eWz_~{MMuZR zZ11X>;~VL+xMHVV?#jhMRlNCvB?)jdd;7u#iLw8|3(fiV+4V3k4|7i8ix+y%;JjFF z&B&F-@`E29fn>rzJE0`o9djBe`&5%5`;G2lm%={xt0cpzD9d9D*2BgkJ5X%R!#YpEK00@{7MaAq8CTKKv}q3td|Z`IlgIPzYn#<4rsU2JP) z_%(GNo#Tpwae-kTfp*-WOL*-Ok``-^5c>SbIfVcTlu~%*Urxm}0pRlYSAoD*DExP>J$UQDDjwY` zr}c{bUzbSi5{v9=EWnyD+I4;TPZ>ej>dsBGHdt}`atG2}TU%Q_`7GzN#U&*(K7Lby zm5z)39|7C|!PZz9^6$-bzu7=sAQf|L^l#}PyZ03Dd)fj3k#Zqc`oIs$Ujyj`n50BZw( zmKqU71)(iec`rhXKUO?LMg*2$EmsQYYyx*qbpni^fAW+43AMTMkaY{SZnM|lV$k&V z*A=?{USAU$yDpLSx!)Sk(tl?*Tp6x4dwO0rIgCCqj{$KaIc#PjuO6(6VOqK_n*=Dw z+1~>P!dp^K)|cRTi>Ma0m?6a{F1pRv^o15`azmq33mkq=g}S~4EqL$Tso=bAA_uyC z<162Nh2p3ZGyq<}H8Lbf0wXvC--Zk`aP+z++9-|78Ckz`Xz}{rP#t<5|CR71*VO#k z7^CoDRGxi#XrY~?07TD3o!$~%>xe z<%hKk17Qi1;Tg0afKsAreBf?a_Fw2?2LM<(P5KlFXNMT|T2XD(AdrKFBCda5gor;B zB=|2~tk#0wf(ey4@J%M9s2f^Mi9^T!-zOtDY(MX^sfGfS;}n;H*db~m+vlL~1-YNT z9;I44=QIQ|UFOl{#o0;hJUlZqlXSN@1CXbWOixeG!^Ny+U^FARReTFeaAI;T97=cn z8leMZI{q!an>dcil$)CxtiQYC1t?fnXn;S>Y1lxg{rU!exYkDlf=!oyoCJV^_T04O zdj=KOPLyyZKBbF%cA>W3DD?-vE%TEyxLsQ4OPZfHd?Fr<{dPC<^-~CvL~;d^gjWkG zl3unm8@idJ`n=JRHPB4o3vvfu=quRijKs*X`99CSfHoSTi#+BO3nd-%0u-1`ZYKZj z9gr(g{5;o2?L@QvqmZ{TM%sw$BEUWk3;zK1+;5jQVk;)pQ<^<~Hq9PWLIRj8lOMs) zSxLYLxHLO?b?iK>Gz>yp@rMucE5VN5WJL{@fa9x=OF@sk$Xi~7`(wRISHd+Vu|V?O ze?P2oICu`ZG>`XNUcg`gV#-)o-iN@}sPev09SHLTfV^bS=y&$hhT~|%XXfW`UH%)9 zam7o(_IrTZ6!ek1U7I1Il^@C>=j*+^BxCg474RK%+)!$+c>o7hkwnCVH3HldT~*E9 zLAoy98Ol#FYodJE>B zsMvL)7Wyo07DYgnxa?DA3*lb`A>$;OK_mU{Tx77Bo>*y}T6V`X&~VD9_4}@16M)%~ z@i;kWpf-a(&H+@$DsF-|H0u|UW%e<^|7{;{(FHW={o+?0)!}d9&;Z~2lIozqHKUW) z&hVqoUsAMedn*Htxf@|rhr2`zT20g<82c&EXZh=;T2Cb8wzmnON^6itFrK4}gkvgw zk&WVjETry{<+rh9c=%PHOhFY;TAtS85~rj7utU1I##o?B*4t^aZh- zZIv?_maIkqG_pe=*+L?VDON&#lSRY|-j%a}jyqC7CT%!KYW#RJR(y}N3E2F0U8r4~_q^^U`$KU5KMu^flyO}Q*iaek8ZLJ<^wOV*aEz%l zYl^U3jBEEn&S>{;(A-_&>JuaGb7L-DrReb|YYIz?a#LcL4{J3AUHEWYlkys$y zO5I{m&85xuh8GVv@AhxECdAE{Qnn%w`KRtMs6M?4YF&OfqT-v<8AAmKXMAIp9vQ{F zQHY7>wzwu^6b)QnDI%!dMG<#Mt*1&TM{du9A(Ea=*^-7hHezN$jw7o4g0=7^OrO%3 zd+c(WHZSFqEC-vWA1Yk@35eP#M9XuV0y+u6zG0#i2=jwHzeAXZ0i;>qAyQhc)|Rq4 z?d=XpVcgHF_-!}prlRip@8aE__PqfckR0J!yL01i3J5iThO>p6{)WG93a6ly+X8rJ z3Jj&bQiPhPffwve!II)wp^J2h56k^#*L`yHiMH&jh@M;o!JM8W#6DiaT|B2KreVMH zGscX&{uyfJy-H_xiiPYN+%@YGBR(kb@$b0V>seLdTEC#*JO2Uw{`1j1{9FL07eJW` zaMx_H{XrMWP;%QxxWy$&Hv}d4w!rwL*j#v=sU6|RUNe4?$T!4{Nr$8aO*pnfiuhGp zyd^Ov^7`d1WVrDM04Npo%x3P2!=R-=d>h&iOYH}M?^Y2s@S_xbc}6DOd(n9S@s&S2 z(GyPqli)#i`r5ip=8-nVKsWHi zXJjF#tJX+j&rhM!0iix1V>$MAb=9*=dNkYZ4aF@y+nAZ$IyE!7US0BdeLa)w1k{GeQ+C( z%9%I3Y8yR^PTU!yD8!~$@Xc^}2#~nKLJHghxVzvMSym$Q0aXA@F4OiM*VKzQab3G# zeNonm7ekJaSd>hU5ANfYcEayZzu^?reh5Dz^fJS1VWxM4Zd%9+0J@W5;(5yqu$dR1u3*290VgI+?>vP4ek=;Ye$VOmhOpnAw7Odwh^yG| z#=m2~>j8XP3if;Mxd&C(0W5AQs^jA;fbe}0AbczNR&9MKG^Y+^A=(xyF?YzNb@Qu= zx%tIjfW}OVqU9bb)Jl8ZOG`YV*f}P<7_S4{$oNcVXMzH=x`J~ICxE*>4M2XgAn^C? zKf&Ld)dLJ5S0yjIwDskquTjoHZ5C-_b7dw9EGW5Zo3_ZLX1n*V{?2$naQF)w5m_}D z*yjbn-$^Uu4uEryQNZ6TfjH=awgO0U8sz{LF9?$s`BH{kJy&sq$NTB~HM}`8T(9E8 z-!{cL7X6iP7zvx8t(^S!G}_E#+`rF`C0Csy-PR)&FHbV7`|Hu1>^rlaj3oQ+1QX9= zCbNy{3IVhXH{Zj&!6=q@9Bk`3oX4jf5A?kRfWO!6Ytg-k=+Zz&wloiW&&jarU@-YC z<1Sa5`Z>*1!6LJIm$}X`81$V@YYHaxHLLj{o;Kcm zjoWE4@q%n89zwRWySNzZ@E5{pq>x2#Z~Ck8CZR=%{jBu%&a*_Wxm&8yl>sTR&7AyR z`&j^H`DJGHD6R?!TKLKfa2Eh}vjB|w%iQXnoXEof4jkNFggnz4C4;*O60sWfuRpx{ z(%&f*sFoDL%3C>^_-MMPRxB$?cdwAjdjeYoI$l``2mydTzXRy+H!0}vwT$MC(iBm* z?`8tMYQ`M4`1JV$A*;BJ6DiO_B+N-NTC>M?Y^SPTU3IF;jV-qgw{0*2XwV_LAoLUl zD`GO&k)Y)PjG)DmF2IckR*I!R92W3`Yu7=M;Me1+5c>NEiA*y3JG^MxLmhSXAW9_I z9upt1@f$47Nm5AK!?o7eeg<%;2JGa>?3e*GH8`97AwVbx#_28@n>b4YptYYCb9Vs@ z51@h!Zu&L?BzhS*%JCMlz0b5x_g)Fo(R7y0iY>%ye*j1>mp`DOKEnI)rHX=j8L$Q* z+la|bM~(?-nhEn0nq8u5iaa?l#+&Tiu})j~V0$Ey5;i(KXOzk(j9r_FO`dk0*@Y@R zU9R??t#gryD95z4t%;K1Ko6G%9B&Gx zJ-#2s5`OIEa!=QZEeWE7yq`0i6Al+Cr#ND?)cEwzPeGSheDQudT9V3bvyZVe5k7Z>{edYHeqrcbf zNJAMU88p1a`B~6w{f_>gLqUI!I!p$U?&=fYAg}Hw)Om=^ogxT0z=Y2q23AHN?!|PY zbo!pUQTU8k9-6T-5I54#dn{RBt<5OCm_ZZksEz<3Ux6Pl*WRq-oxq0o$JTpqv*H%E z-|*lI`?*aJZ1cy%N4cP}(ZMsd*FR#^6j(`>8{F#LPfZ$OOgvo{JxjU6_tj}^S?#-D zgcgr%P5YimYRA!KWvIlp5H-O`P4dBv@S(#1@SQAK24D(fX?Ah$W#SRRf{m35tkIhb z=HLGw0q;{&xven&BM{&_c=!}D-O-LN zi7)BD#aiqN9&-YE>wdj$tmt5>6D&F3Dd7&3$5S+V&>1h@ri(R?mI#gJS5 zASZJ3jjp{HM~{nIxS`|W1Bcl1${i*XtL^pCb1`8X88tC}rd+XMS1hGmM-~EkQg>}> z&;YZL7A6gf<$W|15K(c2tj3}W4^*@%#*8VJ2A;1Jk)!NewF3VRZ9Ju$zPG$4HeLnb z-!rPn@b7vt9JK7-F97`ew1@dd6Keqfu0pW{Wcc^3Wcc^@d@D?&Xm**pepgG{Wd?4Q zS_8!Tm~;bpNf*)YeNs@1ZK5t~f-l_J!tHdfq3*M)$eAZ|5_72!F1|Sw^^#(|5`p&K zj!rLifI$V_9#Iq!UllZf1!Zci*wf`+vIVbDn`s`BMc`paR~4hBHFk%;xXezBBg-?0q#UvGPK=cpU3=QuNlHm5nyKKEjuYd7uJ7E)ZheZsZYdHxfCDCl_?0S4QSRZ%)~VdWVXYlDe}*XAuASQ{y| z^MA5R>(u~Qv_Cs&tu*{^?^o0#O}S=H3A%Oc==#dreTYIbx;8#4^xu1ZEz_01VgG48 zou&CGF|7n?E+8(N%!tJwh#TaSY>B~pi)pJ~p?8UR*x{ww%bw@fen`s6bEORuesv`) zU-Pr}E4GoQzF;RwKB|dUqEb^qOR0K$MsDfpMS$`8`duMmTk_g<6Bl-*a?zBn4IEXH|~o$<)jQXc=89n#Ae)JvoH}^I@C9cKdx2elxd7 ztQn)12jxDT4jKJC0Quy=6}H-q@&!p2gj8SM+AXLPua4|9v@jtWwSKc2KV4hKjvJlE=A+O2A(_qag+yh~n+QITb5-uueYcA;f?@Kt03S_#n}Uu2tFIZ{a1h_cmC$`Z^bdIaRgMwRCtXSpTb z=Zu?pjki3KpnL)fhXZ7pZI`hl(GL?ZP~EWh%c? zS7%JaRT91yQS(SQNw8_=`?~We}x>eRNL@??V ziyEwbeKP*)W4j3t>*(f($Kq!zuCW$KQv~F{XVo}rzj_tE@4Ji+PHgezN9cAGCQ=;>Xz+bxl9=3X4JAS+A}PX0r=>n4=1Fz=@s zJM>(?>LW|Os`2HFVaAEpY=br~1c?=j^NQeiudI3tT(W+WZw$ekYW zWtjXqu+nE-XI4Xp)ntf)-g8TNf1kXdH&lqdS#xC};K+(-x2*>GmS%nxxo+~Y&RhU5 zgqLh~z0oz{G3us4sa)x{Ipb>OEvD>ljt7HBK?0cRG zodT>wWfZP|NBh@bLjXk|Ng;Mf58LbZR8aYJt+AI7y;yQlaG|W(VAZt{8~sald`6kb z73J;KT{Rx2S{hRaaUaH>>YS*2QflAcTU>O#BRFWr%KKgK6FQ7sH&TQZv8wW}B|lB< zY|H)ghHbT-e2yN?L47LcHWf`D=|jIozSweaq(x$gtQsp&cdzDQD z=@xxEW+M1(ot4k(4Gu+PWbXY`hpaoR(s2_Nm@LfToM6$|9&Jg`Cq-WujcmiPXTK8E z7#>qPzTX|!|426Tp~ClH>am(q?N54aXDGp22#VrwjkGt+*lWTMVE5#q42y1CJYsQw z=*-@MIFrh|{IjUQkyXn?N)};9>$P;bok-4e#kgD-m%QkA;Su(lDR?Jk=mQ%OJ$Cie z!-{wDg%7(T{Za)_Nt|?fWWTL;@5^6S<@Fk4T46VdX*(x&YH|4bQ?c_qb8UT>%jd2Z zv%Io3sm~hY*c-$%V>Be*8C&8tSdDij8NFJHsSkfQ&y}JaUnhl^M2cC7yLsB=r%}|q z7rrR*Q$bEui0eo!iCpihlqf*Yzq1T>iby$t?3FmxN(?RU8ZI0!Pj#+vU$Cv?@Cp7U zS=w|Csx!4DyM;3uWTT{GAMZ zN{=phnY8A*@!iX Date: Tue, 9 Apr 2019 12:25:31 -0400 Subject: [PATCH 2/5] Update docstrings --- pygmt/modules.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pygmt/modules.py b/pygmt/modules.py index 463e0e784b5..2dc3d475b8a 100644 --- a/pygmt/modules.py +++ b/pygmt/modules.py @@ -146,7 +146,18 @@ def which(fname, **kwargs): class config: """ - Class for setting GMT defaults. + Set GMT defaults globally or locally. + + Change GMT defaults globally:: + + pygmt.config(PARAMETER=value) + + Change GMT defaults locally by using it as a context manager:: + + with pygmt.config(PARAMETER=value): + ... + + Full GMT defaults list at :gmt-docs:`gmt.conf.html` """ def __init__(self, **kwargs): From 00c0142d33b85a98c176534f8226e4e4f6494b5c Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Tue, 9 Apr 2019 12:29:48 -0400 Subject: [PATCH 3/5] Move config documenations --- doc/api/index.rst | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/api/index.rst b/doc/api/index.rst index bb9c492db33..6d3d47a1b2a 100644 --- a/doc/api/index.rst +++ b/doc/api/index.rst @@ -45,13 +45,6 @@ Saving and displaying the figure: Data Processing --------------- -Operations on GMT settings: - -.. autosummary:: - :toctree: generated - - config - Operations on tabular data: .. autosummary:: @@ -67,6 +60,15 @@ Operations on grids: grdinfo +GMT Defaults +------------ + +Operations on GMT defaults: + +.. autosummary:: + :toctree: generated + + config Miscellaneous ------------- From f731b41bf50f4f5ec5a9f54a75188d393f2baedb Mon Sep 17 00:00:00 2001 From: Dongdong Tian Date: Fri, 8 Nov 2019 09:42:57 -0500 Subject: [PATCH 4/5] Revert to default setting in the config test --- pygmt/tests/test_config.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pygmt/tests/test_config.py b/pygmt/tests/test_config.py index 2f1acdbfb3b..7b499f355f5 100644 --- a/pygmt/tests/test_config.py +++ b/pygmt/tests/test_config.py @@ -11,6 +11,7 @@ def test_config(): """ Test if config works globally and locally. """ + # Change global settings config(FONT_ANNOT_PRIMARY="blue") fig = Figure() fig.basemap( @@ -31,4 +32,6 @@ def test_config(): frame=["af", '+t"Blue Annotation"'], X="15c", ) + # Revert to default settings + config(FONT_ANNOT_PRIMARY="black") return fig From 0fc2e9482364d81c45459e56e0ef1b2a3d5d49e3 Mon Sep 17 00:00:00 2001 From: Wei Ji Date: Thu, 2 Apr 2020 10:38:10 +1300 Subject: [PATCH 5/5] Ask pylint to ignore invalid lowercase name for config class --- pygmt/modules.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygmt/modules.py b/pygmt/modules.py index 2dc3d475b8a..1d96fc3e11b 100644 --- a/pygmt/modules.py +++ b/pygmt/modules.py @@ -144,7 +144,7 @@ def which(fname, **kwargs): return path -class config: +class config: # pylint: disable=invalid-name """ Set GMT defaults globally or locally.