Started by GitHub push by severinsimmler
Building remotely on build3 (digibib) in workspace /mnt/data/jenkins/workspace/DARIAH-Topics
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://github.com/DARIAH-DE/Topics # timeout=10
Fetching upstream changes from https://github.com/DARIAH-DE/Topics
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --tags --progress https://github.com/DARIAH-DE/Topics +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/testing^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/testing^{commit} # timeout=10
Checking out Revision 279879bfb3c551004754e1e2f18e806a99963037 (refs/remotes/origin/testing)
Commit message: "Update mallet.py"
> git config core.sparsecheckout # timeout=10
> git checkout -f 279879bfb3c551004754e1e2f18e806a99963037
> git rev-list 2bf3bed2c2dc32f917a8d79332173ea520d3b8b1 # timeout=10
[DARIAH-Topics] $ /usr/bin/python3 /mnt/data/jenkins/shiningpanda/jobs/62c67c92/virtualenv.py /mnt/data/jenkins/shiningpanda/jobs/62c67c92/virtualenvs/d41d8cd9
Using base prefix '/usr'
New python executable in /mnt/data/jenkins/shiningpanda/jobs/62c67c92/virtualenvs/d41d8cd9/bin/python3
Also creating executable in /mnt/data/jenkins/shiningpanda/jobs/62c67c92/virtualenvs/d41d8cd9/bin/python
Installing setuptools, pip, wheel...done.
[DARIAH-Topics] $ /bin/sh -xe /tmp/shiningpanda3627059667267285093.sh
+ pip install -U pip
Requirement already up-to-date: pip in /mnt/data/jenkins/shiningpanda/jobs/62c67c92/virtualenvs/d41d8cd9/lib/python3.5/site-packages
+ pip install -U -r requirements-dev.txt
Obtaining file:///mnt/data/jenkins/workspace/DARIAH-Topics (from -r requirements.txt (line 1))
dariah-topics 0.3.0.dev1 does not provide the extra 'evaluation'
Collecting nose (from -r requirements-dev.txt (line 2))
Using cached nose-1.3.7-py3-none-any.whl
Collecting nosexcover (from -r requirements-dev.txt (line 3))
Using cached nosexcover-1.0.11-py2.py3-none-any.whl
Collecting jupyter (from -r requirements-dev.txt (line 4))
Using cached jupyter-1.0.0-py2.py3-none-any.whl
Collecting pandas>=0.19.2 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached pandas-0.20.3-cp35-cp35m-manylinux1_x86_64.whl
Collecting regex>=2017.01.14 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting gensim>=0.13.2 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting lda>=1.0.5 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached lda-1.0.5-cp35-cp35m-manylinux1_x86_64.whl
Collecting numpy>=1.3 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached numpy-1.13.1-cp35-cp35m-manylinux1_x86_64.whl
Collecting scipy>=0.7 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached scipy-0.19.1-cp35-cp35m-manylinux1_x86_64.whl
Collecting lxml>=3.6.4 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Downloading lxml-4.0.0-cp35-cp35m-manylinux1_x86_64.whl (5.3MB)
Collecting flask>=0.11.1 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached Flask-0.12.2-py2.py3-none-any.whl
Collecting matplotlib>=1.5.3 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached matplotlib-2.0.2-cp35-cp35m-manylinux1_x86_64.whl
Collecting bokeh>=0.12.6 (from dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting coverage>=3.4 (from nosexcover->-r requirements-dev.txt (line 3))
Using cached coverage-4.4.1-cp35-cp35m-manylinux1_x86_64.whl
Collecting jupyter-console (from jupyter->-r requirements-dev.txt (line 4))
Using cached jupyter_console-5.2.0-py2.py3-none-any.whl
Collecting ipywidgets (from jupyter->-r requirements-dev.txt (line 4))
Using cached ipywidgets-7.0.1-py2.py3-none-any.whl
Collecting qtconsole (from jupyter->-r requirements-dev.txt (line 4))
Using cached qtconsole-4.3.1-py2.py3-none-any.whl
Collecting ipykernel (from jupyter->-r requirements-dev.txt (line 4))
Using cached ipykernel-4.6.1-py3-none-any.whl
Collecting nbconvert (from jupyter->-r requirements-dev.txt (line 4))
Using cached nbconvert-5.3.1-py2.py3-none-any.whl
Collecting notebook (from jupyter->-r requirements-dev.txt (line 4))
Using cached notebook-5.1.0-py2.py3-none-any.whl
Collecting python-dateutil>=2 (from pandas>=0.19.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached python_dateutil-2.6.1-py2.py3-none-any.whl
Collecting pytz>=2011k (from pandas>=0.19.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached pytz-2017.2-py2.py3-none-any.whl
Collecting six>=1.5.0 (from gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Downloading six-1.11.0-py2.py3-none-any.whl
Collecting smart-open>=1.2.1 (from gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting pbr>=0.6 (from lda>=1.0.5->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached pbr-3.1.1-py2.py3-none-any.whl
Collecting Werkzeug>=0.7 (from flask>=0.11.1->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached Werkzeug-0.12.2-py2.py3-none-any.whl
Collecting itsdangerous>=0.21 (from flask>=0.11.1->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting Jinja2>=2.4 (from flask>=0.11.1->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached Jinja2-2.9.6-py2.py3-none-any.whl
Collecting click>=2.0 (from flask>=0.11.1->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached click-6.7-py2.py3-none-any.whl
Collecting cycler>=0.10 (from matplotlib>=1.5.3->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached cycler-0.10.0-py2.py3-none-any.whl
Collecting pyparsing!=2.0.0,!=2.0.4,!=2.1.2,!=2.1.6,>=1.5.6 (from matplotlib>=1.5.3->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached pyparsing-2.2.0-py2.py3-none-any.whl
Collecting PyYAML>=3.10 (from bokeh>=0.12.6->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting tornado>=4.3 (from bokeh>=0.12.6->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting pygments (from jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached Pygments-2.2.0-py2.py3-none-any.whl
Collecting ipython (from jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached ipython-6.2.0-py3-none-any.whl
Collecting prompt-toolkit<2.0.0,>=1.0.0 (from jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached prompt_toolkit-1.0.15-py3-none-any.whl
Collecting jupyter-client (from jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached jupyter_client-5.1.0-py2.py3-none-any.whl
Collecting traitlets>=4.3.1 (from ipywidgets->jupyter->-r requirements-dev.txt (line 4))
Using cached traitlets-4.3.2-py2.py3-none-any.whl
Collecting widgetsnbextension~=3.0.0 (from ipywidgets->jupyter->-r requirements-dev.txt (line 4))
Using cached widgetsnbextension-3.0.3-py2.py3-none-any.whl
Collecting nbformat>=4.2.0 (from ipywidgets->jupyter->-r requirements-dev.txt (line 4))
Using cached nbformat-4.4.0-py2.py3-none-any.whl
Collecting ipython-genutils (from qtconsole->jupyter->-r requirements-dev.txt (line 4))
Using cached ipython_genutils-0.2.0-py2.py3-none-any.whl
Collecting jupyter-core (from qtconsole->jupyter->-r requirements-dev.txt (line 4))
Using cached jupyter_core-4.3.0-py2.py3-none-any.whl
Collecting entrypoints>=0.2.2 (from nbconvert->jupyter->-r requirements-dev.txt (line 4))
Using cached entrypoints-0.2.3-py2.py3-none-any.whl
Collecting testpath (from nbconvert->jupyter->-r requirements-dev.txt (line 4))
Using cached testpath-0.3.1-py2.py3-none-any.whl
Collecting mistune>=0.7.4 (from nbconvert->jupyter->-r requirements-dev.txt (line 4))
Using cached mistune-0.7.4-py2.py3-none-any.whl
Collecting bleach (from nbconvert->jupyter->-r requirements-dev.txt (line 4))
Using cached bleach-2.0.0-py2.py3-none-any.whl
Collecting pandocfilters>=1.4.1 (from nbconvert->jupyter->-r requirements-dev.txt (line 4))
Collecting terminado>=0.3.3; sys_platform != "win32" (from notebook->jupyter->-r requirements-dev.txt (line 4))
Collecting requests (from smart-open>=1.2.1->gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting bz2file (from smart-open>=1.2.1->gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting boto>=2.32 (from smart-open>=1.2.1->gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached boto-2.48.0-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->flask>=0.11.1->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Collecting pickleshare (from ipython->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached pickleshare-0.7.4-py2.py3-none-any.whl
Collecting pexpect; sys_platform != "win32" (from ipython->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached pexpect-4.2.1-py2.py3-none-any.whl
Collecting simplegeneric>0.8 (from ipython->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Collecting jedi>=0.10 (from ipython->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached jedi-0.10.2-py2.py3-none-any.whl
Requirement already up-to-date: setuptools>=18.5 in /mnt/data/jenkins/shiningpanda/jobs/62c67c92/virtualenvs/d41d8cd9/lib/python3.5/site-packages (from ipython->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Collecting decorator (from ipython->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached decorator-4.1.2-py2.py3-none-any.whl
Collecting wcwidth (from prompt-toolkit<2.0.0,>=1.0.0->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached wcwidth-0.1.7-py2.py3-none-any.whl
Collecting pyzmq>=13 (from jupyter-client->jupyter-console->jupyter->-r requirements-dev.txt (line 4))
Using cached pyzmq-16.0.2-cp35-cp35m-manylinux1_x86_64.whl
Collecting jsonschema!=2.5.0,>=2.4 (from nbformat>=4.2.0->ipywidgets->jupyter->-r requirements-dev.txt (line 4))
Using cached jsonschema-2.6.0-py2.py3-none-any.whl
Collecting html5lib>=0.99999999 (from bleach->nbconvert->jupyter->-r requirements-dev.txt (line 4))
Using cached html5lib-0.999999999-py2.py3-none-any.whl
Collecting ptyprocess (from terminado>=0.3.3; sys_platform != "win32"->notebook->jupyter->-r requirements-dev.txt (line 4))
Using cached ptyprocess-0.5.2-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests->smart-open>=1.2.1->gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests->smart-open>=1.2.1->gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests->smart-open>=1.2.1->gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached idna-2.6-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests->smart-open>=1.2.1->gensim>=0.13.2->dariah-topics==0.3.0.dev1->-r requirements.txt (line 1))
Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Collecting webencodings (from html5lib>=0.99999999->bleach->nbconvert->jupyter->-r requirements-dev.txt (line 4))
Using cached webencodings-0.5.1-py2.py3-none-any.whl
Installing collected packages: nose, coverage, nosexcover, pygments, pickleshare, ptyprocess, pexpect, simplegeneric, jedi, ipython-genutils, decorator, six, traitlets, wcwidth, prompt-toolkit, ipython, jupyter-core, python-dateutil, pyzmq, jupyter-client, tornado, ipykernel, jupyter-console, MarkupSafe, Jinja2, jsonschema, nbformat, entrypoints, testpath, mistune, webencodings, html5lib, bleach, pandocfilters, nbconvert, terminado, notebook, widgetsnbextension, ipywidgets, qtconsole, jupyter, numpy, pytz, pandas, regex, scipy, urllib3, chardet, idna, certifi, requests, bz2file, boto, smart-open, gensim, pbr, lda, lxml, Werkzeug, itsdangerous, click, flask, cycler, pyparsing, matplotlib, PyYAML, bokeh, dariah-topics
Running setup.py develop for dariah-topics
Successfully installed Jinja2-2.9.6 MarkupSafe-1.0 PyYAML-3.12 Werkzeug-0.12.2 bleach-2.0.0 bokeh-0.12.9 boto-2.48.0 bz2file-0.98 certifi-2017.7.27.1 chardet-3.0.4 click-6.7 coverage-4.4.1 cycler-0.10.0 dariah-topics decorator-4.1.2 entrypoints-0.2.3 flask-0.12.2 gensim-2.3.0 html5lib-0.999999999 idna-2.6 ipykernel-4.6.1 ipython-6.2.0 ipython-genutils-0.2.0 ipywidgets-7.0.1 itsdangerous-0.24 jedi-0.10.2 jsonschema-2.6.0 jupyter-1.0.0 jupyter-client-5.1.0 jupyter-console-5.2.0 jupyter-core-4.3.0 lda-1.0.5 lxml-4.0.0 matplotlib-2.0.2 mistune-0.7.4 nbconvert-5.3.1 nbformat-4.4.0 nose-1.3.7 nosexcover-1.0.11 notebook-5.1.0 numpy-1.13.1 pandas-0.20.3 pandocfilters-1.4.2 pbr-3.1.1 pexpect-4.2.1 pickleshare-0.7.4 prompt-toolkit-1.0.15 ptyprocess-0.5.2 pygments-2.2.0 pyparsing-2.2.0 python-dateutil-2.6.1 pytz-2017.2 pyzmq-16.0.2 qtconsole-4.3.1 regex-2017.7.28 requests-2.18.4 scipy-0.19.1 simplegeneric-0.8.1 six-1.11.0 smart-open-1.5.3 terminado-0.6 testpath-0.3.1 tornado-4.5.2 traitlets-4.3.2 urllib3-1.22 wcwidth-0.1.7 webencodings-0.5.1 widgetsnbextension-3.0.3
+ ./setup.py sdist bdist_wheel
running sdist
running egg_info
writing top-level names to dariah_topics.egg-info/top_level.txt
writing dependency_links to dariah_topics.egg-info/dependency_links.txt
writing requirements to dariah_topics.egg-info/requires.txt
writing dariah_topics.egg-info/PKG-INFO
reading manifest file 'dariah_topics.egg-info/SOURCES.txt'
writing manifest file 'dariah_topics.egg-info/SOURCES.txt'
running check
/mnt/data/jenkins/shiningpanda/jobs/62c67c92/virtualenvs/d41d8cd9/lib/python3.5/site-packages/setuptools/dist.py:351: UserWarning: Normalizing '0.3.0dev1' to '0.3.0.dev1'
normalized_version,
warning: check: missing required meta-data: url
creating dariah_topics-0.3.0.dev1
creating dariah_topics-0.3.0.dev1/dariah_topics
creating dariah_topics-0.3.0.dev1/dariah_topics.egg-info
creating dariah_topics-0.3.0.dev1/test
copying files to dariah_topics-0.3.0.dev1...
copying README.md -> dariah_topics-0.3.0.dev1
copying setup.cfg -> dariah_topics-0.3.0.dev1
copying setup.py -> dariah_topics-0.3.0.dev1
copying dariah_topics/__init__.py -> dariah_topics-0.3.0.dev1/dariah_topics
copying dariah_topics/doclist.py -> dariah_topics-0.3.0.dev1/dariah_topics
copying dariah_topics/evaluation.py -> dariah_topics-0.3.0.dev1/dariah_topics
copying dariah_topics/mallet.py -> dariah_topics-0.3.0.dev1/dariah_topics
copying dariah_topics/meta.py -> dariah_topics-0.3.0.dev1/dariah_topics
copying dariah_topics/preprocessing.py -> dariah_topics-0.3.0.dev1/dariah_topics
copying dariah_topics/visualization.py -> dariah_topics-0.3.0.dev1/dariah_topics
copying dariah_topics.egg-info/PKG-INFO -> dariah_topics-0.3.0.dev1/dariah_topics.egg-info
copying dariah_topics.egg-info/SOURCES.txt -> dariah_topics-0.3.0.dev1/dariah_topics.egg-info
copying dariah_topics.egg-info/dependency_links.txt -> dariah_topics-0.3.0.dev1/dariah_topics.egg-info
copying dariah_topics.egg-info/requires.txt -> dariah_topics-0.3.0.dev1/dariah_topics.egg-info
copying dariah_topics.egg-info/top_level.txt -> dariah_topics-0.3.0.dev1/dariah_topics.egg-info
copying test/test_fuzzy_segmenting.py -> dariah_topics-0.3.0.dev1/test
Writing dariah_topics-0.3.0.dev1/setup.cfg
Creating tar archive
removing 'dariah_topics-0.3.0.dev1' (and everything under it)
running bdist_wheel
running build
running build_py
copying dariah_topics/mallet.py -> build/lib/dariah_topics
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/preprocessing.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/visualization.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/testing.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/doclist.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/model_creation.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/meta.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/__init__.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/mallet.py -> build/bdist.linux-x86_64/wheel/dariah_topics
copying build/lib/dariah_topics/evaluation.py -> build/bdist.linux-x86_64/wheel/dariah_topics
running install_egg_info
Copying dariah_topics.egg-info to build/bdist.linux-x86_64/wheel/dariah_topics-0.3.0.dev1-py3.5.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/dariah_topics-0.3.0.dev1.dist-info/WHEEL
creating '/mnt/data/jenkins/workspace/DARIAH-Topics/dist/dariah_topics-0.3.0.dev1-py3-none-any.whl' and adding '.' to it
adding 'dariah_topics/__init__.py'
adding 'dariah_topics/doclist.py'
adding 'dariah_topics/evaluation.py'
adding 'dariah_topics/mallet.py'
adding 'dariah_topics/meta.py'
adding 'dariah_topics/model_creation.py'
adding 'dariah_topics/preprocessing.py'
adding 'dariah_topics/testing.py'
adding 'dariah_topics/visualization.py'
adding 'dariah_topics-0.3.0.dev1.dist-info/DESCRIPTION.rst'
adding 'dariah_topics-0.3.0.dev1.dist-info/metadata.json'
adding 'dariah_topics-0.3.0.dev1.dist-info/top_level.txt'
adding 'dariah_topics-0.3.0.dev1.dist-info/WHEEL'
adding 'dariah_topics-0.3.0.dev1.dist-info/METADATA'
adding 'dariah_topics-0.3.0.dev1.dist-info/RECORD'
+ nosetests --cover-html
.......................
Name Stmts Miss Cover
----------------------------------------------------
dariah_topics/__init__.py 0 0 100%
dariah_topics/doclist.py 93 6 94%
dariah_topics/preprocessing.py 223 17 92%
dariah_topics/visualization.py 176 93 47%
----------------------------------------------------
TOTAL 492 116 76%
----------------------------------------------------------------------
Ran 23 tests in 69.139s
OK
Recording test results
[Cobertura] Publishing Cobertura coverage report...
Publishing Cobertura coverage results...
Cobertura coverage report found.
[Set GitHub commit status (universal)] SUCCESS on repos [GHRepository@74396a66[description=A python library for topic modeling.,homepage=,name=Topics,license=<null>,fork=true,size=186401,milestones={},language=Jupyter Notebook,commits={},url=https://api.github.com/repos/DARIAH-DE/Topics,id=69341969]] (sha:279879b) with context:DARIAH-Topics
Setting commit status on GitHub for https://github.com/DARIAH-DE/Topics/commit/279879bfb3c551004754e1e2f18e806a99963037
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
Notifying upstream projects of job completion
[ci-game] evaluating rule: Build result
[ci-game] scored: 1.0
[ci-game] evaluating rule: Increased number of passed tests
[ci-game] evaluating rule: Decreased number of passed tests
[ci-game] evaluating rule: Increased number of failed tests
[ci-game] evaluating rule: Decreased number of failed tests
[ci-game] evaluating rule: Increased number of skipped tests
[ci-game] evaluating rule: Decreased number of skipped tests
[ci-game] evaluating rule: Open HIGH priority tasks
[ci-game] evaluating rule: Open NORMAL priority tasks
[ci-game] evaluating rule: Open LOW priority tasks
[ci-game] evaluating rule: Changed number of compiler warnings
Finished: SUCCESS