diff options
author | V3n3RiX <venerix@koprulu.sector> | 2024-09-05 12:28:41 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2024-09-05 12:28:41 +0100 |
commit | 5d93bae2c1576ab817f482024a6d47592829407b (patch) | |
tree | 1fd9619473e6cdba4c004554cb1743ec16654102 /sci-visualization/pythonprop | |
parent | 518b45bffd19d0b75715f338985f96c459f9d129 (diff) |
gentoo auto-resync : 05:09:2024 - 12:28:40
Diffstat (limited to 'sci-visualization/pythonprop')
-rw-r--r-- | sci-visualization/pythonprop/Manifest | 7 | ||||
-rw-r--r-- | sci-visualization/pythonprop/files/pythonprop-0.30.1-p20240217.patch | 169 | ||||
-rw-r--r-- | sci-visualization/pythonprop/files/pythonprop-drop-portland.patch | 87 | ||||
-rw-r--r-- | sci-visualization/pythonprop/files/pythonprop-matplotlib3.9.patch | 65 | ||||
-rw-r--r-- | sci-visualization/pythonprop/pythonprop-0.30.1_p20240217.ebuild (renamed from sci-visualization/pythonprop/pythonprop-0.30.1-r1.ebuild) | 9 |
5 files changed, 245 insertions, 92 deletions
diff --git a/sci-visualization/pythonprop/Manifest b/sci-visualization/pythonprop/Manifest index 5d79d0868c7a..6a302e791b29 100644 --- a/sci-visualization/pythonprop/Manifest +++ b/sci-visualization/pythonprop/Manifest @@ -1,4 +1,5 @@ -AUX pythonprop-drop-portland.patch 4249 BLAKE2B 6b7d2ce79db62d6343f68685383e8e60b8a97ef7dc932719218c8078dac4a058b3fc36b21c0a0db0855a766fbe23d575cd6785511fce15d497cbb5a4964508ff SHA512 b03ac440ae831ca8525f39915c2dbca91858d3a284c9ae4f36b1ac27594e00aab02aa2d090c08d0aeee7e273548e769138fc3a965801d462c181a00cb87aa959 -DIST pythonprop-0.30.1.tar.gz 1141620 BLAKE2B 54554d1a50976aa0516e70ef6cabf8c8c8fe41dc15980d0d06defca2dbf722baa4e98dddb974ea0d6da18e3d634661c980685b89411e8de4cf1cded452bb60a1 SHA512 582442e95732c78b580eceaf8b9d4922a23e5b3c5652738b110a40e1b94f91196755fad6e00370328130acc608121961d4e449199610137a757b086b53184b43 -EBUILD pythonprop-0.30.1-r1.ebuild 1243 BLAKE2B fc4c1e6b0b6102fd7bde6894cc2c10908cf8b23144d0eb0fe1cbd878e0169f7c99599e74a5181b2af0e68e2915e0871d45a2435fbde788382d12e2c25e3a8a78 SHA512 04863b59a1c9f815ec00fe758cc8adab6e2cf73ba89c5017d6fe3ae8b2692ec10d2f39b0600f4893e2b1114040db497836d7c917b948f7a5b2eae75f060f4e7e +AUX pythonprop-0.30.1-p20240217.patch 7124 BLAKE2B e95d31710f4201500aeef7d474b8f5c45a935179ac6c79d60e2cfb7e82c553e3be52af207b5797de1a8ec7e4fc916f75600491ca21ee4d71b8bac7f13befca7c SHA512 dfc3ffc902c9415a27e5a74f8dc988bb99c73e9daf8bcdd6c0a57d595014173995cddb0b95df1c69b40b288291af666ac8d4ee432a16615209b04ff7e7c2b5d8 +AUX pythonprop-matplotlib3.9.patch 2976 BLAKE2B 9affdfc859401f1b68326cc80538550c56f018c6e2d79f973b2c3abef552a0e75b392a40853413da3fb843143c86fe694b0083e6770cda874879d2b00c76d94f SHA512 ea2e02691222a7afce0cbae5b83bdaba748b2042a21c256721b5a9c73ae1db7db7b1826a58d42d828b7a33491941b44a0688a1f0015454877f8ba51e1f39b3cb +DIST pythonprop-0.30.1_p20240217.tar.gz 1141620 BLAKE2B 54554d1a50976aa0516e70ef6cabf8c8c8fe41dc15980d0d06defca2dbf722baa4e98dddb974ea0d6da18e3d634661c980685b89411e8de4cf1cded452bb60a1 SHA512 582442e95732c78b580eceaf8b9d4922a23e5b3c5652738b110a40e1b94f91196755fad6e00370328130acc608121961d4e449199610137a757b086b53184b43 +EBUILD pythonprop-0.30.1_p20240217.ebuild 1359 BLAKE2B 57de6b44082ffb293012d02aedd015faddf1f6467c453c67f5c7a87177fa784f8beea05dfa3aab5d873d5e796c96ab7afba7acd4275b627f89188f07b48c5d1e SHA512 1fcce7e3028e05570982b1131aeecc43dad102f4011645e755e41868eb4ecf901088192f5152fe4828b930b01bef3bf2bc8d058ca1b4cad0bcbcddce4361f513 MISC metadata.xml 464 BLAKE2B 51b9b066a69b6dbfb7eac1b069e1481106970d675c0ddafc8131551d4fe676cdda7828c36d50d30b82ea5a97d2f43385c0c420e1a843355dac09aa5b3eadbf93 SHA512 f10cc21761693cf0bd78c19283a8618c0fa7473bded1b87b5fa517ebd860d8d76977d78131af576b2d36cee6ef51d0788b151dbe89418efcd4bb64fc7acfdb92 diff --git a/sci-visualization/pythonprop/files/pythonprop-0.30.1-p20240217.patch b/sci-visualization/pythonprop/files/pythonprop-0.30.1-p20240217.patch new file mode 100644 index 000000000000..61e26db5a736 --- /dev/null +++ b/sci-visualization/pythonprop/files/pythonprop-0.30.1-p20240217.patch @@ -0,0 +1,169 @@ +diff --git a/data/voacapgui.desktop.in b/data/voacapgui.desktop.in +index 3237a87..175d7d8 100644 +--- a/data/voacapgui.desktop.in ++++ b/data/voacapgui.desktop.in +@@ -3,4 +3,5 @@ Type=Application + Exec=voacapgui + Name=voacapgui + Categories=Science;HamRadio ++Keywords=amateur;ham;hf;prediction;plot;radio;voacap; + Icon=@PACKAGE@ +diff --git a/man/voa3DPlot.1 b/man/voa3DPlot.1 +new file mode 100644 +index 0000000..1336eea +--- /dev/null ++++ b/man/voa3DPlot.1 +@@ -0,0 +1,36 @@ ++.TH voa3DPlot 1 "FEV 2024" Linux "User Manuals" ++.SH NAME ++voa3DPlot \- Plot the contents of VOACAP output files in a 3D format ++.SH SYNOPSIS ++.B voa3DPlot [options] file ++.SH DESCRIPTION ++.B voa3DPlot ++A python script used to graphically display the contents of output files produced by VOACAP. ++.SH OPTIONS ++.IP --version ++Shows program version number and exit. ++.IP "-h, --help" ++Shows a help message and exit. ++.IP "-b band, --band=band" ++Displays a band plan indicated by 'band', an integer value from 1 to 3 (1:SWL, 2:UK AMATEUR BANDS and 3:KSA AMATEUR BANDS). ++.IP "-f max_frequency, --freqmax=max_frequency" ++Specifies the maximum frequency (MHz) to display on the Y axis. ++.IP "-g group, --group=group" ++Specifies the group(s) within a file containing multiple groups to plot. Multiple groups must be separated by commas, e.g. '-g 1,3,4' (default = 1). ++.IP "-l 'label', --label='label'" ++Specifies the text label to be printed as a main title at the top of the plot. ++.IP "-m colourmap, --cmap=colourmap" ++Specifies the colourmap to use. Supported colour maps are 'autumn', 'bone', 'cool', 'copper',', 'hot', 'hsv', 'jet', 'pink', 'spring', 'summer', 'winter' (default = 'jet'). ++.IP "-o outputfile, --outfile=outputfile" ++Used to specify an output file to save the plot to. ++.IP "-q, --quiet" ++Process quietly, don't produce a graph on the screen. This only makes sense when used in conjunction with the -o option. ++.IP "-t type, --datatype=type" ++Specifies the type of image to plot. Supported image types are 0:None 1:MUFday 2:REL 3:SNR 4:S DBW (default = 1). ++.IP "-z timezone, --timezone=timezone" ++Specifies the timezone to shift the plots to. ++.SH AUTHORS ++This program was written by James Watson (M0DNS) <jimwatson at mac dot com>. ++ ++This manual page was written by David da Silva Polverari <polverari@debian.org> ++for the Debian Project (but may be used by others). +diff --git a/man/voaAreaPlot.1 b/man/voaAreaPlot.1 +index 8ddcfde..eb8c76a 100644 +--- a/man/voaAreaPlot.1 ++++ b/man/voaAreaPlot.1 +@@ -46,7 +46,7 @@ POI_FILE is a text file with points of interest to plot on the map. The file is + .IP "-p PROJECTION, --projection=PROJECTION" + PROJECTION specifies the map projection. Valid values are 'cyl' (Equidistant + Cylindrical), 'mill' (Miller Cylindrical), gall' (Gall Stereographic), +-'robin' (Robinson), 'vandg' (van der Grinten), 'sinu' (Sinusoidal), 'mbtfpq' ++\(aqrobin' (Robinson), 'vandg' (van der Grinten), 'sinu' (Sinusoidal), 'mbtfpq' + (McBryde-Thomas Flat Polar Quartic), 'eck4' (Eckert IV), 'kav7' (Kavrayskiy + VII), 'moll' (Mollweide), 'hammer' (Hammer). + .IP "-r RESOLUTION, --resolution=RESOLUTION" +diff --git a/man/voaAreaPlotgui.1 b/man/voaAreaPlotgui.1 +new file mode 100644 +index 0000000..88d07d6 +--- /dev/null ++++ b/man/voaAreaPlotgui.1 +@@ -0,0 +1,13 @@ ++.TH voaAreaPlotgui 1 "FEV 2024" Linux "User Manuals" ++.SH NAME ++voaAreaPlotgui \- Graphical frontend to the voaAreaPlot application ++.SH SYNOPSIS ++.B voaAreaPlotgui file ++.SH DESCRIPTION ++.B voaAreaPlotgui ++is a graphical user interface to the voaAreaPlot application. It plots the file contents according to the parameters set on the user interface. ++.SH AUTHORS ++This program was written by James Watson (M0DNS) <jimwatson at mac dot com>. ++ ++This manual page was written by David da Silva Polverari <polverari@debian.org> ++for the Debian Project (but may be used by others). +diff --git a/man/voaP2PPlotgui.1 b/man/voaP2PPlotgui.1 +new file mode 100644 +index 0000000..457a6a0 +--- /dev/null ++++ b/man/voaP2PPlotgui.1 +@@ -0,0 +1,13 @@ ++.TH voaP2PPlotgui 1 "FEV 2024" Linux "User Manuals" ++.SH NAME ++voaP2PPlotgui \- Graphical frontend to the voaP2PPlot application ++.SH SYNOPSIS ++.B voaP2PPlotgui file ++.SH DESCRIPTION ++.B voaP2PPlotgui ++is a graphical user interface to the voaP2PPlot application. It plots the file contents according to the parameters set on the user interface. ++.SH AUTHORS ++This program was written by James Watson (M0DNS) <jimwatson at mac dot com>. ++ ++This manual page was written by David da Silva Polverari <polverari@debian.org> ++for the Debian Project (but may be used by others). +diff --git a/man/voacapgui.1 b/man/voacapgui.1 +new file mode 100644 +index 0000000..31b12eb +--- /dev/null ++++ b/man/voacapgui.1 +@@ -0,0 +1,13 @@ ++.TH voacapgui 1 "FEV 2024" Linux "User Manuals" ++.SH NAME ++voacapgui \- An input GUI for voacapl ++.SH SYNOPSIS ++.B voacapgui ++.SH DESCRIPTION ++.B voacapgui ++is a graphical user interface frontend for \fBvoacapl\fP. It generates voacap input files from user input data and plots the resulting predictions. ++.SH AUTHORS ++This program was written by James Watson (M0DNS) <jimwatson at mac dot com>. ++ ++This manual page was written by David da Silva Polverari <polverari@debian.org> ++for the Debian Project (but may be used by others). +diff --git a/src/pythonprop/voaAreaPlot.py b/src/pythonprop/voaAreaPlot.py +index a0bd789..01f5d86 100644 +--- a/src/pythonprop/voaAreaPlot.py ++++ b/src/pythonprop/voaAreaPlot.py +@@ -114,6 +114,9 @@ class VOAAreaPlot: + + self.datadir = datadir + ++ # set backend during initialization to avoid switching error ++ matplotlib.use('GTK3Agg') ++ + try: + plot_parameters = VOAFile((in_file)) + plot_parameters.parse_file() +@@ -146,7 +149,10 @@ class VOAAreaPlot: + # sys.exit(1) + + portland = ListedColormap(["#0C3383", "#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"]) +- plt.register_cmap(name='portland', cmap=portland) ++ try: ++ plt.register_cmap(name='portland', cmap=portland) ++ except ValueError: ++ print("Portland colormap is already registered") + colMap = color_map + + projection = ccrs.PlateCarree() +diff --git a/src/pythonprop/voaP2PPlot.py b/src/pythonprop/voaP2PPlot.py +index faf87e6..7255667 100644 +--- a/src/pythonprop/voaP2PPlot.py ++++ b/src/pythonprop/voaP2PPlot.py +@@ -136,8 +136,15 @@ class VOAP2PPlot: + + self.image_defs = self.IMG_TYPE_DICT[self.data_type] + self.user_bands = user_bands ++ ++ # set backend during initialization to avoid switching error ++ matplotlib.use('GTK3Agg') ++ + portland = ListedColormap(["#0C3383", "#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"]) +- matplotlib.cm.register_cmap(name='portland', cmap=portland) ++ try: ++ matplotlib.cm.register_cmap(name='portland', cmap=portland) ++ except ValueError: ++ print("Portland colormap is already registered") + + if plot_groups[0]=='a': + num_grp = self.df.get_number_of_groups() diff --git a/sci-visualization/pythonprop/files/pythonprop-drop-portland.patch b/sci-visualization/pythonprop/files/pythonprop-drop-portland.patch deleted file mode 100644 index 5a6736b4624b..000000000000 --- a/sci-visualization/pythonprop/files/pythonprop-drop-portland.patch +++ /dev/null @@ -1,87 +0,0 @@ -# Drop 'portland' colormap creation. It is done more than once and actual -# matplotlib do not like redefinitions. -diff --git a/src/pythonprop/voaAreaPlot.py b/src/pythonprop/voaAreaPlot.py -index a0bd789..a3bdd48 100644 ---- a/src/pythonprop/voaAreaPlot.py -+++ b/src/pythonprop/voaAreaPlot.py -@@ -94,7 +94,7 @@ class VOAAreaPlot: - vg_files = [1], - data_type = 1, - time_zone = 0, -- color_map = 'portland', -+ color_map = 'jet', - face_colour = "white", - filled_contours = False, - plot_contours = False, -@@ -145,8 +145,6 @@ class VOAAreaPlot: - # print "-180 < Latitude < 180.0, -90 < Longitude < 90" - # sys.exit(1) - -- portland = ListedColormap(["#0C3383", "#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"]) -- plt.register_cmap(name='portland', cmap=portland) - colMap = color_map - - projection = ccrs.PlateCarree() -@@ -498,8 +496,8 @@ def main(in_file, datadir=None): - dest = "color_map", - default = 'jet', - choices = [ 'autumn', 'bone', 'cool', 'copper', 'gray', \ -- 'hot', 'hsv', 'jet', 'pink', 'spring','summer', 'winter', 'portland' ], -- help=_("COLOURMAP - may be one of 'autumn', 'bone', 'cool', 'copper', 'gray', 'hot', 'hsv', 'jet', 'pink', 'spring', 'summer', 'winter' or 'portland'. Default = 'jet'")) -+ 'hot', 'hsv', 'jet', 'pink', 'spring','summer', 'winter' ], -+ help=_("COLOURMAP - may be one of 'autumn', 'bone', 'cool', 'copper', 'gray', 'hot', 'hsv', 'jet', 'pink', 'spring', 'summer' or 'winter'. Default = 'jet'")) - """ - parser.add_argument("-n", "--interest", - dest = "poi_file", -diff --git a/src/pythonprop/voaAreaPlotgui.py b/src/pythonprop/voaAreaPlotgui.py -index c001397..9f75acc 100644 ---- a/src/pythonprop/voaAreaPlotgui.py -+++ b/src/pythonprop/voaAreaPlotgui.py -@@ -84,8 +84,7 @@ class VOAAreaPlotGUI: - 'pink': _('pink'), - 'spring': _('spring'), - 'summer': _('summer'), -- 'winter': _('winter'), -- 'portland': _('portland')} -+ 'winter': _('winter')} - - def __init__(self, - data_source_filename, -diff --git a/src/pythonprop/voaP2PPlot.py b/src/pythonprop/voaP2PPlot.py -index faf87e6..61fe9b9 100644 ---- a/src/pythonprop/voaP2PPlot.py -+++ b/src/pythonprop/voaP2PPlot.py -@@ -136,8 +136,6 @@ class VOAP2PPlot: - - self.image_defs = self.IMG_TYPE_DICT[self.data_type] - self.user_bands = user_bands -- portland = ListedColormap(["#0C3383", "#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"]) -- matplotlib.cm.register_cmap(name='portland', cmap=portland) - - if plot_groups[0]=='a': - num_grp = self.df.get_number_of_groups() -@@ -375,8 +373,8 @@ def main(data_file, datadir=None): - dest="color_map", - default='jet', - choices = [ 'autumn', 'bone', 'cool', 'copper', 'gray', \ -- 'hot', 'hsv', 'jet', 'pink', 'spring','summer', 'winter', 'portland' ], -- help=_("COLOURMAP - may be one of 'autumn', 'bone', 'cool', 'copper', 'gray', 'hot', 'hsv', 'jet', 'pink', 'spring', 'summer', 'winter' or 'portland'. Default = 'jet'")) -+ 'hot', 'hsv', 'jet', 'pink', 'spring','summer', 'winter' ], -+ help=_("COLOURMAP - may be one of 'autumn', 'bone', 'cool', 'copper', 'gray', 'hot', 'hsv', 'jet', 'pink', 'spring', 'summer' or 'winter'. Default = 'jet'")) - - parser.add_argument("-o", "--outfile", - dest="save_file", -diff --git a/src/pythonprop/voaP2PPlotgui.py b/src/pythonprop/voaP2PPlotgui.py -index e1c120b..0aca557 100644 ---- a/src/pythonprop/voaP2PPlotgui.py -+++ b/src/pythonprop/voaP2PPlotgui.py -@@ -83,8 +83,7 @@ class VOAP2PPlotGUI: - 'pink': _('pink'), - 'spring': _('spring'), - 'summer': _('summer'), -- 'winter': _('winter'), -- 'portland': _('portland')} -+ 'winter': _('winter')} - - - def __init__(self, data_source_filename, parent = None, datadir=""): diff --git a/sci-visualization/pythonprop/files/pythonprop-matplotlib3.9.patch b/sci-visualization/pythonprop/files/pythonprop-matplotlib3.9.patch new file mode 100644 index 000000000000..4cea6f50d4ee --- /dev/null +++ b/sci-visualization/pythonprop/files/pythonprop-matplotlib3.9.patch @@ -0,0 +1,65 @@ +--- a/src/pythonprop/voaAreaPlot.py ++++ b/src/pythonprop/voaAreaPlot.py +@@ -148,15 +148,15 @@ class VOAAreaPlot: + # print "-180 < Latitude < 180.0, -90 < Longitude < 90" + # sys.exit(1) + +- portland = ListedColormap(["#0C3383", "#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"]) ++ portland = ListedColormap(["#0C3383","#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"], name="portland") + try: +- plt.register_cmap(name='portland', cmap=portland) ++ matplotlib.colormaps.register(cmap=portland) + except ValueError: + print("Portland colormap is already registered") + colMap = color_map + + projection = ccrs.PlateCarree() +- axes_class = (GeoAxes,dict(map_projection=projection)) ++ axes_class = (GeoAxes,dict(projection=projection)) + + number_of_subplots = len(vg_files) + +@@ -208,7 +208,7 @@ class VOAAreaPlot: + cbar_mode='single', + cbar_pad=0.2, + cbar_size='3%', +- label_mode='') ++ label_mode='L') + + self.main_title_label = fig.suptitle(str(self.image_defs['title']), fontsize=self.main_title_fontsize) + +@@ -292,7 +292,7 @@ class VOAAreaPlot: + ax.plot([xpt],[ypt],'ro') + ax.text(xpt+100000,ypt+100000,location.get_name()) + """ +- gl = ax.gridlines(crs=projection, draw_labels=True, ++ gl = ax.gridlines(crs=projection, draw_labels=["bottom", "left"], + linewidth=1, color='black', alpha=0.75) + gl.xlabels_top = False + gl.xlabels_bottom = False +diff --git a/src/pythonprop/voaP2PPlot.py b/src/pythonprop/voaP2PPlot.py +index 7255667..4a3ff05 100644 +--- a/src/pythonprop/voaP2PPlot.py ++++ b/src/pythonprop/voaP2PPlot.py +@@ -140,9 +140,10 @@ class VOAP2PPlot: + # set backend during initialization to avoid switching error + matplotlib.use('GTK3Agg') + +- portland = ListedColormap(["#0C3383", "#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"]) ++ portland = ListedColormap(["#0C3383", "#0b599b","#0a7fb4","#57a18f","#bec255","#f2c438","#f2a638","#ef8235","#e4502a","#d91e1e"], ++name="portland") + try: +- matplotlib.cm.register_cmap(name='portland', cmap=portland) ++ matplotlib.colormaps.register(cmap=portland) + except ValueError: + print("Portland colormap is already registered") + +@@ -203,7 +204,7 @@ class VOAP2PPlot: + cbar_mode='single', + cbar_pad=0.2, + cbar_size='3%', +- label_mode='') ++ label_mode='L') + + self.main_title_label = fig.suptitle(plot_label+str(self.image_defs['title']), fontsize=self.main_title_fontsize) + diff --git a/sci-visualization/pythonprop/pythonprop-0.30.1-r1.ebuild b/sci-visualization/pythonprop/pythonprop-0.30.1_p20240217.ebuild index 0020e216326c..87ef45d96187 100644 --- a/sci-visualization/pythonprop/pythonprop-0.30.1-r1.ebuild +++ b/sci-visualization/pythonprop/pythonprop-0.30.1_p20240217.ebuild @@ -7,9 +7,13 @@ PYTHON_COMPAT=( python3_{9..12} ) inherit autotools python-single-r1 +MY_PV=$(ver_cut 1-3) + DESCRIPTION="Scripts to prepare and plot VOACAP propagation predictions" HOMEPAGE="https://www.qsl.net/h/hz1jw/pythonprop" -SRC_URI="https://github.com/jawatson/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz" +SRC_URI="https://github.com/jawatson/${PN}/archive/v${MY_PV}/${PN}-${MY_PV}.tar.gz -> ${P}.tar.gz" + +S="${WORKDIR}/${PN}-${MY_PV}" LICENSE="GPL-3" SLOT="0" @@ -31,7 +35,8 @@ DEPEND="${RDEPEND} app-text/yelp-tools " -PATCHES=( "${FILESDIR}/${PN}-drop-portland.patch" ) +PATCHES=( "${FILESDIR}/${PN}-0.30.1-p20240217.patch" + "${FILESDIR}/${PN}-matplotlib3.9.patch" ) src_prepare() { eapply_user |