import numpy as np
from scipy.spatial.distance import pdist as sp_pdist
import numba
import math
@numba.jit(numba.float32[:](numba.int8[:, :]), nopython=True, parallel=True)
def pdist_cityblock_rowm_nb(x):
m = x.shape[0]
n = x.shape[1]
n_pairs = (n * (n - 1)) // 2
out = np.zeros(n_pairs, dtype=np.float32)
for i in numba.prange(m):
ix = 0
for j in range(n):
vj = float(x[i, j])
for k in range(j + 1, n):
vk = float(x[i, k])
d = math.fabs(vk - vj)
out[ix] += d
ix += 1
return out
@numba.jit(numba.int64(numba.int64, numba.int64, numba.int64), nopython=True)
def condensed_coords(i, j, n):
# normalise order
if i > j:
i, j = j, i
# calculate number of items in rows before this one (sum of arithmetic
# progression)
x = i * ((2 * n) - i - 1) // 2
# add on previous items in current row
ix = x + j - i - 1
return ix
@numba.jit(numba.float32[:](numba.int8[:, :]), nopython=True, parallel=True)
def pdist_cityblock_colm_nb(x):
m = x.shape[0]
n = x.shape[1]
n_pairs = (n * (n - 1)) // 2
out = np.zeros(n_pairs, dtype=np.float32)
for j in numba.prange(n):
for k in range(j + 1, n):
d = 0
for i in range(m):
vj = float(x[i, j])
vk = float(x[i, k])
d += math.fabs(vk - vj)
ix = condensed_coords(j, k, n)
out[ix] = d
return out
@numba.jit(numba.float64[:](numba.int8[:, :]), nopython=True, parallel=True)
def pdist_sqeuclid_colm_nb(x):
m = x.shape[0]
n = x.shape[1]
n_pairs = (n * (n - 1)) // 2
out = np.zeros(n_pairs, dtype=np.float64)
for j in numba.prange(n):
for k in range(j + 1, n):
d = 0
for i in range(m):
vj = float(x[i, j])
vk = float(x[i, k])
d += (vj - vk)**2
ix = condensed_coords(j, k, n)
out[ix] = d
return out
X = np.random.randint(0, 4, size=(2000, 2000), dtype='i1')
Xf = np.asfortranarray(X)
%%time
d_nb = pdist_cityblock_rowm_nb(X)
CPU times: user 16.5 s, sys: 4.71 ms, total: 16.5 s Wall time: 2.08 s
%%time
d_nb = pdist_cityblock_rowm_nb(Xf)
CPU times: user 26 s, sys: 16.1 ms, total: 26 s Wall time: 3.33 s
%%time
d_nb2 = pdist_cityblock_colm_nb(X)
CPU times: user 20.7 s, sys: 3.94 ms, total: 20.7 s Wall time: 4.05 s
%%time
d_nb2 = pdist_cityblock_colm_nb(Xf)
CPU times: user 6.75 s, sys: 3.95 ms, total: 6.75 s Wall time: 1.5 s
%%time
d_nb3 = pdist_sqeuclid_colm_nb(Xf)
CPU times: user 6.58 s, sys: 11.9 ms, total: 6.59 s Wall time: 1.45 s
d_nb
array([2465., 2462., 2409., ..., 2456., 2438., 2456.], dtype=float32)
d_nb2
array([2486., 2469., 2420., ..., 2456., 2438., 2456.], dtype=float32)
d_nb3
array([4940., 4895., 4790., ..., 4852., 4850., 4856.])
%%time
sp_pdist(X.T, metric='cityblock')
CPU times: user 2.63 s, sys: 24 ms, total: 2.66 s Wall time: 2.66 s
array([2486., 2469., 2420., ..., 2456., 2438., 2456.])
%%time
sp_pdist(Xf.T, metric='cityblock')
CPU times: user 2.63 s, sys: 24 ms, total: 2.66 s Wall time: 2.66 s
array([2486., 2469., 2420., ..., 2456., 2438., 2456.])
%%time
sp_pdist(X.T, metric='sqeuclidean')
CPU times: user 2.62 s, sys: 4.04 ms, total: 2.62 s Wall time: 2.63 s
array([4940., 4895., 4790., ..., 4852., 4850., 4856.])
%%time
sp_pdist(Xf.T, metric='sqeuclidean')
CPU times: user 2.61 s, sys: 12 ms, total: 2.63 s Wall time: 2.63 s
array([4940., 4895., 4790., ..., 4852., 4850., 4856.])
from numba import cuda
@cuda.jit(numba.void(numba.int8[:, :], numba.float32[:, :]))
def pdist_cityblock_cuda_v1(x, out):
m = x.shape[0]
n = x.shape[1]
assert out.shape[0] == n
assert out.shape[1] == n
i, j, k = cuda.grid(3)
if i < m and j < n and k < n and j < k:
vj = float(x[i, j])
vk = float(x[i, k])
d = math.fabs(vj - vk)
cuda.atomic.add(out, (j, k), d)
out = np.zeros((X.shape[1], X.shape[1]), dtype='f4')
threads = (1, 16, 16)
blocks = (
math.ceil(X.shape[0] / threads[0]),
math.ceil(X.shape[1] / threads[1]),
math.ceil(X.shape[1] / threads[2]),
)
%%time
pdist_cityblock_cuda_v1[blocks, threads](X, out)
CPU times: user 2.03 s, sys: 652 ms, total: 2.68 s Wall time: 2.68 s
out
array([[ 0., 2486., 2469., ..., 2493., 2511., 2477.], [ 0., 0., 2351., ..., 2515., 2583., 2541.], [ 0., 0., 0., ..., 2484., 2508., 2474.], ..., [ 0., 0., 0., ..., 0., 2456., 2438.], [ 0., 0., 0., ..., 0., 0., 2456.], [ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)
@cuda.jit(numba.void(numba.int8[:, :], numba.float32[:, :]))
def pdist_cityblock_cuda_v2(x, out):
m = x.shape[0]
n = x.shape[1]
assert out.shape[0] == n
assert out.shape[1] == n
j, k = cuda.grid(2)
if j < n and k < n and j < k:
d = 0
for i in range(m):
vj = float(x[i, j])
vk = float(x[i, k])
d += math.fabs(vj - vk)
out[j, k] = d
@cuda.jit(numba.void(numba.int8[:, :], numba.float32[:, :]))
def pdist_sqeuclid_cuda_v2(x, out):
m = x.shape[0]
n = x.shape[1]
assert out.shape[0] == n
assert out.shape[1] == n
j, k = cuda.grid(2)
if j < n and k < n and j < k:
d = 0
for i in range(m):
vj = float(x[i, j])
vk = float(x[i, k])
d += (vj - vk)**2
out[j, k] = d
out = np.zeros((X.shape[1], X.shape[1]), dtype='f4')
X_device = cuda.to_device(X)
out_device = cuda.to_device(out)
threads = (16, 16)
blocks = (
math.ceil(X.shape[1] / threads[0]),
math.ceil(X.shape[1] / threads[1]),
)
blocks
(125, 125)
%%time
pdist_cityblock_cuda_v2[blocks, threads](X_device, out_device)
cuda.synchronize()
CPU times: user 704 ms, sys: 224 ms, total: 928 ms Wall time: 927 ms
out_device.copy_to_host()
array([[ 0., 2486., 2469., ..., 2493., 2511., 2477.], [ 0., 0., 2351., ..., 2515., 2583., 2541.], [ 0., 0., 0., ..., 2484., 2508., 2474.], ..., [ 0., 0., 0., ..., 0., 2456., 2438.], [ 0., 0., 0., ..., 0., 0., 2456.], [ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)
out = np.zeros((X.shape[1], X.shape[1]), dtype='f4')
X_device = cuda.to_device(X)
out_device = cuda.to_device(out)
threads = (16, 16)
blocks = (
math.ceil(X.shape[1] / threads[0]),
math.ceil(X.shape[1] / threads[1]),
)
blocks
(125, 125)
%%time
pdist_sqeuclid_cuda_v2[blocks, threads](X_device, out_device)
cuda.synchronize()
CPU times: user 695 ms, sys: 248 ms, total: 943 ms Wall time: 942 ms
out_device.copy_to_host()
array([[ 0., 4940., 4895., ..., 5003., 5019., 4993.], [ 0., 0., 4551., ..., 4989., 5267., 5065.], [ 0., 0., 0., ..., 4928., 5028., 4888.], ..., [ 0., 0., 0., ..., 0., 4852., 4850.], [ 0., 0., 0., ..., 0., 0., 4856.], [ 0., 0., 0., ..., 0., 0., 0.]], dtype=float32)
!numba -s
System info: -------------------------------------------------------------------------------- __Time Stamp__ 2019-07-04 12:12:36.908520 __Hardware Information__ Machine : x86_64 CPU Name : skylake Number of accessible CPU cores : 8 Listed accessible CPUs cores : 0-7 CFS restrictions : None CPU Features : adx aes avx avx2 bmi bmi2 clflushopt cmov cx16 f16c fma fsgsbase lzcnt mmx movbe pclmul popcnt prfchw rdrnd rdseed rtm sgx sse sse2 sse3 sse4.1 sse4.2 ssse3 xsave xsavec xsaveopt xsaves __OS Information__ Platform : Linux-4.15.0-54-generic-x86_64-with-debian-buster-sid Release : 4.15.0-54-generic System Name : Linux Version : #58-Ubuntu SMP Mon Jun 24 10:55:24 UTC 2019 OS specific info : debianbuster/sid glibc info : glibc 2.9 __Python Information__ Python Compiler : GCC 7.3.0 Python Implementation : CPython Python Version : 3.6.7 Python Locale : en_GB UTF-8 __LLVM information__ LLVM version : 6.0.0 __CUDA Information__ Found 1 CUDA devices id 0 b'Quadro M1000M' [SUPPORTED] compute capability: 5.0 pci device id: 0 pci bus id: 1 Summary: 1/1 devices are supported CUDA driver version : 9010 CUDA libraries: Finding cublas named libcublas.so.9.0.176 trying to open library... ok Finding cusparse named libcusparse.so.9.0.176 trying to open library... ok Finding cufft named libcufft.so.9.0.176 trying to open library... ok Finding curand named libcurand.so.9.0.176 trying to open library... ok Finding nvvm named libnvvm.so.3.2.0 trying to open library... ok finding libdevice for compute_20... ok finding libdevice for compute_30... ok finding libdevice for compute_35... ok finding libdevice for compute_50... ok __ROC Information__ ROC available : False Error initialising ROC due to : No ROC toolchains found. No HSA Agents found, encountered exception when searching: Error at driver init: NUMBA_HSA_DRIVER /opt/rocm/lib/libhsa-runtime64.so is not a valid file path. Note it must be a filepath of the .so/.dll/.dylib or the driver: __SVML Information__ SVML state, config.USING_SVML : False SVML library found and loaded : False llvmlite using SVML patched LLVM : True SVML operational : False __Threading Layer Information__ TBB Threading layer available : False +--> Disabled due to : Unknown import problem. OpenMP Threading layer available : True Workqueue Threading layer available : True __Numba Environment Variable Information__ None set. __Conda Information__ conda_build_version : not installed conda_env_version : 4.6.14 platform : linux-64 python_version : 3.7.3.final.0 root_writable : True __Current Conda Env__ _libgcc_mutex 0.1 main adal 1.2.1 pypi_0 pypi aioeasywebdav 2.2.0 py36_0 conda-forge aiohttp 3.5.4 py36h7b6447c_0 alabaster 0.7.12 pypi_0 pypi alembic 1.0.9 py36_0 anhima 0.11.2 pypi_0 pypi appdirs 1.4.3 py36h28b3542_0 argh 0.26.2 pypi_0 pypi asciitree 0.3.3 py_2 asn1crypto 0.24.0 py36_0 asteval 0.9.13 pyh24bf2e0_0 conda-forge astroid 2.2.5 pypi_0 pypi async-timeout 3.0.1 py36_0 async_generator 1.10 py36h28b3542_0 atomicwrites 1.3.0 py36_1 attrs 19.1.0 py36_1 autopep8 1.4.4 pypi_0 pypi babel 2.6.0 pypi_0 pypi backcall 0.1.0 py36_0 bcftools 1.9 ha228f0b_3 bioconda bcolz 1.2.1 py36h04863e7_0 bcrypt 3.1.6 py36h7b6447c_0 biopython 1.73 py36h7b6447c_0 blas 1.1 openblas conda-forge bleach 3.1.0 py36_0 blinker 1.4 py36_0 blosc 1.15.0 hd408876_0 bokeh 1.0.4 py36_0 boto3 1.9.134 py_0 botocore 1.12.134 py_0 bqplot 0.11.2 py36_1000 conda-forge bzip2 1.0.6 h14c3975_5 ca-certificates 2019.6.16 hecc5488_0 conda-forge cachetools 2.1.0 py_0 conda-forge cairo 1.14.12 h8948797_3 cartopy 0.17.0 py36hbb7e04d_1 certifi 2019.6.16 py36_0 conda-forge cffi 1.12.3 py36h2e261b9_0 chardet 3.0.4 py36_1 click 7.0 py36_0 cloudpickle 0.8.1 py_0 configargparse 0.14.0 py36_0 configurable-http-proxy 1.3.0 0 conda-forge cryptography 2.6.1 py36h1ba5d50_0 cudatoolkit 9.0 h13b8566_0 curl 7.64.1 hbc83047_0 cycler 0.10.0 py36_0 cython 0.29.4 py36he6710b0_0 cytoolz 0.9.0.1 py36h14c3975_1 dask 2.0.0 py_0 conda-forge dask-core 2.0.0 py_0 conda-forge dask-glm 0.2.0 py36_0 dask-kubernetes 0.7.0 pypi_0 pypi dask-ml 0.11.0 py36_0 datrie 0.7.1 py36h7b6447c_1 dbus 1.13.6 h746ee38_0 decorator 4.4.0 py36_1 defusedxml 0.6.0 py_0 distributed 2.0.1 py_0 conda-forge docutils 0.14 py36_0 dropbox 9.3.0 py36_0 entrypoints 0.3 py36_0 et_xmlfile 1.0.1 py36_0 expat 2.2.6 he6710b0_0 fastcluster 1.1.25 py36h637b7d7_1000 conda-forge fasteners 0.14.1 py_3 fastparquet 0.2.1 py36hdd07704_1 filechunkio 1.6 py36_0 bioconda fontconfig 2.13.0 h9420a91_0 freetype 2.9.1 h8a8886c_1 fribidi 1.0.5 h7b6447c_0 ftputil 3.2 py36_0 bioconda fusepy 3.0.1 pypi_0 pypi future 0.17.1 pypi_0 pypi gcsfs 0.2.0 py_0 conda-forge geos 3.7.1 he6710b0_0 gitdb2 2.0.5 py36_0 gitpython 2.1.11 py36_0 glib 2.56.2 hd408876_0 gmp 6.1.2 h6c8ec71_1 google-api-core 1.10.0 py36_0 conda-forge google-auth 1.6.3 py_0 conda-forge google-auth-oauthlib 0.3.0 py_0 conda-forge google-cloud-core 0.29.1 py_0 conda-forge google-cloud-storage 1.15.0 py_0 conda-forge google-resumable-media 0.3.2 py_0 conda-forge googleapis-common-protos 1.5.9 py36_2 conda-forge graphite2 1.3.13 h23475e2_0 graphviz 2.40.1 h21bd128_2 gsl 2.4 blas_openblash5c7cb9b_1004 [blas_openblas] conda-forge gst-plugins-base 1.14.0 hbbd80ab_1 gstreamer 1.14.0 hb453b48_1 h5py 2.9.0 py36h7918eee_0 harfbuzz 1.8.8 hffaf4a1_0 hdf5 1.10.4 hb1b8bf9_0 heapdict 1.0.0 py36_2 hmmlearn 0.2.1 py36h3010b51_1000 conda-forge holoviews 1.10.9 py_0 pyviz/label/dev htslib 1.9 ha228f0b_7 bioconda humanize 0.5.1 py36_1 icu 58.2 h9c2bf20_1 idna 2.8 py36_0 idna_ssl 1.1.0 py36_0 imageio 2.5.0 py36_0 imagesize 1.1.0 pypi_0 pypi intake 0.4.4 py_0 intake-xarray 0.2.4 py_0 intake intervaltree 3.0.2 py_0 conda-forge ipykernel 5.1.0 py36h39e3cac_0 ipython 7.2.0 py36h39e3cac_0 ipython_genutils 0.2.0 py36_0 ipywidgets 7.4.2 py36_0 isort 4.3.20 pypi_0 pypi jdcal 1.4.1 py_0 jedi 0.13.2 pypi_0 pypi jinja2 2.10.1 py36_0 jmespath 0.9.4 py_0 joblib 0.13.1 py36_0 jpeg 9b h024ee3a_2 jsonschema 3.0.1 py36_0 jupyter 1.0.0 py36_7 jupyter_client 5.2.4 py36_0 jupyter_console 6.0.0 py36_0 jupyter_core 4.4.0 py36_0 jupyterhub 0.9.4 py36_0 jupyterlab 0.35.4 py36hf63ae98_0 jupyterlab_launcher 0.13.1 py36_0 jupyterlab_server 0.2.0 py36_0 jupytext 1.1.1 0 conda-forge kiwisolver 1.1.0 py36he6710b0_0 krb5 1.16.1 h173b8e3_7 kubernetes 8.0.1 pypi_0 pypi lazy-object-proxy 1.4.1 pypi_0 pypi libcurl 7.64.1 h20c2e04_0 libdeflate 1.0 h14c3975_1 bioconda libedit 3.1.20181209 hc058e9b_0 libffi 3.2.1 he1b5a44_1006 conda-forge libgcc 7.2.0 h69d50b8_2 libgcc-ng 9.1.0 hdf63c60_0 libgfortran-ng 7.3.0 hdf63c60_0 libopenblas 0.2.20 h9ac9557_7 libpng 1.6.37 hbc83047_0 libprotobuf 3.7.1 hd408876_0 libsodium 1.0.16 h1bed415_0 libssh2 1.8.2 h1ba5d50_0 libstdcxx-ng 8.2.0 hdf63c60_1 libtiff 4.0.10 h2733197_2 libuuid 1.0.3 h1bed415_2 libxcb 1.13 h1bed415_1 libxml2 2.9.9 he19cac6_0 libxslt 1.1.33 h7d1a2b0_0 livereload 2.6.1 pypi_0 pypi llvmlite 0.26.0 py36hd408876_0 lmfit 0.9.12 pyh24bf2e0_0 conda-forge locket 0.2.0 py36_1 lxml 4.3.3 py36hefd8a0e_0 lzo 2.10 h49e0be7_2 mako 1.0.9 py36_0 markupsafe 1.1.1 py36h7b6447c_0 matplotlib 3.0.2 py36h5429711_0 matplotlib-venn 0.11.5 py_1 conda-forge mccabe 0.6.1 pypi_0 pypi mistune 0.8.4 py36h7b6447c_0 mock 2.0.0 py36_0 monotonic 1.5 py_0 more-itertools 7.0.0 py36_0 msgpack-numpy 0.4.4.2 py36_0 msgpack-python 0.6.1 py36hfd86e86_1 msprime 0.6.2 py36hf3f1cc3_3 conda-forge multidict 4.5.2 py36h7b6447c_0 multipledispatch 0.6.0 py36_0 mysql-connector-c 6.1.11 h597af5e_0 mysqlclient 1.3.14 py36h7b6447c_0 nb_conda_kernels 2.2.0 py36_1 nbconvert 5.4.0 py36_1 nbformat 4.4.0 py36_0 nbserverproxy 0.8.8 pypi_0 pypi ncurses 6.1 hf484d3e_1002 conda-forge networkx 2.3 py_0 nodejs 11.9.0 hf484d3e_0 conda-forge nomkl 3.0 0 nose 1.3.7 py36_2 notebook 5.7.4 py36_0 numba 0.41.0 py36h962f231_0 numcodecs 0.6.3 py36he6710b0_0 numexpr 2.6.9 py36h637b7d7_1000 conda-forge numpy 1.16.1 py36_blas_openblash1522bff_0 [blas_openblas] conda-forge numpy-base 1.14.3 py36h2b20989_0 oauthlib 3.0.1 py_0 olefile 0.46 py36_0 openblas 0.3.3 h9ac9557_1001 conda-forge openpyxl 2.5.14 py_0 openssl 1.1.1b h14c3975_1 conda-forge owslib 0.17.1 py_0 packaging 19.0 py36_0 pamela 1.0.0 py_0 pandas 0.24.1 py36he6710b0_0 pandoc 1.19.2.1 hea2e7c5_1 pandocfilters 1.4.2 py36_1 pango 1.42.4 h049681c_0 param 1.9.0 py_0 paramiko 2.4.2 py36_0 parso 0.4.0 py_0 partd 0.3.10 py36_1 pathtools 0.1.2 pypi_0 pypi patsy 0.5.1 py36_0 pbr 5.1.3 py_0 pcre 8.43 he6710b0_0 peakutils 1.3.2 py_0 conda-forge petl 1.2.0 py36_0 petlx 1.0.3 pypi_0 pypi pexpect 4.7.0 py36_0 pickleshare 0.7.5 py36_0 pillow 5.4.1 py36h34e0f95_0 pip 19.1.1 py36_0 conda-forge pixman 0.38.0 h7b6447c_0 pluggy 0.9.0 py36_0 pomegranate 0.3.7 py36_2 bioconda port-for 0.3.1 pypi_0 pypi prettypandas 0.0.4 pypi_0 pypi prettytable 0.7.2 py_2 conda-forge proj4 5.2.0 he6710b0_1 prometheus_client 0.6.0 py36_0 prompt_toolkit 2.0.9 py36_0 protobuf 3.7.1 py36he6710b0_0 psutil 5.5.0 py36h7b6447c_0 ptyprocess 0.6.0 py36_0 py 1.8.0 py36_0 pyasn1 0.4.5 py_0 pyasn1-modules 0.2.4 py36_0 pycodestyle 2.5.0 pypi_0 pypi pycparser 2.19 py36_0 pycurl 7.43.0.2 py36h1ba5d50_0 pydocstyle 3.0.0 pypi_0 pypi pyepsg 0.4.0 py36_0 pyerf 1.0.1 pypi_0 pypi pyfaidx 0.5.5.2 py_0 bioconda pyfasta 0.5.2 py36_0 bioconda pyflakes 2.1.1 pypi_0 pypi pygments 2.3.1 py36_0 pygraphviz 1.3 py36h14c3975_1 pyjwt 1.7.1 py36_0 pykdtree 1.3.1 py36hdd07704_2 pylint 2.3.1 pypi_0 pypi pynacl 1.3.0 py36h7b6447c_0 pyopenssl 19.0.0 py36_0 pyparsing 2.4.0 py_0 pyproj 1.9.6 py36h14380d9_0 pyqt 5.9.2 py36h05f1152_2 pyrsistent 0.14.11 py36h7b6447c_0 pysam 0.15.2 py36h4b7d16d_3 bioconda pysamstats 1.1.2 py36h84994c4_1 bioconda pysftp 0.2.9 py36_0 bioconda pyshp 2.1.0 py_0 pysocks 1.6.8 py36_0 pytables 3.4.4 py36h71ec239_0 pytest 4.4.1 py36_0 python 3.6.7 h357f687_1005 conda-forge python-blosc 1.7.0 py36h7b6447c_0 python-dateutil 2.8.0 py36_0 python-editor 1.0.4 py_0 python-graphviz 0.10.1 pypi_0 pypi python-irodsclient 0.7.0 py_0 conda-forge python-jsonrpc-server 0.1.2 pypi_0 pypi python-language-server 0.27.0 pypi_0 pypi python-oauth2 1.1.0 py36h28b3542_1 python-snappy 0.5.4 py36he6710b0_0 pytz 2019.1 py_0 pyvcf 0.6.8 py36_0 bioconda pyviz_comms 0.7.2 py_0 pywavelets 1.0.3 py36hdd07704_1 pyyaml 5.1 py36h7b6447c_0 pyzmq 17.1.2 py36he6710b0_2 qt 5.9.7 h5867ecd_1 qtconsole 4.4.3 py36_0 ratelimiter 1.2.0 py36_1000 conda-forge readline 8.0 hf8c457e_0 conda-forge requests 2.21.0 py36_0 requests-oauthlib 1.2.0 py_0 rope 0.14.0 pypi_0 pypi rsa 3.1.4 py36_0 bioconda ruamel_yaml 0.15.46 py36h14c3975_0 s3fs 0.2.0 py36_0 s3transfer 0.2.0 py36_0 samtools 1.9 h8571acd_11 bioconda scikit-allel 1.2.0 py36hf8a1672_1000 conda-forge scikit-image 0.14.2 py36he6710b0_0 scikit-learn 0.20.2 py36_blas_openblashebff5e3_1400 [blas_openblas] conda-forge scikits-bootstrap 1.0.0 pypi_0 pypi scipy 1.2.0 py36_blas_openblash1522bff_1201 [blas_openblas] conda-forge seaborn 0.9.0 py36_0 send2trash 1.5.0 py36_0 setuptools 41.0.1 py36_0 conda-forge shapely 1.6.4 py36h86c5351_0 sip 4.19.8 py36hf484d3e_0 six 1.12.0 py36_0 smmap2 2.0.5 py36_0 snakemake 5.4.0 0 bioconda snakemake-minimal 5.4.0 py_0 bioconda snappy 1.1.7 hbae5bb6_3 snowballstemmer 1.2.1 pypi_0 pypi sortedcontainers 2.1.0 py36_0 sphinx 1.8.2 pypi_0 pypi sphinx-autobuild 0.7.1 pypi_0 pypi sphinx-bootstrap-theme 0.6.5 pypi_0 pypi sphinxcontrib-websupport 1.1.0 pypi_0 pypi sqlalchemy 1.3.3 py36h7b6447c_0 sqlite 3.28.0 hcee41ef_1 conda-forge statsmodels 0.9.0 py36h035aef0_0 svgwrite 1.1.6 py36_0 bioconda tblib 1.3.2 py36_0 terminado 0.8.2 py36_0 testfixtures 6.7.0 py_0 testpath 0.4.2 py36_0 thrift 0.11.0 py36hf484d3e_0 tk 8.6.9 hed695b0_1002 conda-forge toolz 0.9.0 py36_0 tornado 5.1.1 py36h7b6447c_0 traitlets 4.3.2 py36_0 traittypes 0.2.1 py_1 conda-forge typed-ast 1.4.0 pypi_0 pypi uncertainties 3.0.3 py36_1000 conda-forge urllib3 1.24.2 py36_0 watchdog 0.9.0 pypi_0 pypi wcwidth 0.1.7 py36_0 webencodings 0.5.1 py36_1 websocket-client 0.56.0 pypi_0 pypi wheel 0.33.4 py36_0 conda-forge widgetsnbextension 3.4.2 py36_0 wrapt 1.11.1 py36h7b6447c_0 xarray 0.11.3 py36_0 xlrd 1.2.0 py36_0 xlwt 1.3.0 py36_0 xmlrunner 1.7.7 py_0 conda-forge xz 5.2.4 h14c3975_1001 conda-forge yaml 0.1.7 had09818_2 yapf 0.27.0 pypi_0 pypi yarl 1.3.0 py36h7b6447c_0 zarr 2.3.1 py36_0 conda-forge zeromq 4.3.1 he6710b0_3 zict 0.1.3 py36_0 zlib 1.2.11 h14c3975_1004 conda-forge zstd 1.3.7 h0b5b093_0 -------------------------------------------------------------------------------- If requested, please copy and paste the information between the dashed (----) lines, or from a given specific section as appropriate. ============================================================= IMPORTANT: Please ensure that you are happy with sharing the contents of the information present, any information that you wish to keep private you should remove before sharing. =============================================================