"""timestamp - Plot the GMT timestamp logo."""importwarningsfrompackaging.versionimportVersionfrompygmtimport__gmt_version__frompygmt.clibimportSessionfrompygmt.helpersimportbuild_arg_string,is_nonstr_iter__doctest_skip__=["timestamp"]deftimestamp(self,text=None,label=None,justification="BL",offset=("-54p","-54p"),font="Helvetica,black",timefmt="%Y %b %d %H:%M:%S",):r""" Plot the GMT timestamp logo. Add the GMT timestamp logo with an optional label at the bottom-left corner of a plot with an offset of ``("-54p", "-54p")``. The timestamp will be in the locale set by the environment variable **TZ** (generally local time but can be changed via ``os.environ["TZ"]``) and its format is controlled by the ``timefmt`` parameter. It can also be replaced with any custom text string using the ``text`` parameter. Parameters ---------- text : None or str If ``None``, the current UNIX timestamp is shown in the GMT timestamp logo. Set this parameter to replace the UNIX timestamp with a custom text string instead. The text must be no longer than 64 characters. label : None or str The text string shown after the GMT timestamp logo. justification : str Justification of the timestamp box relative to the plot's bottom-left corner (i.e., the plot origin). The *justification* is a two-character code that is a combination of a horizontal (**L**\ (eft), **C**\ (enter), or **R**\ (ight)) and a vertical (**T**\ (op), **M**\ (iddle), or **B**\ (ottom)) code. For example, ``justification="TL"`` means choosing the **T**\ op **L**\ eft point of the timestamp as the anchor point. offset : str or tuple *offset* or (*offset_x*, *offset_y*). Offset the anchor point of the timestamp box by *offset_x* and *offset_y*. If a single value *offset* is given, *offset_y* = *offset_x* = *offset*. font : str Font of the timestamp and the optional label. Since the GMT logo has a fixed height, the font sizes are fixed to be 8-point for the timestamp and 7-point for the label. The parameter can't change the font color for GMT<=6.4.0, only the font style. timefmt : str Format string for the UNIX timestamp. The format string is parsed by the C function ``strftime``, so that virtually any text can be used (even not containing any time information). Examples -------- >>> # Plot the GMT timestamp logo. >>> import pygmt >>> fig = pygmt.Figure() >>> fig.timestamp() >>> fig.show() >>> # Plot the GMT timestamp logo with a custom label. >>> fig = pygmt.Figure() >>> fig.timestamp(label="Powered by PyGMT") >>> fig.show() """self._preprocess()# pylint: disable=protected-access# Build the options passed to the "plot" modulekwdict={"T":True,"U":""}iflabelisnotNone:kwdict["U"]+=f"{label}"kwdict["U"]+=f"+j{justification}"ifis_nonstr_iter(offset):# given a tuplekwdict["U"]+="+o"+"/".join(f"{item}"foriteminoffset)else:# given a single valueif"/"notinoffsetandVersion(__gmt_version__)<=Version("6.4.0"):# Giving a single offset doesn't work in GMT <= 6.4.0.# See https://github.com/GenericMappingTools/gmt/issues/7107.kwdict["U"]+=f"+o{offset}/{offset}"else:kwdict["U"]+=f"+o{offset}"# The +t modifier was added in GMT 6.5.0.# See https://github.com/GenericMappingTools/gmt/pull/7127.iftextisnotNone:iflen(str(text))>64:msg=("Argument of 'text' must be no longer than 64 characters. ""The given text string will be truncated to 64 characters.")warnings.warn(message=msg,category=RuntimeWarning,stacklevel=2)ifVersion(__gmt_version__)<=Version("6.4.0"):# workaround for GMT<=6.4.0 by overriding the 'timefmt' parametertimefmt=text[:64]else:kwdict["U"]+=f"+t{text}"withSession()aslib:lib.call_module(module="plot",args=build_arg_string(kwdict,confdict={"FONT_LOGO":font,"FORMAT_TIME_STAMP":timefmt}),)