diff --git a/docs/helm/canfar.md b/docs/helm/canfar.md index 6009e448..e236783e 100644 --- a/docs/helm/canfar.md +++ b/docs/helm/canfar.md @@ -294,9 +294,6 @@ deployment: # - containerPort: 5555 # protocol: TCP - # Set the top-level-directory name that gets mounted at the root. - # skahaTld: "/cavern" - defaultQuotaGB: "10" # Space delimited list of allowed Image Registry hosts. These hosts should match the hosts in the User Session images. diff --git a/helm/applications/skaha/add-user-config/README.md b/helm/applications/skaha/add-user-config/README.md new file mode 100644 index 00000000..2cc07615 --- /dev/null +++ b/helm/applications/skaha/add-user-config/README.md @@ -0,0 +1,6 @@ +# Desktop configuration files for Skaha Users + +This directory contains desktop configuration files for Skaha users to be placed in new user allocations (home folders). +The `desktop-config.tar` file is a tar archive that contains the necessary configuration files. It will be put into a ConfigMap and mounted into the Skaha Tomcat container. + +The `desktop` folder is the exploded view for ease of modification. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/casa/casa-config.tar b/helm/applications/skaha/add-user-config/desktop-config.tar similarity index 80% rename from helm/applications/skaha/add-user-config/casa/casa-config.tar rename to helm/applications/skaha/add-user-config/desktop-config.tar index 6408b390..78b7e911 100644 Binary files a/helm/applications/skaha/add-user-config/casa/casa-config.tar and b/helm/applications/skaha/add-user-config/desktop-config.tar differ diff --git a/helm/applications/skaha/add-user-config/Xresources b/helm/applications/skaha/add-user-config/desktop/.Xresources similarity index 100% rename from helm/applications/skaha/add-user-config/Xresources rename to helm/applications/skaha/add-user-config/desktop/.Xresources diff --git a/helm/applications/skaha/add-user-config/bashrc b/helm/applications/skaha/add-user-config/desktop/.bashrc similarity index 100% rename from helm/applications/skaha/add-user-config/bashrc rename to helm/applications/skaha/add-user-config/desktop/.bashrc diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/dhist b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/dhist new file mode 100644 index 00000000..4eed460c --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/dhist @@ -0,0 +1,4 @@ +(lp1 +S'/root' +p2 +a. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/14 b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/14 new file mode 100644 index 00000000..75722352 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/14 @@ -0,0 +1,5 @@ +(dp1 +V!yum install tar +p2 +I5 +s. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/35 b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/35 new file mode 100644 index 00000000..46937fe1 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/35 @@ -0,0 +1,5 @@ +(dp1 +Vls +p2 +I1 +s. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/3f b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/3f new file mode 100644 index 00000000..9f848b61 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/3f @@ -0,0 +1,8 @@ +(dp1 +V!tar zcvf casa .casa +p2 +I4 +sVls -al +p3 +I3 +s. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/ef b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/ef new file mode 100644 index 00000000..ca054ca9 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist/ef @@ -0,0 +1,5 @@ +(dp1 +Vcd ~ +p2 +I2 +s. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist_idx b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist_idx new file mode 100644 index 00000000..2bc802a8 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/db/shadowhist_idx @@ -0,0 +1,2 @@ +I6 +. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipy_user_conf.py b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipy_user_conf.py new file mode 100644 index 00000000..6d6fbbd0 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipy_user_conf.py @@ -0,0 +1,114 @@ +""" User configuration file for IPython + +This is a more flexible and safe way to configure ipython than *rc files +(ipythonrc, ipythonrc-pysh etc.) + +This file is always imported on ipython startup. You can import the +ipython extensions you need here (see IPython/Extensions directory). + +Feel free to edit this file to customize your ipython experience. + +Note that as such this file does nothing, for backwards compatibility. +Consult e.g. file 'ipy_profile_sh.py' for an example of the things +you can do here. + +See http://ipython.scipy.org/moin/IpythonExtensionApi for detailed +description on what you could do here. +""" + +# Most of your config files and extensions will probably start with this import + +import IPython.ipapi +ip = IPython.ipapi.get() + +# You probably want to uncomment this if you did %upgrade -nolegacy +# import ipy_defaults + +import os + +def main(): + + # uncomment if you want to get ipython -p sh behaviour + # without having to use command line switches + # import ipy_profile_sh + + # Configure your favourite editor? + # Good idea e.g. for %edit os.path.isfile + + #import ipy_editors + + # Choose one of these: + + #ipy_editors.scite() + #ipy_editors.scite('c:/opt/scite/scite.exe') + #ipy_editors.komodo() + #ipy_editors.idle() + # ... or many others, try 'ipy_editors??' after import to see them + + # Or roll your own: + #ipy_editors.install_editor("c:/opt/jed +$line $file") + + + o = ip.options + # An example on how to set options + #o.autocall = 1 + o.system_verbose = 0 + + #import_all("os sys") + #execf('~/_ipython/ns.py') + + + # -- prompt + # A different, more compact set of prompts from the default ones, that + # always show your current location in the filesystem: + + #o.prompt_in1 = r'\C_LightBlue[\C_LightCyan\Y2\C_LightBlue]\C_Normal\n\C_Green|\#>' + #o.prompt_in2 = r'.\D: ' + #o.prompt_out = r'[\#] ' + + # Try one of these color settings if you can't read the text easily + # autoexec is a list of IPython commands to execute on startup + #o.autoexec.append('%colors LightBG') + #o.autoexec.append('%colors NoColor') + #o.autoexec.append('%colors Linux') + + # for sane integer division that converts to float (1/2 == 0.5) + #o.autoexec.append('from __future__ import division') + + # For %tasks and %kill + #import jobctrl + + # For autoreloading of modules (%autoreload, %aimport) + #import ipy_autoreload + + # For winpdb support (%wdb) + #import ipy_winpdb + + # For bzr completer, requires bzrlib (the python installation of bzr) + #ip.load('ipy_bzr') + + # Tab completer that is not quite so picky (i.e. + # "foo". and str(2). will work). Complete + # at your own risk! + #import ipy_greedycompleter + + # If you are on Linux, you may be annoyed by + # "Display all N possibilities? (y or n)" on tab completion, + # as well as the paging through "more". Uncomment the following + # lines to disable that behaviour + #import readline + #readline.parse_and_bind('set completion-query-items 1000') + #readline.parse_and_bind('set page-completions no') + + +# some config helper functions you can use +def import_all(modules): + """ Usage: import_all("os sys") """ + for m in modules.split(): + ip.ex("from %s import *" % m) + +def execf(fname): + """ Execute a file in user namespace """ + ip.ex('execfile("%s")' % os.path.expanduser(fname)) + +main() diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipy_user_conf.pyo b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipy_user_conf.pyo new file mode 100644 index 00000000..02deadb0 Binary files /dev/null and b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipy_user_conf.pyo differ diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc new file mode 100644 index 00000000..66eb56c1 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc @@ -0,0 +1,631 @@ +# -*- Mode: Shell-Script -*- Not really, but shows comments correctly + +#*************************************************************************** +# +# Configuration file for IPython -- ipythonrc format +# +# =========================================================== +# Deprecation note: you should look into modifying ipy_user_conf.py (located +# in ~/.ipython or ~/_ipython, depending on your platform) instead, it's a +# more flexible and robust (and better supported!) configuration +# method. +# =========================================================== +# +# The format of this file is simply one of 'key value' lines. +# Lines containing only whitespace at the beginning and then a # are ignored +# as comments. But comments can NOT be put on lines with data. + +# The meaning and use of each key are explained below. + +#--------------------------------------------------------------------------- +# Section: included files + +# Put one or more *config* files (with the syntax of this file) you want to +# include. For keys with a unique value the outermost file has precedence. For +# keys with multiple values, they all get assembled into a list which then +# gets loaded by IPython. + +# In this file, all lists of things should simply be space-separated. + +# This allows you to build hierarchies of files which recursively load +# lower-level services. If this is your main ~/.ipython/ipythonrc file, you +# should only keep here basic things you always want available. Then you can +# include it in every other special-purpose config file you create. +include + +#--------------------------------------------------------------------------- +# Section: startup setup + +# These are mostly things which parallel a command line option of the same +# name. + +# Keys in this section should only appear once. If any key from this section +# is encountered more than once, the last value remains, all earlier ones get +# discarded. + + +# Automatic calling of callable objects. If set to 1 or 2, callable objects +# are automatically called when invoked at the command line, even if you don't +# type parentheses. IPython adds the parentheses for you. For example: + +#In [1]: str 45 +#------> str(45) +#Out[1]: '45' + +# IPython reprints your line with '---->' indicating that it added +# parentheses. While this option is very convenient for interactive use, it +# may occasionally cause problems with objects which have side-effects if +# called unexpectedly. + +# The valid values for autocall are: + +# autocall 0 -> disabled (you can toggle it at runtime with the %autocall magic) + +# autocall 1 -> active, but do not apply if there are no arguments on the line. + +# In this mode, you get: + +#In [1]: callable +#Out[1]: + +#In [2]: callable 'hello' +#------> callable('hello') +#Out[2]: False + +# 2 -> Active always. Even if no arguments are present, the callable object +# is called: + +#In [4]: callable +#------> callable() + +# Note that even with autocall off, you can still use '/' at the start of a +# line to treat the first argument on the command line as a function and add +# parentheses to it: + +#In [8]: /str 43 +#------> str(43) +#Out[8]: '43' + +autocall 1 + +# Auto-edit syntax errors. When you use the %edit magic in ipython to edit +# source code (see the 'editor' variable below), it is possible that you save +# a file with syntax errors in it. If this variable is true, IPython will ask +# you whether to re-open the editor immediately to correct such an error. + +autoedit_syntax 0 + +# Auto-indent. IPython can recognize lines ending in ':' and indent the next +# line, while also un-indenting automatically after 'raise' or 'return'. + +# This feature uses the readline library, so it will honor your ~/.inputrc +# configuration (or whatever file your INPUTRC variable points to). Adding +# the following lines to your .inputrc file can make indent/unindenting more +# convenient (M-i indents, M-u unindents): + +# $if Python +# "\M-i": " " +# "\M-u": "\d\d\d\d" +# $endif + +# The feature is potentially a bit dangerous, because it can cause problems +# with pasting of indented code (the pasted code gets re-indented on each +# line). But it's a huge time-saver when working interactively. The magic +# function %autoindent allows you to toggle it on/off at runtime. + +autoindent 1 + +# Auto-magic. This gives you access to all the magic functions without having +# to prepend them with an % sign. If you define a variable with the same name +# as a magic function (say who=1), you will need to access the magic function +# with % (%who in this example). However, if later you delete your variable +# (del who), you'll recover the automagic calling form. + +# Considering that many magic functions provide a lot of shell-like +# functionality, automagic gives you something close to a full Python+system +# shell environment (and you can extend it further if you want). + +automagic 1 + +# Size of the output cache. After this many entries are stored, the cache will +# get flushed. Depending on the size of your intermediate calculations, you +# may have memory problems if you make it too big, since keeping things in the +# cache prevents Python from reclaiming the memory for old results. Experiment +# with a value that works well for you. + +# If you choose cache_size 0 IPython will revert to python's regular >>> +# unnumbered prompt. You will still have _, __ and ___ for your last three +# results, but that will be it. No dynamic _1, _2, etc. will be created. If +# you are running on a slow machine or with very limited memory, this may +# help. + +cache_size 1000 + +# Classic mode: Setting 'classic 1' you lose many of IPython niceties, +# but that's your choice! Classic 1 -> same as IPython -classic. +# Note that this is _not_ the normal python interpreter, it's simply +# IPython emulating most of the classic interpreter's behavior. +classic 0 + +# colors - Coloring option for prompts and traceback printouts. + +# Currently available schemes: NoColor, Linux, LightBG. + +# This option allows coloring the prompts and traceback printouts. This +# requires a terminal which can properly handle color escape sequences. If you +# are having problems with this, use the NoColor scheme (uses no color escapes +# at all). + +# The Linux option works well in linux console type environments: dark +# background with light fonts. + +# LightBG is similar to Linux but swaps dark/light colors to be more readable +# in light background terminals. + +# keep uncommented only the one you want: +colors Linux +#colors LightBG +#colors NoColor + +######################## +# Note to Windows users +# +# Color and readline support is avaialble to Windows users via Gary Bishop's +# readline library. You can find Gary's tools at +# http://sourceforge.net/projects/uncpythontools. +# Note that his readline module requires in turn the ctypes library, available +# at http://starship.python.net/crew/theller/ctypes. +######################## + +# color_info: IPython can display information about objects via a set of +# functions, and optionally can use colors for this, syntax highlighting +# source code and various other elements. This information is passed through a +# pager (it defaults to 'less' if $PAGER is not set). + +# If your pager has problems, try to setting it to properly handle escapes +# (see the less manpage for detail), or disable this option. The magic +# function %color_info allows you to toggle this interactively for testing. + +color_info 1 + +# confirm_exit: set to 1 if you want IPython to confirm when you try to exit +# with an EOF (Control-d in Unix, Control-Z/Enter in Windows). Note that using +# the magic functions %Exit or %Quit you can force a direct exit, bypassing +# any confirmation. + +confirm_exit 1 + +# Use deep_reload() as a substitute for reload() by default. deep_reload() is +# still available as dreload() and appears as a builtin. + +deep_reload 0 + +# Which editor to use with the %edit command. If you leave this at 0, IPython +# will honor your EDITOR environment variable. Since this editor is invoked on +# the fly by ipython and is meant for editing small code snippets, you may +# want to use a small, lightweight editor here. + +# For Emacs users, setting up your Emacs server properly as described in the +# manual is a good idea. An alternative is to use jed, a very light editor +# with much of the feel of Emacs (though not as powerful for heavy-duty work). + +editor 0 + +# log 1 -> same as ipython -log. This automatically logs to ./ipython.log +log 0 + +# Same as ipython -Logfile YourLogfileName. +# Don't use with log 1 (use one or the other) +logfile '' + +# banner 0 -> same as ipython -nobanner +banner 1 + +# messages 0 -> same as ipython -nomessages +messages 1 + +# Automatically call the pdb debugger after every uncaught exception. If you +# are used to debugging using pdb, this puts you automatically inside of it +# after any call (either in IPython or in code called by it) which triggers an +# exception which goes uncaught. +pdb 0 + +# Enable the pprint module for printing. pprint tends to give a more readable +# display (than print) for complex nested data structures. +pprint 1 + +# Prompt strings + +# Most bash-like escapes can be used to customize IPython's prompts, as well as +# a few additional ones which are IPython-specific. All valid prompt escapes +# are described in detail in the Customization section of the IPython HTML/PDF +# manual. + +# Use \# to represent the current prompt number, and quote them to protect +# spaces. +prompt_in1 'In [\#]: ' + +# \D is replaced by as many dots as there are digits in the +# current value of \#. +prompt_in2 ' .\D.: ' + +prompt_out 'Out[\#]: ' + +# Select whether to left-pad the output prompts to match the length of the +# input ones. This allows you for example to use a simple '>' as an output +# prompt, and yet have the output line up with the input. If set to false, +# the output prompts will be unpadded (flush left). +prompts_pad_left 1 + +# Pylab support: when ipython is started with the -pylab switch, by default it +# executes 'from matplotlib.pylab import *'. Set this variable to false if you +# want to disable this behavior. + +# For details on pylab, see the matplotlib website: +# http://matplotlib.sf.net +pylab_import_all 1 + + +# quick 1 -> same as ipython -quick +quick 0 + +# Use the readline library (1) or not (0). Most users will want this on, but +# if you experience strange problems with line management (mainly when using +# IPython inside Emacs buffers) you may try disabling it. Not having it on +# prevents you from getting command history with the arrow keys, searching and +# name completion using TAB. + +readline 1 + +# Screen Length: number of lines of your screen. This is used to control +# printing of very long strings. Strings longer than this number of lines will +# be paged with the less command instead of directly printed. + +# The default value for this is 0, which means IPython will auto-detect your +# screen size every time it needs to print. If for some reason this isn't +# working well (it needs curses support), specify it yourself. Otherwise don't +# change the default. + +screen_length 0 + +# Prompt separators for input and output. +# Use \n for newline explicitly, without quotes. +# Use 0 (like at the cmd line) to turn off a given separator. + +# The structure of prompt printing is: +# (SeparateIn)Input.... +# (SeparateOut)Output... +# (SeparateOut2), # that is, no newline is printed after Out2 +# By choosing these you can organize your output any way you want. + +separate_in \n +separate_out 0 +separate_out2 0 + +# 'nosep 1' is a shorthand for '-SeparateIn 0 -SeparateOut 0 -SeparateOut2 0'. +# Simply removes all input/output separators, overriding the choices above. +nosep 0 + +# Wildcard searches - IPython has a system for searching names using +# shell-like wildcards; type %psearch? for details. This variables sets +# whether by default such searches should be case sensitive or not. You can +# always override the default at the system command line or the IPython +# prompt. + +wildcards_case_sensitive 1 + +# Object information: at what level of detail to display the string form of an +# object. If set to 0, ipython will compute the string form of any object X, +# by calling str(X), when X? is typed. If set to 1, str(X) will only be +# computed when X?? is given, and if set to 2 or higher, it will never be +# computed (there is no X??? level of detail). This is mostly of use to +# people who frequently manipulate objects whose string representation is +# extremely expensive to compute. + +object_info_string_level 0 + +# xmode - Exception reporting mode. + +# Valid modes: Plain, Context and Verbose. + +# Plain: similar to python's normal traceback printing. + +# Context: prints 5 lines of context source code around each line in the +# traceback. + +# Verbose: similar to Context, but additionally prints the variables currently +# visible where the exception happened (shortening their strings if too +# long). This can potentially be very slow, if you happen to have a huge data +# structure whose string representation is complex to compute. Your computer +# may appear to freeze for a while with cpu usage at 100%. If this occurs, you +# can cancel the traceback with Ctrl-C (maybe hitting it more than once). + +#xmode Plain +xmode Context +#xmode Verbose + +# multi_line_specials: if true, allow magics, aliases and shell escapes (via +# !cmd) to be used in multi-line input (like for loops). For example, if you +# have this active, the following is valid in IPython: +# +#In [17]: for i in range(3): +# ....: mkdir $i +# ....: !touch $i/hello +# ....: ls -l $i + +multi_line_specials 1 + + +# System calls: When IPython makes system calls (e.g. via special syntax like +# !cmd or !!cmd, or magics like %sc or %sx), it can print the command it is +# executing to standard output, prefixed by a header string. + +system_header "IPython system call: " + +system_verbose 0 + +# wxversion: request a specific wxPython version (used for -wthread) + +# Set this to the value of wxPython you want to use, but note that this +# feature requires you to have the wxversion Python module to work. If you +# don't have the wxversion module (try 'import wxversion' at the prompt to +# check) or simply want to leave the system to pick up the default, leave this +# variable at 0. + +wxversion 0 + +#--------------------------------------------------------------------------- +# Section: Readline configuration (readline is not available for MS-Windows) + +# This is done via the following options: + +# (i) readline_parse_and_bind: this option can appear as many times as you +# want, each time defining a string to be executed via a +# readline.parse_and_bind() command. The syntax for valid commands of this +# kind can be found by reading the documentation for the GNU readline library, +# as these commands are of the kind which readline accepts in its +# configuration file. + +# The TAB key can be used to complete names at the command line in one of two +# ways: 'complete' and 'menu-complete'. The difference is that 'complete' only +# completes as much as possible while 'menu-complete' cycles through all +# possible completions. Leave the one you prefer uncommented. + +readline_parse_and_bind tab: complete +#readline_parse_and_bind tab: menu-complete + +# This binds Control-l to printing the list of all possible completions when +# there is more than one (what 'complete' does when hitting TAB twice, or at +# the first TAB if show-all-if-ambiguous is on) +readline_parse_and_bind "\C-l": possible-completions + +# This forces readline to automatically print the above list when tab +# completion is set to 'complete'. You can still get this list manually by +# using the key bound to 'possible-completions' (Control-l by default) or by +# hitting TAB twice. Turning this on makes the printing happen at the first +# TAB. +readline_parse_and_bind set show-all-if-ambiguous on + +# If you have TAB set to complete names, you can rebind any key (Control-o by +# default) to insert a true TAB character. +readline_parse_and_bind "\C-o": tab-insert + +# These commands allow you to indent/unindent easily, with the 4-space +# convention of the Python coding standards. Since IPython's internal +# auto-indent system also uses 4 spaces, you should not change the number of +# spaces in the code below. +readline_parse_and_bind "\M-i": " " +readline_parse_and_bind "\M-o": "\d\d\d\d" +readline_parse_and_bind "\M-I": "\d\d\d\d" + +# Bindings for incremental searches in the history. These searches use the +# string typed so far on the command line and search anything in the previous +# input history containing them. +readline_parse_and_bind "\C-r": reverse-search-history +readline_parse_and_bind "\C-s": forward-search-history + +# Bindings for completing the current line in the history of previous +# commands. This allows you to recall any previous command by typing its first +# few letters and hitting Control-p, bypassing all intermediate commands which +# may be in the history (much faster than hitting up-arrow 50 times!) +readline_parse_and_bind "\C-p": history-search-backward +readline_parse_and_bind "\C-n": history-search-forward + +# I also like to have the same functionality on the plain arrow keys. If you'd +# rather have the arrows use all the history (and not just match what you've +# typed so far), comment out or delete the next two lines. +readline_parse_and_bind "\e[A": history-search-backward +readline_parse_and_bind "\e[B": history-search-forward + +# These are typically on by default under *nix, but not win32. +readline_parse_and_bind "\C-k": kill-line +readline_parse_and_bind "\C-u": unix-line-discard + +# (ii) readline_remove_delims: a string of characters to be removed from the +# default word-delimiters list used by readline, so that completions may be +# performed on strings which contain them. + +readline_remove_delims -/~ + +# (iii) readline_merge_completions: whether to merge the result of all +# possible completions or not. If true, IPython will complete filenames, +# python names and aliases and return all possible completions. If you set it +# to false, each completer is used at a time, and only if it doesn't return +# any completions is the next one used. + +# The default order is: [python_matches, file_matches, alias_matches] + +readline_merge_completions 1 + +# (iv) readline_omit__names: normally hitting after a '.' in a name +# will complete all attributes of an object, including all the special methods +# whose names start with single or double underscores (like __getitem__ or +# __class__). + +# This variable allows you to control this completion behavior: + +# readline_omit__names 1 -> completion will omit showing any names starting +# with two __, but it will still show names starting with one _. + +# readline_omit__names 2 -> completion will omit all names beginning with one +# _ (which obviously means filtering out the double __ ones). + +# Even when this option is set, you can still see those names by explicitly +# typing a _ after the period and hitting : 'name._' will always +# complete attribute names starting with '_'. + +# This option is off by default so that new users see all attributes of any +# objects they are dealing with. + +readline_omit__names 0 + +#--------------------------------------------------------------------------- +# Section: modules to be loaded with 'import ...' + +# List, separated by spaces, the names of the modules you want to import + +# Example: +# import_mod sys os +# will produce internally the statements +# import sys +# import os + +# Each import is executed in its own try/except block, so if one module +# fails to load the others will still be ok. + +import_mod + +#--------------------------------------------------------------------------- +# Section: modules to import some functions from: 'from ... import ...' + +# List, one per line, the modules for which you want only to import some +# functions. Give the module name first and then the name of functions to be +# imported from that module. + +# Example: + +# import_some IPython.genutils timing timings +# will produce internally the statement +# from IPython.genutils import timing, timings + +# timing() and timings() are two IPython utilities for timing the execution of +# your own functions, which you may find useful. Just commment out the above +# line if you want to test them. + +# If you have more than one modules_some line, each gets its own try/except +# block (like modules, see above). + +import_some + +#--------------------------------------------------------------------------- +# Section: modules to import all from : 'from ... import *' + +# List (same syntax as import_mod above) those modules for which you want to +# import all functions. Remember, this is a potentially dangerous thing to do, +# since it is very easy to overwrite names of things you need. Use with +# caution. + +# Example: +# import_all sys os +# will produce internally the statements +# from sys import * +# from os import * + +# As before, each will be called in a separate try/except block. + +import_all + +#--------------------------------------------------------------------------- +# Section: Python code to execute. + +# Put here code to be explicitly executed (keep it simple!) +# Put one line of python code per line. All whitespace is removed (this is a +# feature, not a bug), so don't get fancy building loops here. +# This is just for quick convenient creation of things you want available. + +# Example: +# execute x = 1 +# execute print 'hello world'; y = z = 'a' +# will produce internally +# x = 1 +# print 'hello world'; y = z = 'a' +# and each *line* (not each statement, we don't do python syntax parsing) is +# executed in its own try/except block. + +execute + +# Note for the adventurous: you can use this to define your own names for the +# magic functions, by playing some namespace tricks: + +# execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile + +# defines %pf as a new name for %profile. + +#--------------------------------------------------------------------------- +# Section: Pyhton files to load and execute. + +# Put here the full names of files you want executed with execfile(file). If +# you want complicated initialization, just write whatever you want in a +# regular python file and load it from here. + +# Filenames defined here (which *must* include the extension) are searched for +# through all of sys.path. Since IPython adds your .ipython directory to +# sys.path, they can also be placed in your .ipython dir and will be +# found. Otherwise (if you want to execute things not in .ipyton nor in +# sys.path) give a full path (you can use ~, it gets expanded) + +# Example: +# execfile file1.py ~/file2.py +# will generate +# execfile('file1.py') +# execfile('_path_to_your_home/file2.py') + +# As before, each file gets its own try/except block. + +execfile + +# If you are feeling adventurous, you can even add functionality to IPython +# through here. IPython works through a global variable called __ip which +# exists at the time when these files are read. If you know what you are doing +# (read the source) you can add functions to __ip in files loaded here. + +# The file example-magic.py contains a simple but correct example. Try it: + +# execfile example-magic.py + +# Look at the examples in IPython/iplib.py for more details on how these magic +# functions need to process their arguments. + +#--------------------------------------------------------------------------- +# Section: aliases for system shell commands + +# Here you can define your own names for system commands. The syntax is +# similar to that of the builtin %alias function: + +# alias alias_name command_string + +# The resulting aliases are auto-generated magic functions (hence usable as +# %alias_name) + +# For example: + +# alias myls ls -la + +# will define 'myls' as an alias for executing the system command 'ls -la'. +# This allows you to customize IPython's environment to have the same aliases +# you are accustomed to from your own shell. + +# You can also define aliases with parameters using %s specifiers (one per +# parameter): + +# alias parts echo first %s second %s + +# will give you in IPython: +# >>> %parts A B +# first A second B + +# Use one 'alias' statement per alias you wish to define. + +# alias + +#************************* end of file ************************ diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-math b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-math new file mode 100644 index 00000000..c32bcd13 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-math @@ -0,0 +1,36 @@ +# -*- Mode: Shell-Script -*- Not really, but shows comments correctly +#*************************************************************************** +# +# Configuration file for ipython -- ipythonrc format +# +# The format of this file is one of 'key value' lines. +# Lines containing only whitespace at the beginning and then a # are ignored +# as comments. But comments can NOT be put on lines with data. +#*************************************************************************** + +# This is an example of a 'profile' file which includes a base file and adds +# some customizaton for a particular purpose. + +# If this file is found in the user's ~/.ipython directory as ipythonrc-math, +# it can be loaded by calling passing the '-profile math' (or '-p math') +# option to IPython. + +# This example is a light customization to have ipython have basic math functions +# readily available, effectively making the python prompt a very capable scientific +# calculator + +# include base config and only add some extras +include ipythonrc + +# load the complex math functions but keep them in a separate namespace +import_mod cmath + +# from ... import * +# load the real math functions in the global namespace for convenience +import_all math + +# from ... import ... +import_some + +# code to execute +execute print "*** math functions available globally, cmath as a module" diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-numeric b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-numeric new file mode 100644 index 00000000..1700ca0c --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-numeric @@ -0,0 +1,57 @@ +# -*- Mode: Shell-Script -*- Not really, but shows comments correctly +#*************************************************************************** +# +# Configuration file for ipython -- ipythonrc format +# +# The format of this file is one of 'key value' lines. +# Lines containing only whitespace at the beginning and then a # are ignored +# as comments. But comments can NOT be put on lines with data. +#*************************************************************************** + +# This is an example of a 'profile' file which includes a base file and adds +# some customizaton for a particular purpose. + +# If this file is found in the user's ~/.ipython directory as +# ipythonrc-numeric, it can be loaded by calling passing the '-profile +# numeric' (or '-p numeric') option to IPython. + +# A simple alias numpy -> 'ipython -p numeric' makes life very convenient. + +# This example is meant to load several modules to turn IPython into a very +# capable environment for high-end numerical work, similar to IDL or MatLab +# but with the beauty and flexibility of the Python language. + +# Load the user's basic configuration +include ipythonrc + +# import ... + +# Load Numeric by itself so that 'help Numeric' works +import_mod Numeric + +# from ... import * +# GnuplotRuntime loads Gnuplot and adds enhancements for use in IPython +import_all Numeric IPython.numutils IPython.GnuplotInteractive + +# a simple line at zero, often useful for an x-axis +execute xaxis=gpfunc('0',title='',with='lines lt -1') + +# Below are optional things off by default. Uncomment them if desired. + +# MA (MaskedArray) modifies the Numeric printing mechanism so that huge arrays +# are only summarized and not printed (which may freeze the machine for a +# _long_ time). + +#import_mod MA + + +# gracePlot is a Python interface to the plotting package Grace. +# For more details go to: http://www.idyll.org/~n8gray/code/index.html +# Uncomment lines below if you have grace and its python support code + +#import_mod gracePlot +#execute grace = gracePlot.gracePlot # alias to make gracePlot instances +#execute print '*** grace is an alias for gracePlot.gracePlot' + +# Files to execute +execfile diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-physics b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-physics new file mode 100644 index 00000000..c7c25a3d --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-physics @@ -0,0 +1,45 @@ +# -*- Mode: Shell-Script -*- Not really, but shows comments correctly +#*************************************************************************** +# +# Configuration file for ipython -- ipythonrc format +# +# The format of this file is one of 'key value' lines. +# Lines containing only whitespace at the beginning and then a # are ignored +# as comments. But comments can NOT be put on lines with data. +#*************************************************************************** + +# If this file is found in the user's ~/.ipython directory as +# ipythonrc-physics, it can be loaded by calling passing the '-profile +# physics' (or '-p physics') option to IPython. + +# This profile loads modules useful for doing interactive calculations with +# physical quantities (with units). It relies on modules from Konrad Hinsen's +# ScientificPython (http://dirac.cnrs-orleans.fr/ScientificPython/) + +# First load basic user configuration +include ipythonrc + +# import ... +# Module with alternate input syntax for PhysicalQuantity objects. +import_mod IPython.Extensions.PhysicalQInput + +# from ... import * +# math CANNOT be imported after PhysicalQInteractive. It will override the +# functions defined there. +import_all math IPython.Extensions.PhysicalQInteractive + +# from ... import ... +import_some + +# code +execute q = PhysicalQuantityInteractive +execute g = PhysicalQuantityInteractive('9.8 m/s**2') +ececute rad = pi/180. +execute print '*** q is an alias for PhysicalQuantityInteractive' +execute print '*** g = 9.8 m/s^2 has been defined' +execute print '*** rad = pi/180 has been defined' +execute import ipy_constants as C +execute print '*** C is the physical constants module' + +# Files to execute +execfile diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-pysh b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-pysh new file mode 100644 index 00000000..2c7d2043 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-pysh @@ -0,0 +1,94 @@ +# -*- Mode: Shell-Script -*- Not really, but shows comments correctly +#*************************************************************************** +# Configuration file for ipython -- ipythonrc format +# +# The format of this file is one of 'key value' lines. +# Lines containing only whitespace at the beginning and then a # are ignored +# as comments. But comments can NOT be put on lines with data. +#*************************************************************************** + +# If this file is found in the user's ~/.ipython directory as ipythonrc-pysh, +# it can be loaded by calling passing the '-profile pysh' (or '-p pysh') +# option to IPython. + +# This profile turns IPython into a lightweight system shell with python +# syntax. + +# We only set a few options here, the rest is done in the companion pysh.py +# file. In the future _all_ of IPython's configuration will be done via +# proper python code. + +############################################################################ +# First load common user configuration +include ipythonrc + +############################################################################ +# Load all the actual syntax extensions for shell-like operation, which live +# in the InterpreterExec standard extension. +import_all IPython.Extensions.InterpreterExec + +############################################################################ +# PROMPTS +# +# Configure prompt for more shell-like usage. + +# Most bash-like escapes can be used to customize IPython's prompts, as well as +# a few additional ones which are IPython-specific. All valid prompt escapes +# are described in detail in the Customization section of the IPython HTML/PDF +# manual. + +prompt_in1 '\C_LightGreen\u@\h\C_LightBlue[\C_LightCyan\Y1\C_LightBlue]\C_Green|\#> ' +prompt_in2 '\C_Green|\C_LightGreen\D\C_Green> ' +prompt_out '<\#> ' + +# Here's a more complex prompt, showing the hostname and more path depth (\Y3) +#prompt_in1 '\C_LightRed\u\C_Blue@\C_Red\h\C_LightBlue[\C_LightCyan\Y3\C_LightBlue]\C_LightGreen\#> ' + +# Select whether to left-pad the output prompts to match the length of the +# input ones. This allows you for example to use a simple '>' as an output +# prompt, and yet have the output line up with the input. If set to false, +# the output prompts will be unpadded (flush left). +prompts_pad_left 1 + + +# Remove all blank lines in between prompts, like a normal shell. +separate_in 0 +separate_out 0 +separate_out2 0 + +# Allow special syntax (!, magics and aliases) in multiline input +multi_line_specials 1 + +############################################################################ +# ALIASES + +# Declare some common aliases. Type alias? at an ipython prompt for details on +# the syntax, use @unalias to delete existing aliases. + +# Don't go too crazy here, the file pysh.py called below runs @rehash, which +# loads ALL of your $PATH as aliases (except for Python keywords and +# builtins). + +# Some examples: + +# A simple alias without arguments +#alias cl clear + +# An alias which expands the full line before the end of the alias. This +# lists only directories: +#alias ldir pwd;ls -oF --color %l | grep /$ + +# An alias with two positional arguments: +#alias parts echo 'First <%s> Second <%s>' + +# In use these two aliases give (note that ldir is already built into IPython +# for Unix): + +#fperez[IPython]16> ldir +#/usr/local/home/fperez/ipython/ipython/IPython +#drwxr-xr-x 2 fperez 4096 Jun 21 01:01 CVS/ +#drwxr-xr-x 3 fperez 4096 Jun 21 01:10 Extensions/ +#drwxr-xr-x 3 fperez 4096 Jun 21 01:27 UserConfig/ + +#fperez[IPython]17> parts Hello world and goodbye +#First Second and goodbye diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-tutorial b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-tutorial new file mode 100644 index 00000000..6c975690 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/ipython/ipythonrc-tutorial @@ -0,0 +1,37 @@ +# -*- Mode: Shell-Script -*- Not really, but shows comments correctly +#*************************************************************************** +# +# Configuration file for ipython -- ipythonrc format +# +# The format of this file is one of 'key value' lines. +# Lines containing only whitespace at the beginning and then a # are ignored +# as comments. But comments can NOT be put on lines with data. +#*************************************************************************** + +# If this file is found in the user's ~/.ipython directory as +# ipythonrc-tutorial, it can be loaded by calling passing the '-profile +# tutorial' (or '-p tutorial') option to IPython. + +# This profile loads a special input line filter to allow typing lines which +# begin with '>>> ' or '... '. These two strings, if present at the start of +# the input line, are stripped. This allows for direct pasting of code from +# examples such as those available in the standard Python tutorial. + +# First load basic user configuration +include ipythonrc + +# import ... +# Module with alternate input syntax for pasting python input +import_mod IPython.Extensions.InterpreterPasteInput + +# from ... import * +import_all + +# from ... import ... +import_some + +# code +execute + +# Files to execute +execfile diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/matplotlib/fontList.cache b/helm/applications/skaha/add-user-config/desktop/.casa/matplotlib/fontList.cache new file mode 100644 index 00000000..4e3f8e16 --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/matplotlib/fontList.cache @@ -0,0 +1,2168 @@ +(imatplotlib.font_manager +FontManager +p1 +(dp2 +S'afm_lookup_cache' +p3 +(dp4 +sS'ttflist' +p5 +(lp6 +ccopy_reg +_reconstructor +p7 +(cmatplotlib.font_manager +FontEntry +p8 +c__builtin__ +object +p9 +NtRp10 +(dp11 +S'style' +p12 +S'normal' +p13 +sS'name' +p14 +S'STIXSizeTwoSym' +p15 +sS'weight' +p16 +I700 +sS'stretch' +p17 +g13 +sS'variant' +p18 +g13 +sS'fname' +p19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf' +p20 +sS'size' +p21 +S'scalable' +p22 +sbag7 +(g8 +g9 +NtRp23 +(dp24 +g12 +g13 +sg14 +S'cmmi10' +p25 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmmi10.ttf' +p26 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp27 +(dp28 +g12 +g13 +sg14 +S'STIXSizeFourSym' +p29 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymBol.ttf' +p30 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp31 +(dp32 +g12 +S'italic' +p33 +sg14 +S'STIXGeneral' +p34 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBolIta.ttf' +p35 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp36 +(dp37 +g12 +g13 +sg14 +S'STIXNonUnicode' +p38 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUni.ttf' +p39 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp40 +(dp41 +g12 +g13 +sg14 +S'cmr10' +p42 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmr10.ttf' +p43 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp44 +(dp45 +g12 +g13 +sg14 +S'STIXSizeOneSym' +p46 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymBol.ttf' +p47 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp48 +(dp49 +g12 +g33 +sg14 +S'STIXNonUnicode' +p50 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBolIta.ttf' +p51 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp52 +(dp53 +g12 +g13 +sg14 +S'cmtt10' +p54 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmtt10.ttf' +p55 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp56 +(dp57 +g12 +g13 +sg14 +S'STIXSizeOneSym' +p58 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymReg.ttf' +p59 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp60 +(dp61 +g12 +g13 +sg14 +S'cmb10' +p62 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmb10.ttf' +p63 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp64 +(dp65 +g12 +S'oblique' +p66 +sg14 +S'Bitstream Vera Sans Mono' +p67 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoBI.ttf' +p68 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp69 +(dp70 +g12 +g13 +sg14 +S'Bitstream Vera Sans' +p71 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraBd.ttf' +p72 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp73 +(dp74 +g12 +g13 +sg14 +S'STIXGeneral' +p75 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBol.ttf' +p76 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp77 +(dp78 +g12 +g66 +sg14 +S'Bitstream Vera Sans' +p79 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraIt.ttf' +p80 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp81 +(dp82 +g12 +g13 +sg14 +S'Bitstream Vera Serif' +p83 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraSe.ttf' +p84 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp85 +(dp86 +g12 +g13 +sg14 +S'STIXGeneral' +p87 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf' +p88 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp89 +(dp90 +g12 +g13 +sg14 +S'cmss10' +p91 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmss10.ttf' +p92 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp93 +(dp94 +g12 +g13 +sg14 +S'STIXSizeFourSym' +p95 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymReg.ttf' +p96 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp97 +(dp98 +g12 +g13 +sg14 +S'Bitstream Vera Serif' +p99 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraSeBd.ttf' +p100 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp101 +(dp102 +g12 +g13 +sg14 +S'Bitstream Vera Sans Mono' +p103 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoBd.ttf' +p104 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp105 +(dp106 +g12 +g33 +sg14 +S'STIXNonUnicode' +p107 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniIta.ttf' +p108 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp109 +(dp110 +g12 +g13 +sg14 +S'STIXSizeThreeSym' +p111 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf' +p112 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp113 +(dp114 +g12 +g13 +sg14 +S'STIXNonUnicode' +p115 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf' +p116 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp117 +(dp118 +g12 +g13 +sg14 +S'Bitstream Vera Sans' +p119 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf' +p120 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp121 +(dp122 +g12 +g66 +sg14 +S'Bitstream Vera Sans Mono' +p123 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoIt.ttf' +p124 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp125 +(dp126 +g12 +g33 +sg14 +S'STIXGeneral' +p127 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf' +p128 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp129 +(dp130 +g12 +g13 +sg14 +S'STIXSizeTwoSym' +p131 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf' +p132 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp133 +(dp134 +g12 +g13 +sg14 +S'STIXSizeThreeSym' +p135 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf' +p136 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp137 +(dp138 +g12 +g13 +sg14 +S'Bitstream Vera Sans Mono' +p139 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMono.ttf' +p140 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp141 +(dp142 +g12 +g13 +sg14 +S'STIXSizeFiveSym' +p143 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf' +p144 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp145 +(dp146 +g12 +g13 +sg14 +S'cmsy10' +p147 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmsy10.ttf' +p148 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp149 +(dp150 +g12 +g66 +sg14 +S'Bitstream Vera Sans' +p151 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraBI.ttf' +p152 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp153 +(dp154 +g12 +g13 +sg14 +S'cmex10' +p155 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmex10.ttf' +p156 +sg21 +g22 +sbasS'defaultFamily' +p157 +(dp158 +S'afm' +p159 +S'Helvetica' +p160 +sS'ttf' +p161 +S'Bitstream Vera Sans' +p162 +ssS'ttffiles' +p163 +(lp164 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymBol.ttf' +p165 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmmi10.ttf' +p166 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymBol.ttf' +p167 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBolIta.ttf' +p168 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUni.ttf' +p169 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmr10.ttf' +p170 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymBol.ttf' +p171 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBolIta.ttf' +p172 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmtt10.ttf' +p173 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizOneSymReg.ttf' +p174 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmb10.ttf' +p175 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoBI.ttf' +p176 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraBd.ttf' +p177 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralBol.ttf' +p178 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraIt.ttf' +p179 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraSe.ttf' +p180 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneral.ttf' +p181 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmss10.ttf' +p182 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFourSymReg.ttf' +p183 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraSeBd.ttf' +p184 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoBd.ttf' +p185 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniIta.ttf' +p186 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymBol.ttf' +p187 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXNonUniBol.ttf' +p188 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/Vera.ttf' +p189 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMoIt.ttf' +p190 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXGeneralItalic.ttf' +p191 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizTwoSymReg.ttf' +p192 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizThreeSymReg.ttf' +p193 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraMono.ttf' +p194 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/STIXSizFiveSymReg.ttf' +p195 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmsy10.ttf' +p196 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/VeraBI.ttf' +p197 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf/cmex10.ttf' +p198 +asS'_FontManager__default_weight' +p199 +g13 +sS'_version' +p200 +I7 +sS'ttf_lookup_cache' +p201 +(dp202 +sS'default_size' +p203 +NsS'defaultFont' +p204 +(dp205 +g159 +Nsg161 +g189 +ssS'afmfiles' +p206 +(lp207 +S'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pcrbo8a.afm' +p208 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/ptmb8a.afm' +p209 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pncbi8a.afm' +p210 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-BoldOblique.afm' +p211 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pbkdi8a.afm' +p212 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-Bold.afm' +p213 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvr8a.afm' +p214 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/psyr.afm' +p215 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/ZapfDingbats.afm' +p216 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-BoldOblique.afm' +p217 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/cmsy10.afm' +p218 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pplb8a.afm' +p219 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/putri8a.afm' +p220 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pcrr8a.afm' +p221 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-Bold.afm' +p222 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pncb8a.afm' +p223 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pagd8a.afm' +p224 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pagdo8a.afm' +p225 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Italic.afm' +p226 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pagko8a.afm' +p227 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Roman.afm' +p228 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier.afm' +p229 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvlo8a.afm' +p230 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pbkli8a.afm' +p231 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pbkd8a.afm' +p232 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pcrro8a.afm' +p233 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pplbi8a.afm' +p234 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/putb8a.afm' +p235 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pplr8a.afm' +p236 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvro8a.afm' +p237 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Courier-Oblique.afm' +p238 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-BoldItalic.afm' +p239 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvro8an.afm' +p240 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/cmr10.afm' +p241 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pplri8a.afm' +p242 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvbo8a.afm' +p243 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Symbol.afm' +p244 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Times-Bold.afm' +p245 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvl8a.afm' +p246 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/putbi8a.afm' +p247 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/ptmbi8a.afm' +p248 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pcrb8a.afm' +p249 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/ptmr8a.afm' +p250 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/ptmri8a.afm' +p251 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pzcmi8a.afm' +p252 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/putr8a.afm' +p253 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pagk8a.afm' +p254 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvr8an.afm' +p255 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica.afm' +p256 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pzdr.afm' +p257 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvb8an.afm' +p258 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/cmtt10.afm' +p259 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvbo8an.afm' +p260 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/cmmi10.afm' +p261 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pncr8a.afm' +p262 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pncri8a.afm' +p263 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/cmex10.afm' +p264 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/pbkl8a.afm' +p265 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/pdfcorefonts/Helvetica-Oblique.afm' +p266 +aS'/casa/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/afm/phvb8a.afm' +p267 +asS'afmlist' +p268 +(lp269 +g7 +(g8 +g9 +NtRp270 +(dp271 +g12 +g33 +sg14 +S'Courier' +p272 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g208 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp273 +(dp274 +g12 +g13 +sg14 +S'Times' +p275 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g209 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp276 +(dp277 +g12 +g33 +sg14 +S'New Century Schoolbook' +p278 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g210 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp279 +(dp280 +g12 +g33 +sg14 +S'Helvetica' +p281 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g211 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp282 +(dp283 +g12 +g33 +sg14 +S'ITC Bookman' +p284 +sg16 +I600 +sg17 +g13 +sg18 +g13 +sg19 +g212 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp285 +(dp286 +g12 +g13 +sg14 +S'Courier' +p287 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g213 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp288 +(dp289 +g12 +g13 +sg14 +S'Helvetica' +p290 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g214 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp291 +(dp292 +g12 +g13 +sg14 +S'Symbol' +p293 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g215 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp294 +(dp295 +g12 +g13 +sg14 +S'ZapfDingbats' +p296 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g216 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp297 +(dp298 +g12 +g33 +sg14 +S'Courier' +p299 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g217 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp300 +(dp301 +g12 +g33 +sg14 +S'Computer Modern' +p302 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g218 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp303 +(dp304 +g12 +g13 +sg14 +S'Palatino' +p305 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g219 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp306 +(dp307 +g12 +g33 +sg14 +S'Utopia' +p308 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +g220 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp309 +(dp310 +g12 +g13 +sg14 +S'Courier' +p311 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g221 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp312 +(dp313 +g12 +g13 +sg14 +S'Helvetica' +p314 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g222 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp315 +(dp316 +g12 +g13 +sg14 +S'New Century Schoolbook' +p317 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g223 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp318 +(dp319 +g12 +g13 +sg14 +S'ITC Avant Garde Gothic' +p320 +sg16 +I600 +sg17 +g13 +sg18 +g13 +sg19 +g224 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp321 +(dp322 +g12 +g33 +sg14 +S'ITC Avant Garde Gothic' +p323 +sg16 +I600 +sg17 +g13 +sg18 +g13 +sg19 +g225 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp324 +(dp325 +g12 +g33 +sg14 +S'Times' +p326 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g226 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp327 +(dp328 +g12 +g33 +sg14 +S'ITC Avant Garde Gothic' +p329 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +g227 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp330 +(dp331 +g12 +g13 +sg14 +S'Times' +p332 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g228 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp333 +(dp334 +g12 +g13 +sg14 +S'Courier' +p335 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g229 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp336 +(dp337 +g12 +g33 +sg14 +S'Helvetica' +p338 +sg16 +I200 +sg17 +g13 +sg18 +g13 +sg19 +g230 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp339 +(dp340 +g12 +g33 +sg14 +S'ITC Bookman' +p341 +sg16 +I200 +sg17 +g13 +sg18 +g13 +sg19 +g231 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp342 +(dp343 +g12 +g13 +sg14 +S'ITC Bookman' +p344 +sg16 +I600 +sg17 +g13 +sg18 +g13 +sg19 +g232 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp345 +(dp346 +g12 +g33 +sg14 +S'Courier' +p347 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g233 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp348 +(dp349 +g12 +g33 +sg14 +S'Palatino' +p350 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g234 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp351 +(dp352 +g12 +g13 +sg14 +S'Utopia' +p353 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g235 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp354 +(dp355 +g12 +g13 +sg14 +S'Palatino' +p356 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g236 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp357 +(dp358 +g12 +g33 +sg14 +S'Helvetica' +p359 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g237 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp360 +(dp361 +g12 +g33 +sg14 +S'Courier' +p362 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g238 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp363 +(dp364 +g12 +g33 +sg14 +S'Times' +p365 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g239 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp366 +(dp367 +g12 +g33 +sg14 +S'Helvetica' +p368 +sg16 +I500 +sg17 +S'condensed' +p369 +sg18 +g13 +sg19 +g240 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp370 +(dp371 +g12 +g13 +sg14 +S'Computer Modern' +p372 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g241 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp373 +(dp374 +g12 +g33 +sg14 +S'Palatino' +p375 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g242 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp376 +(dp377 +g12 +g33 +sg14 +S'Helvetica' +p378 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g243 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp379 +(dp380 +g12 +g13 +sg14 +S'Symbol' +p381 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g244 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp382 +(dp383 +g12 +g13 +sg14 +S'Times' +p384 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g245 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp385 +(dp386 +g12 +g13 +sg14 +S'Helvetica' +p387 +sg16 +I200 +sg17 +g13 +sg18 +g13 +sg19 +g246 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp388 +(dp389 +g12 +g33 +sg14 +S'Utopia' +p390 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g247 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp391 +(dp392 +g12 +g33 +sg14 +S'Times' +p393 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g248 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp394 +(dp395 +g12 +g13 +sg14 +S'Courier' +p396 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g249 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp397 +(dp398 +g12 +g13 +sg14 +S'Times' +p399 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g250 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp400 +(dp401 +g12 +g33 +sg14 +S'Times' +p402 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g251 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp403 +(dp404 +g12 +g33 +sg14 +S'ITC Zapf Chancery' +p405 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g252 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp406 +(dp407 +g12 +g13 +sg14 +S'Utopia' +p408 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +g253 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp409 +(dp410 +g12 +g13 +sg14 +S'ITC Avant Garde Gothic' +p411 +sg16 +I400 +sg17 +g13 +sg18 +g13 +sg19 +g254 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp412 +(dp413 +g12 +g13 +sg14 +S'Helvetica' +p414 +sg16 +I500 +sg17 +g369 +sg18 +g13 +sg19 +g255 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp415 +(dp416 +g12 +g13 +sg14 +S'Helvetica' +p417 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g256 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp418 +(dp419 +g12 +g13 +sg14 +S'ITC Zapf Dingbats' +p420 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g257 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp421 +(dp422 +g12 +g13 +sg14 +S'Helvetica' +p423 +sg16 +I700 +sg17 +g369 +sg18 +g13 +sg19 +g258 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp424 +(dp425 +g12 +g13 +sg14 +S'Computer Modern' +p426 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g259 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp427 +(dp428 +g12 +g33 +sg14 +S'Helvetica' +p429 +sg16 +I700 +sg17 +g369 +sg18 +g13 +sg19 +g260 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp430 +(dp431 +g12 +g33 +sg14 +S'Computer Modern' +p432 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g261 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp433 +(dp434 +g12 +g13 +sg14 +S'New Century Schoolbook' +p435 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g262 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp436 +(dp437 +g12 +g33 +sg14 +S'New Century Schoolbook' +p438 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g263 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp439 +(dp440 +g12 +g13 +sg14 +S'Computer Modern' +p441 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g264 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp442 +(dp443 +g12 +g13 +sg14 +S'ITC Bookman' +p444 +sg16 +I200 +sg17 +g13 +sg18 +g13 +sg19 +g265 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp445 +(dp446 +g12 +g33 +sg14 +S'Helvetica' +p447 +sg16 +I500 +sg17 +g13 +sg18 +g13 +sg19 +g266 +sg21 +g22 +sbag7 +(g8 +g9 +NtRp448 +(dp449 +g12 +g13 +sg14 +S'Helvetica' +p450 +sg16 +I700 +sg17 +g13 +sg18 +g13 +sg19 +g267 +sg21 +g22 +sbasb. \ No newline at end of file diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/viewer/rc b/helm/applications/skaha/add-user-config/desktop/.casa/viewer/rc new file mode 100644 index 00000000..a0b7990e --- /dev/null +++ b/helm/applications/skaha/add-user-config/desktop/.casa/viewer/rc @@ -0,0 +1,3 @@ + +# added 2015-11-11 14:43:15 +viewer.mouse.state.point: dot diff --git a/helm/applications/skaha/add-user-config/desktop/.casa/xauthority b/helm/applications/skaha/add-user-config/desktop/.casa/xauthority new file mode 100644 index 00000000..29bf4b73 Binary files /dev/null and b/helm/applications/skaha/add-user-config/desktop/.casa/xauthority differ diff --git a/helm/applications/skaha/skaha-config/k8s-resources.json b/helm/applications/skaha/skaha-config/k8s-resources.json index 7688fc51..0484c3af 100644 --- a/helm/applications/skaha/skaha-config/k8s-resources.json +++ b/helm/applications/skaha/skaha-config/k8s-resources.json @@ -1,6 +1,6 @@ { "cores": { - "default": 1, + "default": 2, "defaultRequest": 1, "defaultLimit": 8, "options": [ @@ -23,7 +23,7 @@ ] }, "memoryGB": { - "default": 1, + "default": 8, "defaultRequest": 4, "defaultLimit": 32, "options": [ diff --git a/helm/applications/skaha/skaha-config/launch-carta-legacy.yaml b/helm/applications/skaha/skaha-config/launch-carta-legacy.yaml index 8309b8a7..fafee405 100644 --- a/helm/applications/skaha/skaha-config/launch-carta-legacy.yaml +++ b/helm/applications/skaha/skaha-config/launch-carta-legacy.yaml @@ -43,9 +43,9 @@ spec: - name: skaha_sessionid value: "${skaha.sessionid}" - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_TOP_LEVEL_DIR}/home/${skaha.userid}" - name: PWD - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_TOP_LEVEL_DIR}/home/${skaha.userid}" - name: OMP_NUM_THREADS value: "${software.requests.cores}" securityContext: @@ -57,7 +57,7 @@ spec: image: ${software.imageid} command: ["/bin/sh", "-c"] args: - - /skaha-system/skaha-carta-legacy.sh ${SKAHA_TLD} ${SKAHA_TLD}/projects + - /skaha-system/skaha-carta-legacy.sh ${SKAHA_TOP_LEVEL_DIR} ${SKAHA_PROJECTS_DIR} imagePullPolicy: {{ .Values.deployment.skaha.sessions.imagePullPolicy | required "deployment.skaha.sessions.imagePullPolicy must be set." }} resources: requests: diff --git a/helm/applications/skaha/skaha-config/launch-carta.yaml b/helm/applications/skaha/skaha-config/launch-carta.yaml index 676e96d6..e9a9afd7 100644 --- a/helm/applications/skaha/skaha-config/launch-carta.yaml +++ b/helm/applications/skaha/skaha-config/launch-carta.yaml @@ -43,9 +43,9 @@ spec: - name: skaha_sessionid value: "${skaha.sessionid}" - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: PWD - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: OMP_NUM_THREADS value: "${software.requests.cores}" securityContext: @@ -57,7 +57,7 @@ spec: image: ${software.imageid} command: ["/bin/sh", "-c"] args: - - /skaha-system/skaha-carta.sh ${SKAHA_TLD} ${SKAHA_TLD}/projects "${skaha.sessionurlpath}" + - /skaha-system/skaha-carta.sh ${SKAHA_TOP_LEVEL_DIR} ${SKAHA_PROJECTS_DIR} "${skaha.sessionurlpath}" imagePullPolicy: {{ .Values.deployment.skaha.sessions.imagePullPolicy | required "deployment.skaha.sessions.imagePullPolicy must be set." }} resources: requests: diff --git a/helm/applications/skaha/skaha-config/launch-contributed.yaml b/helm/applications/skaha/skaha-config/launch-contributed.yaml index d331f83b..a0d8f89d 100644 --- a/helm/applications/skaha/skaha-config/launch-contributed.yaml +++ b/helm/applications/skaha/skaha-config/launch-contributed.yaml @@ -43,9 +43,9 @@ spec: - name: skaha_sessionid value: "${skaha.sessionid}" - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: PWD - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: JULIA_NUM_THREADS value: "${software.requests.cores}" - name: OPENBLAS_NUM_THREADS diff --git a/helm/applications/skaha/skaha-config/launch-desktop-app.yaml b/helm/applications/skaha/skaha-config/launch-desktop-app.yaml index c0eca74e..1977750b 100644 --- a/helm/applications/skaha/skaha-config/launch-desktop-app.yaml +++ b/helm/applications/skaha/skaha-config/launch-desktop-app.yaml @@ -51,7 +51,7 @@ spec: - name: skaha_sessionid value: "${skaha.sessionid}" - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: DISPLAY value: "${software.targetip}" - name: GDK_SYNCHRONIZE @@ -59,7 +59,7 @@ spec: - name: SHELL value: "/bin/bash" - name: PWD - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: OMP_NUM_THREADS value: "${software.requests.cores}" securityContext: @@ -69,7 +69,7 @@ spec: drop: - ALL image: "${software.imageid}" - workingDir: "${SKAHA_TLD}/home/${skaha.userid}" + workingDir: "${SKAHA_USER_HOME_DIR}" imagePullPolicy: {{ .Values.deployment.skaha.sessions.imagePullPolicy | required "deployment.skaha.sessions.imagePullPolicy must be set." }} resources: requests: diff --git a/helm/applications/skaha/skaha-config/launch-desktop.yaml b/helm/applications/skaha/skaha-config/launch-desktop.yaml index 1ba610e2..cb228723 100644 --- a/helm/applications/skaha/skaha-config/launch-desktop.yaml +++ b/helm/applications/skaha/skaha-config/launch-desktop.yaml @@ -40,7 +40,7 @@ spec: - ${skaha.hostname} env: - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: VNC_PW value: "${skaha.sessionid}" - name: skaha_hostname diff --git a/helm/applications/skaha/skaha-config/launch-firefly.yaml b/helm/applications/skaha/skaha-config/launch-firefly.yaml index 72b384b2..6b24cc79 100644 --- a/helm/applications/skaha/skaha-config/launch-firefly.yaml +++ b/helm/applications/skaha/skaha-config/launch-firefly.yaml @@ -42,11 +42,11 @@ spec: - name: skaha_sessionid value: "${skaha.sessionid}" - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: PWD - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: XDG_CACHE_HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: JULIA_NUM_THREADS value: "${software.requests.cores}" - name: OPENBLAS_NUM_THREADS diff --git a/helm/applications/skaha/skaha-config/launch-headless.yaml b/helm/applications/skaha/skaha-config/launch-headless.yaml index af5ee6ad..cb1713dc 100644 --- a/helm/applications/skaha/skaha-config/launch-headless.yaml +++ b/helm/applications/skaha/skaha-config/launch-headless.yaml @@ -44,9 +44,9 @@ spec: - name: skaha_sessionid value: "${skaha.sessionid}" - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: PWD - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: OMP_NUM_THREADS value: "${software.requests.cores}" securityContext: @@ -55,7 +55,7 @@ spec: capabilities: drop: - ALL - workingDir: "${SKAHA_TLD}/home/${skaha.userid}" + workingDir: "${SKAHA_USER_HOME_DIR}" imagePullPolicy: {{ .Values.deployment.skaha.sessions.imagePullPolicy | required "deployment.skaha.sessions.imagePullPolicy must be set." }} resources: requests: diff --git a/helm/applications/skaha/skaha-config/launch-notebook.yaml b/helm/applications/skaha/skaha-config/launch-notebook.yaml index 2606a49c..bfad5656 100644 --- a/helm/applications/skaha/skaha-config/launch-notebook.yaml +++ b/helm/applications/skaha/skaha-config/launch-notebook.yaml @@ -44,27 +44,27 @@ spec: - name: JUPYTER_TOKEN value: "${skaha.sessionid}" - name: JUPYTER_CONFIG_DIR - value: "${SKAHA_TLD}/home/${skaha.userid}/.jupyter/" + value: "${SKAHA_USER_HOME_DIR}/.jupyter/" - name: JUPYTER_DATA_DIR - value: "${SKAHA_TLD}/home/${skaha.userid}/.local/share/jupyter/" + value: "${SKAHA_USER_HOME_DIR}/.local/share/jupyter/" - name: JUPYTER_RUNTIME_DIR - value: "${SKAHA_TLD}/home/${skaha.userid}/.local/share/jupyter/runtime/" + value: "${SKAHA_USER_HOME_DIR}/.local/share/jupyter/runtime/" - name: JUPYTER_PATH - value: "${SKAHA_TLD}/home/${skaha.userid}/.jupyter/" + value: "${SKAHA_USER_HOME_DIR}/.jupyter/" - name: JUPYTERLAB_WORKSPACES_DIR - value: "${SKAHA_TLD}/home/${skaha.userid}/.jupyter/lab/workspaces/" + value: "${SKAHA_USER_HOME_DIR}/.jupyter/lab/workspaces/" - name: JUPYTERLAB_SETTINGS_DIR - value: "${SKAHA_TLD}/home/${skaha.userid}/.jupyter/lab/user-settings/" + value: "${SKAHA_USER_HOME_DIR}/.jupyter/lab/user-settings/" - name: NB_USER value: "${skaha.userid}" - name: NB_UID value: "${skaha.posixid}" - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: PWD - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: XDG_CACHE_HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "${SKAHA_USER_HOME_DIR}" - name: JULIA_NUM_THREADS value: "${software.requests.cores}" - name: OPENBLAS_NUM_THREADS diff --git a/helm/applications/skaha/templates/_helpers.tpl b/helm/applications/skaha/templates/_helpers.tpl index 4f897de2..a2a6b26e 100644 --- a/helm/applications/skaha/templates/_helpers.tpl +++ b/helm/applications/skaha/templates/_helpers.tpl @@ -48,12 +48,14 @@ Obtain a comma-delimited string of Experimental Features and a flag to set if an {{- define "skaha.experimentalFeatureGates" -}} {{- $features := "" -}} {{- $featureEnabled := false -}} -{{- with .Values.experimentalFeatures }} -{{- if .enabled }} -{{- range $feature, $map := . }} -{{- if eq $feature "enabled" -}} -{{- if ne $feature "" }} +{{- with .Values.experimentalFeatures -}} + +{{- if .enabled -}} +{{- range $feature, $map := . -}} + +{{/* Skip the 'enabled' key itself */}} +{{- if and (ne $feature "enabled") (ne $feature "") -}} {{- $thisMap := $map | default dict }} {{- if or (not (hasKey $thisMap "enabled")) (not (kindIs "bool" $thisMap.enabled)) -}} @@ -64,16 +66,23 @@ Obtain a comma-delimited string of Experimental Features and a flag to set if an {{- $features = printf "%s=%t" $feature $thisMap.enabled -}} {{- else -}} {{- $features = printf "%s,%s=%t" $features $feature $thisMap.enabled -}} -{{- end }} -{{- end }} +{{- end -}} + +{{- end -}} +{{/* End check for enabled key to skip */}} + +{{- end -}} +{{/* End range */}} -{{- end }} -{{- end }} -{{- end }} {{- printf "%s" $features -}} -{{- end }} -{{- end }} -*/}} + +{{- end -}} +{{/* End global if enabled */}} + +{{- end -}} +{{/* End with */}} + +{{- end -}} {{/* Selector labels @@ -99,6 +108,33 @@ Create the name of the service account to use USER SESSION TEMPLATE DEFINITIONS */}} +{{/* +The Home VOSpace Node URI (uses vos:// scheme) for the User Home directory in Cavern. +*/}} +{{- define "skaha.job.userStorage.homeURI" -}} +{{- $nodeURIPrefix := trimAll "/" (required ".Values.deployment.skaha.sessions.userStorage.nodeURIPrefix nodeURIPrefix is required." .Values.deployment.skaha.sessions.userStorage.nodeURIPrefix) -}} +{{- $homeDirectoryName := trimAll "/" (required ".Values.deployment.skaha.sessions.userStorage.homeDirectory home folder name is required." .Values.deployment.skaha.sessions.userStorage.homeDirectory) -}} +{{- printf "%s/%s" $nodeURIPrefix $homeDirectoryName -}} +{{- end -}} + +{{/* +The Home Directory base absolute path. +*/}} +{{- define "skaha.job.userStorage.homeBaseDirectory" -}} +{{- $topLevelDirectory := trimAll "/" (required ".Values.deployment.skaha.sessions.userStorage.topLevelDirectory topLevelDirectory is required." .Values.deployment.skaha.sessions.userStorage.topLevelDirectory) -}} +{{- $homeDirectoryName := trimAll "/" (required ".Values.deployment.skaha.sessions.userStorage.homeDirectory home folder name is required." .Values.deployment.skaha.sessions.userStorage.homeDirectory) -}} +{{- printf "/%s/%s" $topLevelDirectory $homeDirectoryName -}} +{{- end -}} + +{{/* +The Projects Directory base absolute path. +*/}} +{{- define "skaha.job.userStorage.projectsBaseDirectory" -}} +{{- $topLevelDirectory := trimAll "/" (required ".Values.deployment.skaha.sessions.userStorage.topLevelDirectory topLevelDirectory is required." .Values.deployment.skaha.sessions.userStorage.topLevelDirectory) -}} +{{- $projectsDirectoryName := trimAll "/" (required ".Values.deployment.skaha.sessions.userStorage.projectsDirectory projects folder name is required." .Values.deployment.skaha.sessions.userStorage.projectsDirectory) -}} +{{- printf "/%s/%s" $topLevelDirectory $projectsDirectoryName -}} +{{- end -}} + {{/* The init containers for the launch scripts. */}} @@ -118,11 +154,11 @@ The init containers for the launch scripts. drop: - ALL - name: init-users-groups - image: {{ $.Values.deployment.skaha.sessions.initContainerImage | default "redis:8.2.2-bookworm" }} + image: {{ .Values.deployment.skaha.sessions.initContainerImage | default "redis:8.2.2-bookworm" }} command: ["/init-users-groups/init-users-groups.sh"] env: - name: HOME - value: "${SKAHA_TLD}/home/${skaha.userid}" + value: "{{ template "skaha.job.userStorage.homeBaseDirectory" . }}/${skaha.userid}" - name: REDIS_URL value: "redis://{{ .Release.Name }}-redis-master.{{ .Release.Namespace }}.svc.{{ .Values.kubernetesClusterDomain }}:6379" volumeMounts: diff --git a/helm/applications/skaha/templates/add-user-config-configmap.yaml b/helm/applications/skaha/templates/add-user-config-configmap.yaml index 8a162e72..86611b8a 100644 --- a/helm/applications/skaha/templates/add-user-config-configmap.yaml +++ b/helm/applications/skaha/templates/add-user-config-configmap.yaml @@ -4,7 +4,5 @@ metadata: name: {{ .Release.Name }}-add-user-config namespace: {{ .Release.Namespace }} binaryData: - casa-config.tar: - {{ .Files.Get "add-user-config/casa/casa-config.tar" | b64enc | nindent 4 }} -data: - {{- (.Files.Glob "add-user-config/*").AsConfig | nindent 2 }} + desktop-config.tar: + {{ .Files.Get "add-user-config/desktop-config.tar" | b64enc | nindent 4 }} diff --git a/helm/applications/skaha/templates/session-volumes-mounts.yaml b/helm/applications/skaha/templates/session-volumes-mounts.yaml index 53ae2654..2ced651a 100644 --- a/helm/applications/skaha/templates/session-volumes-mounts.yaml +++ b/helm/applications/skaha/templates/session-volumes-mounts.yaml @@ -14,7 +14,7 @@ {{- end }} {{- end }} {{- end }} - - mountPath: "${SKAHA_TLD}" + - mountPath: "${SKAHA_TOP_LEVEL_DIR}" name: cavern-volume subPath: "cavern" - mountPath: "/scratch" diff --git a/helm/applications/skaha/templates/session-volumes.yaml b/helm/applications/skaha/templates/session-volumes.yaml index de3cd978..d696ffe6 100644 --- a/helm/applications/skaha/templates/session-volumes.yaml +++ b/helm/applications/skaha/templates/session-volumes.yaml @@ -32,7 +32,7 @@ TODO: jenkinsd 2024.09.20 {{- end }} - name: cavern-volume persistentVolumeClaim: - claimName: {{ .Values.deployment.skaha.sessions.persistentVolumeClaimName | default "skaha-workload-cavern-pvc" }} + claimName: {{ .Values.deployment.skaha.sessions.userStorage.persistentVolumeClaimName | default "skaha-workload-cavern-pvc" }} - name: scratch-dir emptyDir: {} {{- end }} diff --git a/helm/applications/skaha/templates/skaha-tomcat-deployment.yaml b/helm/applications/skaha/templates/skaha-tomcat-deployment.yaml index 72194ad0..a185c029 100644 --- a/helm/applications/skaha/templates/skaha-tomcat-deployment.yaml +++ b/helm/applications/skaha/templates/skaha-tomcat-deployment.yaml @@ -21,31 +21,49 @@ spec: nodeAffinity: {{ . | toYaml | indent 10 }} {{- end }} + {{- with .Values.securityContext }} securityContext: - seccompProfile: - type: RuntimeDefault - initContainers: - - name: init-skaha-service - image: {{ .Values.deployment.skaha.init.image | default "busybox:1.37.0" }} - imagePullPolicy: {{ .Values.deployment.skaha.init.imagePullPolicy | default "IfNotPresent" }} - command: ['sh', '-c', 'mkdir -p ${SKAHA_TLD}/home && mkdir -p ${SKAHA_TLD}/projects'] # Expected to have /arc mounted - volumeMounts: - - mountPath: "{{ .Values.deployment.skaha.skahaTld }}" - name: cavern-volume - subPath: cavern - env: - - name: SKAHA_TLD - value: "{{ .Values.deployment.skaha.skahaTld }}" - securityContext: - allowPrivilegeEscalation: false + {{- toYaml . | nindent 8 }} + {{- end }} containers: - env: + {{ $userStorage := required "Missing .Values.deployment.skaha.sessions.userStorage configuration" .Values.deployment.skaha.sessions.userStorage }} + {{- with $userStorage }} + {{ $userStorageAdmin := required "Missing .Values.deployment.skaha.sessions.userStorage.admin configuration" .admin }} + {{- with $userStorageAdmin }} + {{ $userStorageAdminAuth := required "Missing .Values.deployment.skaha.sessions.userStorage.admin.auth configuration" .auth }} + {{- with $userStorageAdminAuth }} + {{- if .certificateSecret }} + {{- with .certificateSecret -}} + - name: SKAHA_USER_STORAGE_ADMIN_CERTIFICATE + valueFrom: + secretKeyRef: + name: {{ .name | required "Missing .Values.deployment.skaha.sessions.userStorage.admin.auth.certificateSecret.name" }} + key: {{ .key | default "cadcproxy.pem" }} + {{- end }} + {{- else if .apiKey }} + - name: SKAHA_USER_STORAGE_ADMIN_API_KEY + value: "{{ .apiKey | required "Missing .Values.deployment.skaha.sessions.userStorage.admin.auth.apiKey" }}" + {{- else }} + {{- fail "Neither .Values.deployment.skaha.sessions.userStorage.admin.auth.apiKey nor .Values.deployment.skaha.sessions.userStorage.admin.auth.certificateSecret specified." }} + {{- end }} # End if - certificateSecret or apiKey + {{- end }} # End with - userStorageAdmin.auth + {{- end }} # End with - userStorageAdmin + - name: SKAHA_USER_STORAGE_SERVICE_URI + value: "{{ required "Missing .Values.deployment.skaha.sessions.userStorage.serviceURI" .serviceURI }}" + - name: SKAHA_USER_STORAGE_USER_HOME_URI + value: "{{ template "skaha.job.userStorage.homeURI" $ }}" + - name: SKAHA_USER_STORAGE_TOP_LEVEL_DIRECTORY + value: "{{ required ".Values.deployment.skaha.sessions.userStorage.topLevelDirectory topLevelDirectory is required." .topLevelDirectory }}" + - name: SKAHA_USER_STORAGE_HOME_BASE_DIRECTORY + value: "{{ template "skaha.job.userStorage.homeBaseDirectory" $ }}" + - name: SKAHA_USER_STORAGE_PROJECTS_BASE_DIRECTORY + value: "{{ template "skaha.job.userStorage.projectsBaseDirectory" $ }}" + {{- end }} # End with - userStorage - name: SKAHA_SESSIONS_HOSTNAME value: "{{ .Values.deployment.skaha.sessions.hostname | default .Values.deployment.hostname }}" - name: SKAHA_HOSTNAME value: "{{ .Values.deployment.hostname }}" - - name: SKAHA_TLD - value: "{{ .Values.deployment.skaha.skahaTld }}" - name: GPU_ENABLED value: "{{ .Values.deployment.skaha.sessions.gpuEnabled | default "false" }}" - name: skaha.homedir @@ -113,21 +131,18 @@ spec: {{- with .Values.deployment.skaha.extraPorts }} {{- toYaml . | nindent 8 }} {{- end }} + {{- with .Values.podSecurityContext }} + securityContext: + {{- toYaml . | nindent 10 }} + {{- end }} volumeMounts: - mountPath: "/config" name: config-volume - mountPath: "/add-user-config" name: add-user-config - - mountPath: "{{ .Values.deployment.skaha.skahaTld }}" - name: cavern-volume - # This subpath needs to match the subpath in Cavern's deployment. If that one is configurable, so must this one be! - subPath: cavern {{- with .Values.deployment.skaha.extraVolumeMounts }} {{- toYaml . | nindent 8 }} {{- end }} - securityContext: - runAsUser: 0 - allowPrivilegeEscalation: false {{- with .Values.deployment.extraHosts }} hostAliases: {{- range $extraHost := . }} diff --git a/helm/applications/skaha/values.yaml b/helm/applications/skaha/values.yaml index 868d8133..a9129831 100644 --- a/helm/applications/skaha/values.yaml +++ b/helm/applications/skaha/values.yaml @@ -11,6 +11,25 @@ replicaCount: 1 skahaWorkload: namespace: skaha-workload +# @param securityContext - Optional security context for the container. This is a security feature to restrict system calls. +# securityContext: {} +# +# Example: +# securityContext: +# seccompProfile: +# type: RuntimeDefault +securityContext: {} + +# @param podSecurityContext - Optional pod security context for the deployment. +# podSecurityContext: {} +# +# Example: +# podSecurityContext: +# fsGroup: 1000 +# runAsUser: 1000 +# allowPrivilegeEscalation: false +podSecurityContext: {} + # Skaha web service deployment deployment: hostname: myhost.example.com # Change this! @@ -22,9 +41,6 @@ deployment: imageCache: refreshSchedule: "*/30 * * * *" - # Set the top-level-directory name that gets mounted at the root. - # skahaTld: "/cavern" - # Used when allocating first-time users into the system. defaultQuotaGB: "10" @@ -88,7 +104,62 @@ deployment: minEphemeralStorage: "20Gi" # The initial requested amount of ephemeral (local) storage. Does NOT apply to Desktop sessions. maxEphemeralStorage: "200Gi" # The maximum amount of ephemeral (local) storage to allow a Session to extend to. Does NOT apply to Desktop sessions. - persistentVolumeClaimName: "skaha-workload-cavern-pvc" # The PVC that is mounted into User Sessions at /home and /projects. + # Storage setings to be passed into the User Session Kubernetes Job spec. + userStorage: + # Required. ABSOLUTE path mount point to where the top level directory is mounted in the User Sessions. For most, this can be set to "/cavern", and + # it is expected that the "/home" and the "/projects" folders will be found under this path (i.e. "/cavern/home" and "/cavern/projects"). + # Example: + # topLevelDirectory: "/cavern" + # + topLevelDirectory: "/cavern" + + # Required. RELATIVE path to the User Storage Home folder. This is the folder where the User's home directories will be created. Defaults to "home". + # Example: + # homeDirectory: "home" + # + homeDirectory: "home" + + # Required. RELATIVE path to the User Storage Projects folder. This is the folder where the Users can share data. This is used for CARTA sessions. Defaults to "projects". + # Example: + # projectsDirectory: "projects" + # + projectsDirectory: "projects" + + # Optional. Name of the Persistent Volume Claim to use for User Storage when mounted into sessions. Defaults to "skaha-workload-cavern-pvc". + # Example: + # persistentVolumeClaimName: "skaha-workload-cavern-pvc" + # persistentVolumeClaimName: + + # Required. The VOSpace Service URI (uses ivo:// scheme) for the Cavern Service. + # This is the VOSpace location where user home directories will be created, as well as any other user data. Requires Cavern to be running. + # Example: + # serviceURI: "ivo://example.org/cavern" + # serviceURI: + + # Required. The VOSpace Resource ID (Node URI) prefix (uses vos:// scheme) for the Cavern Service. + # Example: + # nodeURIPrefix: "vos://skao.int~cavern" + # nodeURIPrefix: + + # Required. These are the credentials and details to connect to the Cavern service to provide Administrative access to User Storage, namely creating new allocations. + admin: + auth: + # Authenticate with an agreed API Key between Skaha and Cavern. This is used to create new user home directories (allocations). + # Generate Key: + # $ openssl rand -base64 32 + # $ jMTZdM/qqZ0knXUXbiX8T4T0CyGnhqWdJS2tVLZta2I= + # Example: + # apiKey: "jMTZdM/qqZ0knXUXbiX8T4T0CyGnhqWdJS2tVLZta2I=" # Ensure this value is also used in the Cavern deployment's apiKeys object as "skaha:jMTZdM/qqZ0knXUXbiX8T4T0CyGnhqWdJS2tVLZta2I=". + # apiKey: + + # Alternatively, you can specify a Kubernetes Secret that contains a PEM Client Certificate representing the User Storage Admin. + # If both this and the OIDC Client are specified, Helm will throw an error. + # Default key is "cadcproxy.pem", but you can override it. + # Example: + # certificateSecret: + # name: "science-platform-user-storage-admin-certificate" + # key: "certificate.pem" # The key in the Secret that contains the PEM certificate + # certificateSecret: # The image pull policy for User Sessions (applies to ALL types). This is the default, but can be overridden. Deafults to Always. # @see https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy