Giter VIP home page Giter VIP logo

pycall.rb's Introduction

pycall.rb logo

Build Status Build status

This library provides the features to directly call and partially interoperate with Python from the Ruby language. You can import arbitrary Python modules into Ruby modules, call Python functions with automatic type conversion from Ruby to Python.

Supported Ruby versions

pycall.rb supports Ruby version 2.4 or higher.

Supported Python versions

pycall.rb supports Python version 3.7 or higher.

Note for pyenv users

pycall.rb requires Python's shared library (e.g. libpython3.7m.so). pyenv does not build the shared library in default, so you need to specify --enable-shared option at the installation like below:

$ env PYTHON_CONFIGURE_OPTS='--enable-shared' pyenv install 3.7.2

Installation

Add this line to your application's Gemfile:

gem 'pycall'

And then execute:

$ bundle

Or install it yourself as:

$ gem install --pre pycall

Usage

Here is a simple example to call Python's math.sin function and compare it to the Math.sin in Ruby:

require 'pycall'
math = PyCall.import_module("math")
math.sin(math.pi / 4) - Math.sin(Math::PI / 4)   # => 0.0

Type conversions from Ruby to Python are automatically performed for numeric, boolean, string, arrays, and hashes.

Calling a constructor

In Python, we call the constructor of a class by classname(x, y, z) syntax. Pycall.rb maps this syntax to classname.new(x, y, z).

Calling a callable object

In Python, we can call the callable object by obj(x, y, z) syntax. PyCall.rb maps this syntax to obj.(x, y, z).

Passing keyword arguments

In Python, we can pass keyword arguments by func(x=1, y=2, z=3) syntax. In pycallrb, we should rewrite x=1 to x: 1.

The callable attribute of an object

Pycall.rb maps the callable attribute of an object to the instance method of the corresponding wrapper object. So, we can write a Python expression obj.meth(x, y, z=1) as obj.meth(x, y, z: 1) in Ruby. This mapping allows us to call these attributes naturally as Ruby's manner.

But, unfortunately, this mapping prohibits us to get the callable attributes. We need to write PyCall.getattr(obj, :meth) in Ruby to get obj.meth object while we can write obj.meth in Python.

Specifying the Python version

If you want to use a specific version of Python instead of the default, you can change the Python version by setting the PYTHON environment variable to the path of the python executable.

When PYTHON is not specified, pycall.rb tries to use python3 first, and then tries to use python.

Releasing the RubyVM GVL during Python function calls

You may want to release the RubyVM GVL when you call a Python function that takes very long runtime. PyCall provides PyCall.without_gvl method for such purpose. When PyCall performs python function call, PyCall checks the current context, and then it releases the RubyVM GVL when the current context is in a PyCall.without_gvl's block.

PyCall.without_gvl do
  # In this block, all Python function calls are performed without
  # the GVL acquisition.
  pyobj.long_running_function()
end

# Outside of PyCall.without_gvl block,
# all Python function calls are performed with the GVL acquisition.
pyobj.long_running_function()

Debugging python finder

When you encounter PyCall::PythonNotFound error, you can investigate PyCall's python finder by setting PYCALL_DEBUG_FIND_LIBPYTHON environment variable to 1. You can see the log like below:

$ PYCALL_DEBUG_FIND_LIBPYTHON=1 ruby -rpycall -ePyCall.builtins
DEBUG(find_libpython) find_libpython(nil)
DEBUG(find_libpython) investigate_python_config("python3")
DEBUG(find_libpython) libs: ["Python.framework/Versions/3.7/Python", "Python", "libpython3.7m", "libpython3.7", "libpython"]
DEBUG(find_libpython) libpaths: ["/opt/brew/opt/python/Frameworks/Python.framework/Versions/3.7/lib", "/opt/brew/opt/python/lib", "/opt/brew/opt/python/Frameworks", "/opt/brew/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7", "/opt/brew/Cellar/python/3.7.2_1/Frameworks/Python.framework/Versions/3.7/lib"]
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/Frameworks/Python.framework/Versions/3.7/lib/Python.framework/Versions/3.7/Python
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/Frameworks/Python.framework/Versions/3.7/lib/Python.framework/Versions/3.7/Python.dylib
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/Frameworks/Python.framework/Versions/3.7/lib/darwin/Python.framework/Versions/3.7/Python
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/Frameworks/Python.framework/Versions/3.7/lib/darwin/Python.framework/Versions/3.7/Python.dylib
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/lib/Python.framework/Versions/3.7/Python
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/lib/Python.framework/Versions/3.7/Python.dylib
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/lib/darwin/Python.framework/Versions/3.7/Python
DEBUG(find_libpython) Unable to find /opt/brew/opt/python/lib/darwin/Python.framework/Versions/3.7/Python.dylib
DEBUG(find_libpython) dlopen("/opt/brew/opt/python/Frameworks/Python.framework/Versions/3.7/Python") = #<Fiddle::Handle:0x00007fc012048650>

Special notes for specific libraries

matplotlib

Use mrkn/matplotlib.rb instead of just importing it by PyCall.import_module("matplotlib").

numpy

Use mrkn/numpy.rb instead of just importing it by PyCall.import_module("numpy").

pandas

Use mrkn/pandas.rb instead of just importing it by PyCall.import_module("pandas").

PyCall object system

PyCall wraps pointers of Python objects in PyCall::PyPtr objects. PyCall::PyPtr class has two subclasses, PyCall::PyTypePtr and PyCall::PyRubyPtr. PyCall::PyTypePtr is specialized for type objects, and PyCall::PyRubyPtr is for the objects that wraps pointers of Ruby objects.

These PyCall::PyPtr objects are used mainly in PyCall infrastructure. Instead, we usually treats the instances of Object, Class, Module, or other classes that are extended by PyCall::PyObjectWrapper module.

PyCall::PyObjectWrapper is a mix-in module for objects that wraps Python objects. A wrapper object should have PyCall::PyPtr object in its instance variable @__pyptr__. PyCall::PyObjectWrapper assumes the existance of @__pyptr__, and provides general translation mechanisms between Ruby object system and Python object system. For example, PyCall::PyObjectWrapper translates Ruby's coerce system into Python's swapped operation protocol.

Deploying on Heroku

Heroku's default version of Python is not compiled with the --enabled-shared option and can't be accessed by PyCall.

There are many ways to make our heroku use Python that is compiled with the --enabled-shared option:

  • use Heroku's official Python buildpacks post_compile hooks to recompile the python if the --enabled-shared option is not enabled. example script of post_compile in ruby on rails app bin/post_compile.

    set -e
    buildpack_url=https://github.com/heroku/heroku-buildpack-python
    buildpack_vsn=v197 # adjust version accordingly https://github.com/heroku/heroku-buildpack-python/tags
    
    # rebuild python if it's missing enable-shared
    if  ! python3 -msysconfig | grep enable-shared \
        > /dev/null; then
      PYTHON_VERSION="$(< runtime.txt)"
      git clone -b "$buildpack_vsn" "$buildpack_url" _buildpack
      export WORKSPACE_DIR="$PWD/_buildpack/builds"
      rm -f .heroku/python/bin/python   # prevent failing ln after build
      sed -i 's!figure --pre!figure --enable-shared --pre!' \
        "$WORKSPACE_DIR"/runtimes/python3
      "$WORKSPACE_DIR/runtimes/$PYTHON_VERSION" /app/.heroku/python/
      rm -fr _buildpack
    fi
    
  • use your own precompiled python with --enabled-shared options then fork the official heroku python buildspacks and change the BUILDPACK_S3_BASE_URL with your own uploaded precompiled python in Amazon's S3.

  • use 3rd party buildpacks from the markets that have python with --enabled-shared option.

The buildpack will expect to find both a runtime.txt and a requirements.txt file in the root of your project. You will need to add these to specify the version of Python and any packages to be installed via pip, e.g to use version Python 3.8.1 and version 2.5 of the 'networkx' package:

$ echo "python-3.8.1" >> runtime.txt
$ echo "networkx==2.5" >> requirements.txt

Commit these two files into project's repository. You'll use these to manage your Python environment in much the same way you use the Gemfile to manage Ruby.

Heroku normally detects which buildpacks to use, but you will want to override this behavior. It's probably best to clear out existing buildpacks and specify exactly which buildpacks from scratch.

First, take stock of your existing buildpacks:

$ heroku buildpack [-a YOUR_APP_NAME]

For a Ruby/Rails application this will typically report the stock heroku/ruby buildpack, or possibly both heroku/ruby and heroku/nodejs.

Clear the list and progressively add back your buildpacks, starting with the Python community-developed buildpack. For example, if ruby and nodejs buildpacks were previously installed, and chosing the 'ReforgeHQ' buildback, your setup process will be similar to this:

$ heroku buildpacks:clear
$ heroku buildpacks:add https://github.com/ReforgeHQ/heroku-buildpack-python -i 1
$ heroku buildpacks:add heroku/nodejs -i 2
# heroku buildpacks:add heroku/ruby -i 3

If you have multiple applications on Heroku you will need to append each of these with application's identifier (e.g. heroku buildpacks:clear -a YOUR_APP_NAME).

With each buildpack we are registering its index (the -i switch) in order to specify the order Heroku will load runtimes and execute bootstrapping code. It's important for the Python environment to be engaged first, as PyCall will need to be able to find it when Ruby-based processes start.

Once you have set up your buildpacks, and have commited both requirements.txt and runtime.txt files to git, deploy your Heroku application as your normally would. The Python bootstrapping process will appear in the log first, followed by the Ruby and so on. PyCall should now be able to successfully call Python functions from within the Heroku environment.

NB It is also possible to specify buildpacks within Docker images on Heroku. See Heroku's documentation on using Docker Images.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/mrkn/pycall.rb.

Acknowledgement

PyCall.jl is referred too many times to implement this library.

License

The gem is available as open source under the terms of the MIT License.

pycall.rb's People

Contributors

archonic avatar banzaiman avatar buncis avatar c-dilks avatar felixonmars avatar ferrisoxide avatar kojix2 avatar kou avatar mknkmyzk avatar mrkn avatar rmatsumiya avatar shkit avatar suketa avatar tarui avatar yui-knk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pycall.rb's Issues

Force deallocation of Python object

Is it possible to somehow ensure that Python object was removed from memory? I am trying to use PyCall to use GDAL with Ruby. The only way to ensure that a raster was actually written to disk is to deallocate it.

PyCall::PythonNotFound (PyCall::PythonNotFound)

I install python3.6 use

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get install python3.6
sudo apt install libpython3.6

And I replace the default python version3.5.
I install ruby use

sudo apt install ruby2.3 ruby2.3-dev

And when I use pycall, the error is
finder.rb:37:in rescue in block in find_libpython': PyCall::PythonNotFound (PyCall::PythonNotFound)`

This error is appear also when I use pyenv to manage python version.
Is there any function to solve it? I see #52 to set PYCALL_DEBUG_FIND_LIBPYTHON, but really don't how to set it.

And I also try #4 and this is the result after run python3 investigator.py

executable: /usr/bin/python3
exec_prefix: /usr
prefix: /usr
conda: false
multiarch: x86_64-linux-gnu
VERSION: 3.6
INSTSONAME: libpython3.6m.so.1.0
LIBRARY: libpython3.6m.a
LDLIBRARY: libpython3.6m.so
LIBDIR: /usr/lib
PYTHONFRAMEWORKPREFIX:
MULTIARCH: x86_64-linux-gnu

And my bashrc is set like

LIBPYTHON=/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1
PYTHON=/usr/bin/python3

Hope can get some help.

Support multiarch in Debian and Ubuntu by a sophisticated way

Now we can use LIBPYTHON environment variable to specify libpython's location directly.
But I want pycall to resolve libpython's location for Debian and Ubuntu.
I need to know how to detect the location of multiarch libdir, such as /usr/lib/x86_64-linux-gnu for amd64 architecture.

There is a rarely failed example on Windows

https://ci.appveyor.com/project/mrkn/pycall/build/1.0.108/job/ylhkmtyb8ya1uqw7

The failed example is:

Failures:
  1) <class 'dict'>#has_key? when key is a python object should not have key time.struct_time(tm_year=2017, tm_mon=9, tm_mday=22, tm_hour=2, tm_min=32, tm_sec=36, tm_wday=4, tm_yday=265, tm_isdst=0)
     Failure/Error: expect(subject).not_to have_key(non_key)
       expected #has_key?(time.struct_time(tm_year=2017, tm_mon=9, tm_mday=22, tm_hour=2, tm_min=32, tm_sec=36, tm_wday=4, tm_yday=265, tm_isdst=0)) to return false, got true
     # ./spec/pycall/dict_spec.rb:98:in `block (4 levels) in <module:PyCall>'

The platform is i386-mingw32:

bundle exec rake -rdevkit clobber compile
mkdir -p tmp/i386-mingw32/pycall/2.3.3
cd tmp/i386-mingw32/pycall/2.3.3

The randomized seed is:

Randomized with seed 22553

Python version:

The following version of Python is used:
3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]

"no implicit conversion of Object into String (TypeError)" on pyobject_wrapper.rb:43:in

Hi,

I've been trying to use tensorflow through pycall.rb and I found the following error:

/home/mvazque2/.rvm/gems/ruby-2.4.1/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:43:in run': no implicit conversion of Object into String (TypeError) from /home/mvazque2/.rvm/gems/ruby-2.4.1/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:43:in method_missing'
from pycal.tf.rb:21:in `

'

The code is the following:

require 'pycall/import'
include PyCall::Import

pyimport :tensorflow

tf = tensorflow

a = tf.placeholder(tf.int16)
b = tf.placeholder(tf.int16)

# Define some operations
add = tf.add(a, b)

sess = tf.Session.new()
sess.run(add, feed_dict={a =>  2, b => 3})

I'm unable to track this error further, I cannot see where is this implicit conversion attempted.

Reflect subclass in Python

We need to define new Ruby-level methods to both superclass and subclass for Python classes that they are superclass and subclass relation.

Here is an example.

A is a superclass.

B is a subclass of A.

/tmp/x.py:

class A:
    pass

class B(A):
    pass

I want to define a Ruby method to A and B by defining only one Ruby method to A (superclass). But A and B in Ruby aren't superclass and subclass relation. So I need to define two Ruby methods to both A and B.

/tmp/a.rb:

require "pycall"

PyCall.sys.path.append("/tmp")

x = PyCall.import_module("x")

A = x.A
B = x.B

class A
  register_python_type_mapping
  def xxx
    p [self.class, :A, :xxx]
  end
end

A.new.xxx

# class B
#   register_python_type_mapping
#   def xxx
#     p [self.class, :B, :xxx]
#   end
# end

# Actual: undefined method `xxx' for <x.B object at 0x7f415ce6e668>:B (NoMethodError)
# Expected: A#xxx is called
B.new.xxx

tensorflow

Is possible to using tensorflow in ruby?

Symbol not found _main (PyCall::PyError)

I use Pycall to call sklearn:
require 'pycall/import'
include PyCall::Import

pyfrom :sklearn, import: :datasets

I got this error:

/usr/local/lib/ruby/gems/2.4.0/gems/pycall-1.0.3/lib/pycall/import.rb:46:in `import_moduleโ€™: : dlopen(/Users/tay/anaconda3/lib/python3.6/site-packages/scipy/sparse/linalg/isolve/_iterative.cpython-36m-darwin.so, 2): Symbol not found: _main (PyCall::PyError)

thnks

Import Errors on Ubuntu 16.10

Dear @mrkn ,

I'm trying to run examples from this repo, but I cannot go further the first require statement:

irb(main):001:0> require 'pycall/import'
LoadError: no library specified
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/ffi-1.9.18/lib/ffi/library.rb:176:in `ffi_libraries'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/ffi-1.9.18/lib/ffi/library.rb:336:in `attach_variable'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170311/lib/pycall/libpython.rb:106:in `<module:LibPython>'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170311/lib/pycall/libpython.rb:4:in `<module:PyCall>'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170311/lib/pycall/libpython.rb:3:in `<top (required)>'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170311/lib/pycall.rb:2:in `<top (required)>'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170311/lib/pycall/import.rb:1:in `<top (required)>'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `require'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require'
from /home/arbox/.rbenv/versions/2.4.0/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:40:in `require'
from (irb):1
from /home/arbox/.rbenv/versions/2.4.0/bin/irb:11:in `<main>'

Setting PYTHONHOME and PYTHONPATH does not change the picture.

Could you please provide requirements for the Python side as well? Thank you!

wrap_class doesn't work for pandas.DataFrame

require 'pycall'

module Pandas
  class DataFrame
    include PyCall::PyObjectWrapper
    wrap_class PyCall.import_module('pandas').DataFrame
  end
end

This code doesn't work properly.

$ ruby pandas.rb
/Users/mrkn/src/github.com/mrkn/pycall/lib/pycall/pyobject.rb:16:in `getattr': pytype(AttributeError): AttributeError("'NoneType' object has no attribute '_data'",) (PyCall::PyError)
  File "pandas/src/properties.pyx", line 61, in pandas.lib.AxisProperty.__get__ (pandas/lib.c:46146)
        from /Users/mrkn/src/github.com/mrkn/pycall/lib/pycall/pyobject_wrapper.rb:27:in `block in wrap_class'
        from /Users/mrkn/src/github.com/mrkn/pycall/lib/pycall/list.rb:55:in `each'
        from /Users/mrkn/src/github.com/mrkn/pycall/lib/pycall/pyobject_wrapper.rb:26:in `wrap_class'
        from -:6:in `<class:DataFrame>'
        from -:4:in `<module:Pandas>'
        from -:3:in `<main>'

newspaper library is not working

I want to use newspaper library for my rails project.
So I tried to use this gem but I got an error.

This is my code

require 'pycall/import'
include PyCall::Import

pyimport 'newspaper'

url = 'http://www.bbc.co.uk/zhongwen/simp/chinese_news/2012/12/121210_hongkong_politics.shtml'

article = newspaper.Article(url)
article.download()
article.parse()
print(article.text)

I got a following error

~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:43:in `download': <class 'TypeError'>: download() missing 1 required positional argument: 'self' (PyCall::PyError)  
        from ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:43:in `method_missing'
        from newspaper.rb:9:in `<main>'

Other libraries like math, pandas are working.
I have no idea if this is caused due to this gem, But native python code can be working.

OS: OSX High Sierra
Python: 3.6.4
Ruby: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16
echo $PYTHON => /usr/local/bin/python3
newspaper3k (0.2.5)
pycall (1.0.3)

Not working in heroku

Hi.
Can this gem work in heroku environment?
I use python 3.6, ruby 2.5.0 and rails 5.1.4 version in heroku.

I set PYCALL_DEBUG_FIND_LIBPYTHON=1 variable and got an following error.

Loading production environment (Rails 5.1.4)
irb(main):001:0> require 'pycall/import'
=> false
irb(main):002:0> include PyCall::Import
=> Object
irb(main):003:0> pyimport :math
DEBUG(find_libpython) find_libpython(".heroku/python/bin/python")
DEBUG(find_libpython) investigate_python_config(".heroku/python/bin/python")
DEBUG(find_libpython) libs: ["libpython3.6m.a", "libpython3.6m", "libpython3.6", "libpython"]
DEBUG(find_libpython) libpaths: ["/app/.heroku/python/lib", "/app/.heroku/python/lib", "", "/app/.heroku/python", "/app/.heroku/python/lib"]
DEBUG(find_libpython) Fiddle::DLError: /app/.heroku/python/lib/libpython3.6m.a: invalid ELF header
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.a
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.a.so
DEBUG(find_libpython) Fiddle::DLError: /app/.heroku/python/lib/libpython3.6m.a: invalid ELF header
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.a
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /libpython3.6m.a
DEBUG(find_libpython) Unable to find /libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython3.6m.a
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython3.6m.a
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython3.6m.a
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython3.6m.a.so
DEBUG(find_libpython) Fiddle::DLError: /app/.heroku/python/lib/libpython3.6m.a: invalid ELF header
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.a
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.a.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.so
DEBUG(find_libpython) Unable to find /libpython3.6m
DEBUG(find_libpython) Unable to find /libpython3.6m.so
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython3.6m
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6m.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6.so
DEBUG(find_libpython) Unable to find /libpython3.6
DEBUG(find_libpython) Unable to find /libpython3.6.so
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython3.6
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython3.6.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython.so
DEBUG(find_libpython) Unable to find /libpython
DEBUG(find_libpython) Unable to find /libpython.so
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython
DEBUG(find_libpython) Unable to find /x86_64-linux-gnu/libpython.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/libpython.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/x86_64-linux-gnu/libpython.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/libpython.so
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython
DEBUG(find_libpython) Unable to find /app/.heroku/python/lib/x86_64-linux-gnu/libpython.so
DEBUG(find_libpython) Fiddle::DLError: /app/.heroku/python/lib/libpython3.6m.a: invalid ELF header
DEBUG(find_libpython) Fiddle::DLError: libpython3.6m: cannot open shared object file: No such file or directory
DEBUG(find_libpython) Fiddle::DLError: libpython3.6: cannot open shared object file: No such file or directory
DEBUG(find_libpython) Fiddle::DLError: libpython: cannot open shared object file: No such file or directory
Traceback (most recent call last):
        1: from (irb):3
PyCall::PythonNotFound (PyCall::PythonNotFound)

Python can work by using command.

Loading production environment (Rails 5.1.4)
irb(main):001:0> system('python --version')
Python 3.6.4
=> true
irb(main):002:0> system('which python')
/app/.heroku/python/bin/python
=> true
irb(main):003:0> system('echo $PATH')
/app/vendor/bundle/ruby/2.5.0/bin:/app/bin:/app/vendor/bundle/bin:vendor/yarn-v1.0.2/bin/:/app/.heroku/python/bin:/usr/local/bin:/usr/bin:/bin
=> true
irb(main):004:0>

thanks.

Segmentation fault with `hpricot`

# Enviroment
uname -a      
Linux ip-10-1-25-22 4.4.0-1037-aws #46-Ubuntu SMP Wed Sep 27 19:05:49 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial

ruby -v
ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux]
# Gemfile
source "https://rubygems.org"
gem 'pycall'
gem 'hpricot'
# open console
LIBPYTHON=/usr/lib/x86_64-linux-gnu/libpython3.5m.so.1 bundle console
irb(main):001:0> require 'pycall/import'
irb(main):002:0> include PyCall::Import
irb(main):003:0> pyimport :math
/mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:71: [BUG] Segmentation fault at 0x0000000000000020
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0042 p:---- s:0232 e:000231 CFUNC  :from_ruby
c:0041 p:0033 s:0227 e:000226 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:71
c:0040 p:0026 s:0222 e:000221 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/hpricot-0.8.6/lib/hpricot/blankslate.rb:59 [FINISH]
c:0039 p:-11785133056130 s:0217 e:000216 TOP    [FINISH]
c:0038 p:---- s:0214 e:000213 CFUNC  :require
c:0037 p:0012 s:0209 e:000208 BLOCK  /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292
c:0036 p:0057 s:0206 e:000205 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:258
c:0035 p:0017 s:0200 e:000199 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292
c:0034 p:0021 s:0194 e:000193 RESCUE /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/pycall-1.0.3/lib/pycall/init.rb:45
c:0033 p:0214 s:0190 e:000189 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/pycall-1.0.3/lib/pycall/init.rb:41
c:0032 p:0071 s:0182 e:000181 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/pycall-1.0.3/lib/pycall/init.rb:16 [FINISH]
c:0031 p:0011 s:0177 e:000176 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/pycall-1.0.3/lib/pycall.rb:52
c:0030 p:0037 s:0172 e:000171 METHOD /mnt/files/apps/test1/vendor/bundle/ruby/2.4.0/gems/pycall-1.0.3/lib/pycall/import.rb:18
c:0029 p:0008 s:0164 e:000163 EVAL   (irb):3 [FINISH]
c:0028 p:---- s:0161 e:000160 CFUNC  :eval

Unable to use with anaconda

$ PYENV_VERSION=anaconda3-4.3.0 bundle exec ruby -rpycall -e PyCall.init
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007fffd02833c0 (most recent call first):
Abort trap: 6

period is still necessary

# if is possible to remove the period before left bracket in this case
pry(main)> df = pandas.DataFrame([*1..5])
=> <class 'pandas.core.frame.DataFrame'>

pry(main)> df = pandas.DataFrame.([*1..5])
=>    0
0  1
1  2
2  3
3  4
4  5

core dumped in PyCall 1.0.2

I met core dumped in irb using PyCall 1.0.2

irb(main):001:0> require 'pycall'
=> true
irb(main):002:0> PyCall.import_module("math")
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007fcfae91c700 (most recent call first):
zsh: abort (core dumped)  irb

My environment is...

Python installed using pyenv(anaconda3-4.4.0).

% python --version
Python 3.6.1 :: Anaconda 4.4.0 (64-bit)

Ruby install using rbenv

% ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]

Missing wrappers for iterators and generators

I want to write the following Python code

for item in collection:
  ...

like the following in Ruby with PyCall:

collection.each do |item|
  ...
end

Now PyCall defines each methods in PyCall::List and PyCall::Dict in specific ways.
It needs to be rewritten in more generic way.

Importing the multiarray numpy extension module failed

When i try to import numpy:

require 'pycall/import'
include PyCall::Import
pyimport 'numpy', as: :np

this give me this error:
DEBUG(find_libpython) find_libpython("C:\APPL\Python37\python.exe")
DEBUG(find_libpython) investigate_python_config("C:\APPL\Python37\python.exe")
DEBUG(find_libpython) libs: ["python37", "python"]
DEBUG(find_libpython) libpaths: ["C:\APPL\Python37", "C:\APPL\Python37", "C:\APPL\Python37/lib"]
DEBUG(find_libpython) Unable to find C:\APPL\Python37/python37
DEBUG(find_libpython) dlopen("C:\APPL\Python37/python37") = #Fiddle::Handle:0x00000000043b44b8
Traceback (most recent call last):
3: from test.rb:21:in <main>' 2: from C:/RubySystem/lib/ruby/gems/2.5.0/gems/pycall-1.2.0.beta1/lib/pycall/import.rb:18:in pyimport'
1: from C:/RubySystem/lib/ruby/gems/2.5.0/gems/pycall-1.2.0.beta1/lib/pycall.rb:52:in import_module' C:/RubySystem/lib/ruby/gems/2.5.0/gems/pycall-1.2.0.beta1/lib/pycall.rb:52:in import_module': <class 'ImportError'>: (PyCall::PyError)
Importing the multiarray numpy extension module failed. Most
likely you are trying to import a failed build of numpy.
If you're working with a numpy git repo, try git clean -xdf (removes all
files not under version control). Otherwise reinstall numpy.

Original error was: DLL load failed: Impossibile trovare il modulo specificato.

File "C:\APPL\Python37\lib\site-packages\numpy_init_.py", line 142, in
from . import add_newdocs
File "C:\APPL\Python37\lib\site-packages\numpy\add_newdocs.py", line 13, in
from numpy.lib import add_newdoc
File "C:\APPL\Python37\lib\site-packages\numpy\lib_init_.py", line 8, in
from .type_check import *
File "C:\APPL\Python37\lib\site-packages\numpy\lib\type_check.py", line 11, in
import numpy.core.numeric as nx
File "C:\APPL\Python37\lib\site-packages\numpy\core_init
.py", line 26, in
raise ImportError(msg)

This is my numpy installed:
ฮป pip list
Package Version


numpy 1.15.1
pip 18.0
pybind11 2.2.4
scipy 1.1.0
setuptools 39.0.1
six 1.11.0

But in python work fine..

"TypeError: Can't convert 'NoneType' object to str implicitly" at investigator.py

on my envilroment, get_config_vars() return only {'INCLUDEPY': 'C:\Anaconda3\include', 'EXT_SUFFIX': '.cp35-win_amd64.pyd', 'SO': '.cp35-win_amd64.pyd', 'VERSION': '35', 'srcdir': 'C:\Anaconda3', 'BINDIR': 'C:\Anaconda3', 'exec_prefix': 'C:\Anaconda3', 'BINLIBDEST': 'C:\Anaconda3\Lib', 'prefix': 'C:\Anaconda3', 'LIBDEST': 'C:\Anaconda3\Lib', 'EXE': '.exe'}

then, get_config_var("LIB") become NoneType, and program failed.

pycall can't use in rails class

I want to use pycall in my rails project. However, it doesn't work when import python module.

class Test
  require 'pycall/import'
  include PyCall::Import
  pyimport :math

  class << self
    def test
      puts math.pi
    end
  end
end

Test.test => undefined method `pyimport' for Test:Class (NoMethodError)

Add `wrap_module` to wrap a Python module

If we can use wrap_module like PyCall::PyObjectWrapper.wrap_class to wrap a Python module, it'll be handier and easier to implement the wrapper libraries for Python libraries.

Can't import CountVectorizer from 'sklearn.feature_extraction.text

I am having an issue (undefined method module_eval when trying to import CountVectorizer from sklearn.feature_extraction.text.
My Code:
pyfrom :'sklearn.feature_extraction.text', import: :CountVectorizer

image

Am I missing something, or is this library not supported yet on pycall?

Class wrapper does not inherit PyTypeObjectWrapper

[3] pry(main)> PyCall::VERSION
=> "1.0.0"
[4] pry(main)> PyCall.builtins.tuple
=> <class 'tuple'>
[5] pry(main)> PyCall.builtins.tuple.ancestors
=> [<class 'tuple'>, PyCall::PyObjectWrapper, Object, PP::ObjectMixin, Kernel, BasicObject]

Failed to wrap a class if the target class seems to have the method named "initialize"

I am creating the wrapper for gensim, and I have found some cases where the wrap_class fails to wrap a class. The example code is shown below.

# script.rb
require "pycall"

tfidf_model = PyCall.import_module("gensim.models").TfidfModel

module Gensim
  module Models
    class TfidfModel
      include PyCall::PyObjectWrapper
      wrap_class PyCall.import_module("gensim.models").TfidfModel
    end
  end
end

p tfidf_model.([[[0, 1.0], [1, 1.0], [2, 1.0]],
                [[2, 1.0], [3, 1.0], [4, 1.0], [5, 1.0], [6, 1.0], [8, 1.0]],
                [[1, 1.0], [3, 1.0], [4, 1.0], [7, 1.0]],
                [[0, 1.0], [4, 2.0], [7, 1.0]],
                [[3, 1.0], [5, 1.0], [6, 1.0]],
                [[9, 1.0]],
                [[9, 1.0], [10, 1.0]],
                [[9, 1.0], [10, 1.0], [11, 1.0]],
                [[8, 1.0], [10, 1.0], [11, 1.0]]])

It goes like the following outputs.

cafedomancer@MacBook ~/.g/g/c/gensim.rb (master)> ruby script.rb 
/Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/pyobject.rb:12:in `getattr': undefined method `__pyobj__' for nil:NilClass (NoMethodError)
	from /Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/pyobject_wrapper.rb:32:in `block (2 levels) in wrap_class'
	from /Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/conversion.rb:86:in `new'
	from /Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/conversion.rb:86:in `block in to_ruby'
	from /Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/conversion.rb:14:in `each_type_pair'
	from /Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/conversion.rb:77:in `to_ruby'
	from /Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/conversion.rb:170:in `to_ruby'
	from /Users/cafedomancer/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170317/lib/pycall/pyobject_wrapper.rb:166:in `call'
	from script.rb:62:in `<main>'

When I read the documentation of gensim, I found that the Python class gensim.models.tfidfmodel.TfidfModel has the method named initialize (https://radimrehurek.com/gensim/models/tfidfmodel.html). Maybe I think the problem is caused by the target class which has the initialize method because it is special in Ruby classes, but I couldn't investigate it in depth.

Introduce Ruby's Array and Hash wrappers in Python

Now pycall.rb converts Ruby's Array and Hash to Python's list and dict, respectively.
For reducing conversion costs, we need to introduce wrappers of Array and Hash in Python-side.
These wrapper classes should be subclasses of list and dict, respectively.

Segmentation Fault at

From the commit 556726d, the following SEGV always occurs at spec/pycall/ruby_object_spec.rb:19.

install -c tmp/x86_64-linux-gnu/pycall/2.5.1/pycall.so lib/pycall.so
cp tmp/x86_64-linux-gnu/pycall/2.5.1/pycall.so tmp/x86_64-linux-gnu/stage/lib/pycall.so
install -c tmp/x86_64-linux-gnu/pycall/spec_helper/2.5.1/pycall/spec_helper.so lib/pycall/spec_helper.so
cp tmp/x86_64-linux-gnu/pycall/spec_helper/2.5.1/pycall/spec_helper.so tmp/x86_64-linux-gnu/stage/lib/pycall/spec_helper.so
/usr/bin/ruby2.5 -I/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib:/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb

Environment variables:
- ANACONDA=
- LIBPYTHON=
- PYENV_VERSION=
- PYTHON=python3
- PYTHON_VERSION=
- PYTHONPATH=
- PYCALL_DEBUG_FIND_LIBPYTHON=

The following version of Python is used:
3.6.5 (default, Apr  1 2018, 05:46:30) 
[GCC 7.3.0]

Randomized with seed 3416

<class 'list'>
  #<<
    appends the given object
  #sort!
    sorts the list in place
  #sort
    does not change the list
    returns a new sorted PyCall::List
  #each
    without a block
      returns an Enumerator
    with a block
      enumerates each item
  #length
    should eq 3
  #push
    appends all the given objects

PyCall::Conversion
  .register_python_type_mapping
    returns true and registers a given type mapping
    when no type mapping for a given Python type is registered
      returns false
    when there is a type mapping for a given Python type
      when a given Ruby class at the 2nd argument is not a PyCall::PyTypeObjectWrapper
        raises TypeError
      when the 2nd argument is not a Ruby class
        raises TypeError
    when the 1st argument is not a PyCall::PyTypePtr
      raises TypeError
  .from_ruby
    for -1
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d6d0 type=type addr=0x00007fb7a9433680>
      should eq -1
    for an ascii string
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d608 type=type addr=0x00007fb7a9442520>
    for 0.0
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d770 type=type addr=0x00007fb7a9430020>
      should eq 0.0
    for true
      should equal true
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d810 type=type addr=0x00007fb7a941ea40>
    for a unicode string
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d608 type=type addr=0x00007fb7a9442520>
    for 1
      should eq 1
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d6d0 type=type addr=0x00007fb7a9433680>
    for an Array
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d6f8 type=type addr=0x00007fb7a9432660>
      should be a kind of <class 'list'>
      should eq [0, 1, 2, "a", "b", "c"]
    for false
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d810 type=type addr=0x00007fb7a941ea40>
      should equal false
    for 0
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d6d0 type=type addr=0x00007fb7a9433680>
      should eq 0
    for an Hash
      should eq {"a"=>1, "b"=>2, "c"=>3}
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d7e8 type=type addr=0x00007fb7a9434fa0>
      should be a kind of <class 'dict'>
    for -1.0
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d770 type=type addr=0x00007fb7a9430020>
      should eq -1.0
    for :ascii_symbol
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d608 type=type addr=0x00007fb7a9442520>
    for a Proc object
      should be a kind of PyCall::PyRubyPtr
    for a binary string
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d680 type=type addr=0x00007fb7a9422e40>
    for NaN
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d770 type=type addr=0x00007fb7a9430020>
      should be nan
    for 1.0
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d770 type=type addr=0x00007fb7a9430020>
      should eq 1.0
    for :ใƒžใƒซใƒใƒใ‚คใƒˆใ‚ทใƒณใƒœใƒซ
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d608 type=type addr=0x00007fb7a9442520>
    for -Infinity
      should eq -Infinity
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d770 type=type addr=0x00007fb7a9430020>
    for Infinity
      should eq Infinity
      should be a kind of #<PyCall::PyTypePtr:0x000055fd5032d770 type=type addr=0x00007fb7a9430020>
  .to_ruby
    for a large size string
      should eq "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    for a Python module object
      should be a kind of PyCall::PyObjectWrapper
      should be a kind of Module
    for a Python type object
      should be a kind of PyCall::PyTypeObjectWrapper
      should be a kind of Class
    for a unicode string
      should eq "\u2603"
  .unregister_python_type_mapping
    returns true and unregisters the type mapping for a given Python type
    when the type mapping for a given Python type is not registered
      returns false
    when the 1st argument is not a PyCall::PyTypePtr
      raises TypeError

PyCall::LibPython::API
  .builtins_module_ptr
    should be a kind of PyCall::PyPtr
    returns the different instance but the same address

PyCall::PyTypeObjectWrapper
  .register_python_type_mapping
    example at ./spec/pycall/pytypeobject_wrapper_spec.rb:65 (PENDING: Not yet implemented)
  .new
    returns an instance of the extended class object
    calls the corresponding Python type object with the given arguments to instantiate its Python object
    the returned object has a Python object pointer whose type is its __pyptr__
  .extend_object
    @__pyptr__ of the extended object is a PyCall::PyPtr
      raises TypeError
    @__pyptr__ of the extended object is not a PyCall::PyPtr
      raises TypeError
    @__pyptr__ of the extended object is a PyCall::PyTypePtr
      extends the given object
    @__pyptr__ of the extended object is nil
      raises TypeError
  #===
    should eq true

PyCall
  has a version number
  .wrap_class
    extends the resulting wrapper class by PyTypeObjectWrapper
    returns the first-created wrapper class when called twice
    returns a new wrapper class
  .import_module
    returns a wrapper object of Python module with the specified name
  .wrap_module
    returns a Module that wraps a Python object
    the wrapped module object can respond to read attributes
    returns the first-created wrapper module when called twice
    the wrapped module object can respond to callable attributes as methods
  .builtins
    is a wrapper object of Python's builtins module
  LibPython::API::None
    should be nil
    should be a kind of PyCall::PyPtr
    should eq true
  .sys
    .path
      should be a kind of <class 'list'>
  .callable?
    detects whether the given object is callable
  .dir
    returns a list object containing the attribute names of the given Python object
  PYTHON_VERSION
    has a Python's version number
  .init
    returns true if initialization was succeeded
    raises PyCall::PythonNotFound error if unable to find libpython library
    returns false if alreadly initialized

<class 'tuple'>
  should eq 3
  #inspect
    example at ./spec/pycall/tuple_spec.rb:34 (PENDING: Not yet implemented)
  #length
    returns its size
  #to_a
    returns an array that contains all the items in the subject
  #to_ary
    is used for multiple assignment

.tuple
  should eq (1, 2, 3)

PyCall.with
  should yield with args(42)
  in a normal case
    should be nil
  in an exception occurred in Python
    when __exit__ returns not True
      should not be nil
    when __exit__ returns True
      should not be nil
  in an exception occurred in Ruby
    when __exit__ returns True
      should not be nil
    when __exit__ returns not True
      should be all

PyCall::PyObjectWrapper
  .extend_object
    @__pyptr__ of the extended object is not a PyCall::PyPtr
      raises TypeError
    @__pyptr__ of the extended object is nil
      raises TypeError
    @__pyptr__ of the extended object is a PyCall::PyPtr
      extends the given object
  #method_missing
    when the name is :>>
      delegates to :__rshift__ (PENDING: Not yet implemented)
    when the name is :&
      delegates to :__and__ (PENDING: Not yet implemented)
    the Python object does not have the attribute of the given name
      raises NameError
    when the name is :/
      delegates to :__truediv__ (PENDING: Not yet implemented)
    when the name is :<<
      delegates to :__lshift__ (PENDING: Not yet implemented)
    when the name is :^
      delegates to :__xor__ (PENDING: Not yet implemented)
    when the name is :**
      delegates to :__pow__ (PENDING: Not yet implemented)
    when the name is :%
      delegates to :__mod__ (PENDING: Not yet implemented)
    when the name is :+
      delegates to :__add__ (PENDING: Not yet implemented)
    when the name is :-
      delegates to :__sub__ (PENDING: Not yet implemented)
    when the name is :*
      delegates to :__mul__ (PENDING: Not yet implemented)
    when the name is :|
      delegates to :__or__ (PENDING: Not yet implemented)
    the Python object has the attribute of the given name
      the value of the attribute is callable
        the value of the attribute is not a type object
          initialize attribute is mapped โ€ o __initialize__ in Ruby side
          returns the result of calling the Python object from the attribute
        the value of the attribute is a type object
          returns the Python object from the attribute
      the value of the attribute is not callable
        returns the Python object from the attribute
  #<
    example at ./spec/pycall/pyobject_wrapper_spec.rb:130 (PENDING: Not yet implemented)
  #==
    example at ./spec/pycall/pyobject_wrapper_spec.rb:122 (PENDING: Not yet implemented)
  #!=
    example at ./spec/pycall/pyobject_wrapper_spec.rb:126 (PENDING: Not yet implemented)
  #to_s
    returns a string generated by global function str
  #[]=
    when the given index is an Enumerable that is created by Range#step
      should eq [1, 100, 3, 200, 5, 300, 7, 8, 9, 10]
    when the given index is a Range
      should eq [1, 100, 200, 300, 9, 10]
  #to_f
    delegates to builtins.float (PENDING: Not yet implemented)
  #dup
    returns a duped instance with a copy of the Python object
  #call
    when the receiver is not callable
      should raise TypeError
    when the receiver is callable
      should not raise Exception
  #kind_of?
    should be a kind of <class 'tuple'>
  #>
    example at ./spec/pycall/pyobject_wrapper_spec.rb:138 (PENDING: Not yet implemented)
  #[]
    when the given index is a Range
      should eq [2, 3, 4, 5, 6, 7, 8]
    when the given index is an Enumerable that is created by Range#step
      should eq [9, 7, 5]
  #<=
    example at ./spec/pycall/pyobject_wrapper_spec.rb:134 (PENDING: Not yet implemented)
  #to_i
    delegates to builtins.int (PENDING: Not yet implemented)
  #coerce
    should be a kind of Object
  #>=
    example at ./spec/pycall/pyobject_wrapper_spec.rb:142 (PENDING: Not yet implemented)

PyCall
  .exec
    without globals
      with locals of a Hash
        example at ./spec/pycall/eval_spec.rb:64 (PENDING: Not yet implemented)
      without locals
        raises an exception occurred in Python side
        should be a kind of Class
  .eval
    without globals
      without locals
        evaluates immediate values correctly
        raises an exception occurred in Python side
      with locals of a Hash
        example at ./spec/pycall/eval_spec.rb:28 (PENDING: Not yet implemented)

PyCall
  .wrap_ruby_object
    returns a PyCall::PyRubyPtr
    guards the ruby object by GC while the wrapper python object is alive (PENDING: Temporarily skipped with xit)
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pyobject_wrapper.rb:43: [BUG] Segmentation fault at 0x0000000050afbab0
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

-- Control frame information -----------------------------------------------
c:0032 p:---- s:0166 e:000165 CFUNC  :test_ruby_object_attr
c:0031 p:0102 s:0161 e:000160 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pyobject_wrapper.rb:43
c:0030 p:0056 s:0153 e:000151 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/spec/pycall/ruby_object_spec.rb:19 [FINISH]
c:0029 p:---- s:0147 e:000146 CFUNC  :instance_exec
c:0028 p:0017 s:0142 e:000141 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:254
c:0027 p:0003 s:0137 e:000136 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:500
c:0026 p:0003 s:0134 e:000133 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:457
c:0025 p:0003 s:0131 e:000130 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/hooks.rb:466
c:0024 p:0026 s:0128 e:000127 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/hooks.rb:604
c:0023 p:0116 s:0121 e:000120 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/hooks.rb:466
c:0022 p:0013 s:0114 e:000113 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:457
c:0021 p:0024 s:0109 e:000108 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:500
c:0020 p:0116 s:0104 e:000103 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:251
c:0019 p:0049 s:0097 e:000096 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:628 [FINISH]
c:0018 p:---- s:0091 e:000090 CFUNC  :map
c:0017 p:0015 s:0087 e:000086 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:624
c:0016 p:0067 s:0082 e:000081 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:590
c:0015 p:0008 s:0073 e:000072 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:591 [FINISH]
c:0014 p:---- s:0069 e:000068 CFUNC  :map
c:0013 p:0084 s:0065 e:000064 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:591
c:0012 p:0009 s:0056 e:000055 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:118 [FINISH]
c:0011 p:---- s:0052 e:000051 CFUNC  :map
c:0010 p:0034 s:0048 e:000047 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:118
c:0009 p:0021 s:0045 e:000044 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/configuration.rb:1926
c:0008 p:0008 s:0041 e:000040 BLOCK  /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:113
c:0007 p:0010 s:0037 e:000036 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/reporter.rb:79
c:0006 p:0022 s:0032 e:000031 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:112
c:0005 p:0019 s:0025 e:000024 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:87
c:0004 p:0072 s:0019 e:000018 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:71
c:0003 p:0020 s:0011 e:000010 METHOD /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:45
c:0002 p:0021 s:0006 e:000005 EVAL   /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/exe/rspec:4 [FINISH]
c:0001 p:0000 s:0003 E:000ba0 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/exe/rspec:4:in `<main>'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:45:in `invoke'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:71:in `run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:87:in `run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:112:in `run_specs'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/reporter.rb:79:in `report'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:113:in `block in run_specs'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/configuration.rb:1926:in `with_suite_hooks'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:118:in `block (2 levels) in run_specs'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:118:in `map'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb:118:in `block (3 levels) in run_specs'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:591:in `run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:591:in `map'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:591:in `block in run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:590:in `run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:624:in `run_examples'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:624:in `map'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb:628:in `block in run_examples'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:251:in `run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:500:in `with_around_and_singleton_context_hooks'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:457:in `with_around_example_hooks'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/hooks.rb:466:in `run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/hooks.rb:604:in `run_around_example_hooks_for'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/hooks.rb:466:in `block in run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:457:in `block in with_around_example_hooks'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:500:in `block in with_around_and_singleton_context_hooks'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:254:in `block in run'
/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb:254:in `instance_exec'
/home/mrkn/src/github.com/mrkn/pycall.rb/spec/pycall/ruby_object_spec.rb:19:in `block (3 levels) in <top (required)>'
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pyobject_wrapper.rb:43:in `method_missing'
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pyobject_wrapper.rb:43:in `test_ruby_object_attr'

-- Machine register context ------------------------------------------------
 RIP: 0x00007fb7ab8f64f0 RBP: 0x00007ffd616a612c RSP: 0x00007ffd616a5cf8
 RAX: 0x0000000050afbab0 RBX: 0x00007ffd616a5da0 RCX: 0x0000000000000000
 RDX: 0x0000000000000000 RDI: 0x00007ffd616a5d20 RSI: 0x0000000000000001
  R8: 0x0000000000000001  R9: 0x000055fd4fce21a0 R10: 0x000000000000009f
 R11: 0x0000000000000000 R12: 0x000055fd50b044d0 R13: 0x00007ffd616a5da0
 R14: 0x000055fd4fce2038 R15: 0x0000000000000000 EFL: 0x0000000000010202

-- C level backtrace information -------------------------------------------
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab94e685) [0x7fb7ab94e685]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab94e8bc) [0x7fb7ab94e8bc]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab818884) [0x7fb7ab818884]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab8de6c2) [0x7fb7ab8de6c2]
/lib/x86_64-linux-gnu/libc.so.6(0x7fb7ab3def20) [0x7fb7ab3def20]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_string_value+0x20) [0x7fb7ab8f64f0]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_string_value_cstr+0x9) [0x7fb7ab8f9599]
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so(PyRuby_getattro+0x5a) [0x7fb7a85cf08a]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_thread_call_with_gvl+0xff) [0x7fb7ab910b3f]
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so(0xb2d7) [0x7fb7a85cf2d7]
/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0(_PyEval_EvalFrameDefault+0x1b13) [0x7fb7a8f9e0e3]
/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0(0x7fb7a8f9b9fa) [0x7fb7a8f9b9fa]
/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0(PyEval_EvalCodeEx+0x3e) [0x7fb7a8f9c05e]
/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0(0x7fb7a8ed6465) [0x7fb7a8ed6465]
/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0(PyObject_Call+0x48) [0x7fb7a8ea3178]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab9108bb) [0x7fb7ab9108bb]
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so(pyobject_call_without_gvl+0x3a) [0x7fb7a85ca60a]
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so(0x8ef2) [0x7fb7a85ccef2]
/home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so(0x967a) [0x7fb7a85cd67a]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab936fa9) [0x7fb7ab936fa9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab9454d3) [0x7fb7ab9454d3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab94596a) [0x7fb7ab94596a]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab9454d3) [0x7fb7ab9454d3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab93c370) [0x7fb7ab93c370]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab941744) [0x7fb7ab941744]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab948e30) [0x7fb7ab948e30]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab936fa9) [0x7fb7ab936fa9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab93b965) [0x7fb7ab93b965]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab941744) [0x7fb7ab941744]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_yield+0x4cc) [0x7fb7ab94880c]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab7baf9c) [0x7fb7ab7baf9c]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab936fa9) [0x7fb7ab936fa9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab93b965) [0x7fb7ab93b965]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab941744) [0x7fb7ab941744]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_yield+0x4cc) [0x7fb7ab94880c]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab7baf9c) [0x7fb7ab7baf9c]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab936fa9) [0x7fb7ab936fa9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab93b965) [0x7fb7ab93b965]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab941744) [0x7fb7ab941744]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(rb_yield+0x4cc) [0x7fb7ab94880c]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab7baf9c) [0x7fb7ab7baf9c]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab936fa9) [0x7fb7ab936fa9]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab9454d3) [0x7fb7ab9454d3]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab93b965) [0x7fb7ab93b965]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab941744) [0x7fb7ab941744]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(0x7fb7ab81c0c4) [0x7fb7ab81c0c4]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(ruby_exec_node+0x1d) [0x7fb7ab81df4d]
/usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5(ruby_run_node+0x1e) [0x7fb7ab82042e]
/usr/bin/ruby2.5(0x55fd4e9438cb) [0x55fd4e9438cb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7fb7ab3c1b97]
/usr/bin/ruby2.5(_start+0x2a) [0x55fd4e9438fa]

-- Other runtime information -----------------------------------------------

* Loaded script: /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/exe/rspec

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
    5 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
    6 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/rbconfig.rb
    7 /usr/lib/ruby/2.5.0/rubygems/compatibility.rb
    8 /usr/lib/ruby/2.5.0/rubygems/defaults.rb
    9 /usr/lib/ruby/2.5.0/rubygems/deprecate.rb
   10 /usr/lib/ruby/2.5.0/rubygems/errors.rb
   11 /usr/lib/ruby/2.5.0/rubygems/version.rb
   12 /usr/lib/ruby/2.5.0/rubygems/requirement.rb
   13 /usr/lib/ruby/2.5.0/rubygems/platform.rb
   14 /usr/lib/ruby/2.5.0/rubygems/basic_specification.rb
   15 /usr/lib/ruby/2.5.0/rubygems/stub_specification.rb
   16 /usr/lib/ruby/2.5.0/rubygems/util/list.rb
   17 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
   18 /usr/lib/ruby/2.5.0/uri/rfc2396_parser.rb
   19 /usr/lib/ruby/2.5.0/uri/rfc3986_parser.rb
   20 /usr/lib/ruby/2.5.0/uri/common.rb
   21 /usr/lib/ruby/2.5.0/uri/generic.rb
   22 /usr/lib/ruby/2.5.0/uri/ftp.rb
   23 /usr/lib/ruby/2.5.0/uri/http.rb
   24 /usr/lib/ruby/2.5.0/uri/https.rb
   25 /usr/lib/ruby/2.5.0/uri/ldap.rb
   26 /usr/lib/ruby/2.5.0/uri/ldaps.rb
   27 /usr/lib/ruby/2.5.0/uri/mailto.rb
   28 /usr/lib/ruby/2.5.0/uri.rb
   29 /usr/lib/ruby/2.5.0/rubygems/specification.rb
   30 /usr/lib/ruby/2.5.0/rubygems/exceptions.rb
   31 /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb
   32 /usr/lib/ruby/2.5.0/rubygems/dependency.rb
   33 /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_gem.rb
   34 /usr/lib/ruby/2.5.0/monitor.rb
   35 /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb
   36 /usr/lib/ruby/2.5.0/rubygems.rb
   37 /usr/lib/ruby/2.5.0/rubygems/path_support.rb
   38 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/version.rb
   39 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/compatibility_guard.rb
   40 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
   41 /usr/lib/ruby/2.5.0/pathname.rb
   42 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/constants.rb
   43 /usr/lib/ruby/2.5.0/rubygems/util.rb
   44 /usr/lib/ruby/2.5.0/rubygems/user_interaction.rb
   45 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
   46 /usr/lib/ruby/2.5.0/rubygems/config_file.rb
   47 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/rubygems_integration.rb
   48 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/current_ruby.rb
   49 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/shared_helpers.rb
   50 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/fileutils/lib/fileutils.rb
   51 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendored_fileutils.rb
   52 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/errors.rb
   53 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/environment_preserver.rb
   54 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/plugin/api.rb
   55 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/plugin.rb
   56 /usr/lib/ruby/2.5.0/rubygems/source/git.rb
   57 /usr/lib/ruby/2.5.0/rubygems/source/installed.rb
   58 /usr/lib/ruby/2.5.0/rubygems/source/specific_file.rb
   59 /usr/lib/ruby/2.5.0/rubygems/source/local.rb
   60 /usr/lib/ruby/2.5.0/rubygems/source/lock.rb
   61 /usr/lib/ruby/2.5.0/rubygems/source/vendor.rb
   62 /usr/lib/ruby/2.5.0/rubygems/source.rb
   63 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/gem_helpers.rb
   64 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/match_platform.rb
   65 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/rubygems_ext.rb
   66 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/build_metadata.rb
   67 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler.rb
   68 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/settings.rb
   69 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/yaml_serializer.rb
   70 /usr/lib/ruby/2.5.0/rubygems/ext/builder.rb
   71 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/feature_flag.rb
   72 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/source.rb
   73 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/source/path.rb
   74 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/source/git.rb
   75 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/source/rubygems.rb
   76 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/lockfile_parser.rb
   77 /usr/lib/ruby/2.5.0/set.rb
   78 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/definition.rb
   79 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/dependency.rb
   80 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/ruby_dsl.rb
   81 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/dsl.rb
   82 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/source_list.rb
   83 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/source/metadata.rb
   84 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/version.rb
   85 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/index.rb
   86 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/source/gemspec.rb
   87 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/lazy_specification.rb
   88 /usr/lib/ruby/2.5.0/tsort.rb
   89 /usr/lib/ruby/2.5.0/forwardable/impl.rb
   90 /usr/lib/ruby/2.5.0/forwardable.rb
   91 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/spec_set.rb
   92 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/ui.rb
   93 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/ui/silent.rb
   94 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/ui/rg_proxy.rb
   95 /usr/lib/ruby/2.5.0/rubygems/text.rb
   96 /usr/lib/ruby/2.5.0/rubygems/util/licenses.rb
   97 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/remote_specification.rb
   98 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb
   99 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb
  100 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb
  101 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb
  102 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb
  103 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
  104 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
  105 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
  106 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
  107 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
  108 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
  109 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
  110 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
  111 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb
  112 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/state.rb
  113 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb
  114 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb
  115 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb
  116 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb
  117 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb
  118 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendor/molinillo/lib/molinillo.rb
  119 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/vendored_molinillo.rb
  120 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/resolver/spec_group.rb
  121 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/resolver.rb
  122 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/gem_version_promoter.rb
  123 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/runtime.rb
  124 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/dep_proxy.rb
  125 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/stub_specification.rb
  126 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/endpoint_specification.rb
  127 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/ruby_version.rb
  128 /usr/lib/ruby/2.5.0/rubygems/bundler_version_finder.rb
  129 /var/lib/gems/2.5.0/gems/bundler-1.16.2/lib/bundler/setup.rb
  130 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/version.rb
  131 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/comparable_version.rb
  132 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/ruby_features.rb
  133 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support.rb
  134 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/caller_filter.rb
  135 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/version.rb
  136 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/warnings.rb
  137 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/warnings.rb
  138 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/set.rb
  139 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/flat_map.rb
  140 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/filter_manager.rb
  141 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/dsl.rb
  142 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/console_codes.rb
  143 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/snippet_extractor.rb
  144 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/syntax_highlighter.rb
  145 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/encoded_string.rb
  146 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/exception_presenter.rb
  147 /usr/lib/ruby/2.5.0/shellwords.rb
  148 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/shell_escape.rb
  149 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/helpers.rb
  150 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/notifications.rb
  151 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/reporter.rb
  152 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/hooks.rb
  153 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/reentrant_mutex.rb
  154 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/memoized_helpers.rb
  155 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/metadata.rb
  156 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/metadata_filter.rb
  157 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/pending.rb
  158 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/directory_maker.rb
  159 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters.rb
  160 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/ordering.rb
  161 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/world.rb
  162 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/backtrace_formatter.rb
  163 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/ruby_project.rb
  164 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/deprecation_formatter.rb
  165 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/output_wrapper.rb
  166 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/configuration.rb
  167 /usr/lib/ruby/2.5.0/optparse.rb
  168 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/option_parser.rb
  169 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
  170 /usr/lib/ruby/2.5.0/cgi/util.rb
  171 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
  172 /usr/lib/ruby/2.5.0/erb.rb
  173 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/configuration_options.rb
  174 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/runner.rb
  175 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/invocations.rb
  176 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example.rb
  177 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/shared_example_group.rb
  178 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/recursive_const_methods.rb
  179 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/example_group.rb
  180 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core.rb
  181 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/base_formatter.rb
  182 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/base_text_formatter.rb
  183 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/formatters/documentation_formatter.rb
  184 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/error.rb
  185 /usr/lib/x86_64-linux-gnu/ruby/2.5.0/fiddle.so
  186 /usr/lib/ruby/2.5.0/fiddle/function.rb
  187 /usr/lib/ruby/2.5.0/fiddle/closure.rb
  188 /usr/lib/ruby/2.5.0/fiddle.rb
  189 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/libpython/finder.rb
  190 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/libpython.rb
  191 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pyerror.rb
  192 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/wrapper_object_cache.rb
  193 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pyobject_wrapper.rb
  194 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pytypeobject_wrapper.rb
  195 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/init.rb
  196 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.rb
  197 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so
  198 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/dict.rb
  199 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/list.rb
  200 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/slice.rb
  201 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/import.rb
  202 /usr/lib/ruby/2.5.0/prettyprint.rb
  203 /usr/lib/ruby/2.5.0/pp.rb
  204 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/pretty_print.rb
  205 /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/spec_helper.so
  206 /usr/lib/ruby/2.5.0/open3.rb
  207 /home/mrkn/src/github.com/mrkn/pycall.rb/spec/support/execute_ruby.rb
  208 /home/mrkn/src/github.com/mrkn/pycall.rb/spec/support/shared_contexts.rb
  209 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/shared_context.rb
  210 /home/mrkn/src/github.com/mrkn/pycall.rb/spec/spec_helper.rb
  211 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/instance_method_stasher.rb
  212 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/method_double.rb
  213 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/matcher_definition.rb
  214 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/argument_matchers.rb
  215 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/object_reference.rb
  216 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/example_methods.rb
  217 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/proxy.rb
  218 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/test_double.rb
  219 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/fuzzy_matcher.rb
  220 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/argument_list_matcher.rb
  221 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/message_expectation.rb
  222 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/order_group.rb
  223 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/object_formatter.rb
  224 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/error_generator.rb
  225 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/space.rb
  226 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/mutate_const.rb
  227 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/targets.rb
  228 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/syntax.rb
  229 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/configuration.rb
  230 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib/rspec/support/method_signature_verifier.rb
  231 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/verifying_message_expectation.rb
  232 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/method_reference.rb
  233 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/verifying_proxy.rb
  234 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/verifying_double.rb
  235 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/version.rb
  236 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks.rb
  237 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib/rspec/core/mocking_adapters/rspec.rb
  238 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-mocks-3.7.0/lib/rspec/mocks/marshal_extension.rb
  239 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/english_phrasing.rb
  240 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/composable.rb
  241 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/base_matcher.rb
  242 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in.rb
  243 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/generated_descriptions.rb
  244 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/dsl.rb
  245 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/matcher_delegator.rb
  246 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/aliased_matcher.rb
  247 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/expecteds_for_multiple_diffs.rb
  248 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers.rb
  249 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/expectations/expectation_target.rb
  250 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/expectations/syntax.rb
  251 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/expectations/configuration.rb
  252 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/expectations/fail_with.rb
  253 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/expectations/handler.rb
  254 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/expectations/version.rb
  255 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/expectations.rb
  256 /usr/lib/ruby/2.5.0/fileutils.rb
  257 /usr/lib/ruby/2.5.0/tmpdir.rb
  258 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/change.rb
  259 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/eq.rb
  260 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/equal.rb
  261 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/be_kind_of.rb
  262 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/yield.rb
  263 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/raise_error.rb
  264 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/be.rb
  265 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/include.rb
  266 /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-expectations-3.7.0/lib/rspec/matchers/built_in/match.rb

* Process memory map:

55fd4e943000-55fd4e944000 r-xp 00000000 00:19 536255                     /usr/bin/ruby2.5
55fd4eb43000-55fd4eb44000 r--p 00000000 00:19 536255                     /usr/bin/ruby2.5
55fd4eb44000-55fd4eb45000 rw-p 00001000 00:19 536255                     /usr/bin/ruby2.5
55fd4fce1000-55fd51256000 rw-p 00000000 00:00 0                          [heap]
7fb754000000-7fb754021000 rw-p 00000000 00:00 0 
7fb754021000-7fb758000000 ---p 00000000 00:00 0 
7fb75c000000-7fb75c021000 rw-p 00000000 00:00 0 
7fb75c021000-7fb760000000 ---p 00000000 00:00 0 
7fb764000000-7fb764021000 rw-p 00000000 00:00 0 
7fb764021000-7fb768000000 ---p 00000000 00:00 0 
7fb768283000-7fb768716000 r--s 00000000 00:19 522402                     /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
7fb768716000-7fb76873d000 r--s 00000000 00:19 9861                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so
7fb76873d000-7fb76892d000 r--s 00000000 00:19 445346                     /lib/x86_64-linux-gnu/libc-2.27.so
7fb76892d000-7fb768bce000 r--s 00000000 00:19 537387                     /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.1
7fb768bce000-7fb768be5000 r-xp 00000000 00:19 454061                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7fb768be5000-7fb768de4000 ---p 00017000 00:19 454061                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7fb768de4000-7fb768de5000 r--p 00016000 00:19 454061                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7fb768de5000-7fb768de6000 rw-p 00017000 00:19 454061                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7fb768de6000-7fb768de7000 ---p 00000000 00:00 0 
7fb768de7000-7fb768fe8000 rw-p 00000000 00:00 0 
7fb768fe8000-7fb768fe9000 ---p 00000000 00:00 0 
7fb768fe9000-7fb7691ea000 rw-p 00000000 00:00 0 
7fb7691ea000-7fb7691eb000 ---p 00000000 00:00 0 
7fb7691eb000-7fb76946c000 rw-p 00000000 00:00 0 
7fb76946c000-7fb769531000 r-xp 00000000 00:19 787811                     /usr/local/lib/python3.6/dist-packages/numpy/random/mtrand.cpython-36m-x86_64-linux-gnu.so
7fb769531000-7fb769731000 ---p 000c5000 00:19 787811                     /usr/local/lib/python3.6/dist-packages/numpy/random/mtrand.cpython-36m-x86_64-linux-gnu.so
7fb769731000-7fb769756000 rw-p 000c5000 00:19 787811                     /usr/local/lib/python3.6/dist-packages/numpy/random/mtrand.cpython-36m-x86_64-linux-gnu.so
7fb769756000-7fb769798000 rw-p 00000000 00:00 0 
7fb769798000-7fb7697a1000 r-xp 00000000 00:19 787690                     /usr/local/lib/python3.6/dist-packages/numpy/fft/fftpack_lite.cpython-36m-x86_64-linux-gnu.so
7fb7697a1000-7fb7699a0000 ---p 00009000 00:19 787690                     /usr/local/lib/python3.6/dist-packages/numpy/fft/fftpack_lite.cpython-36m-x86_64-linux-gnu.so
7fb7699a0000-7fb7699a1000 rw-p 00008000 00:19 787690                     /usr/local/lib/python3.6/dist-packages/numpy/fft/fftpack_lite.cpython-36m-x86_64-linux-gnu.so
7fb7699a1000-7fb769a21000 rw-p 00000000 00:00 0 
7fb769a21000-7fb769a4a000 r-xp 00000000 00:19 787666                     /usr/local/lib/python3.6/dist-packages/numpy/linalg/_umath_linalg.cpython-36m-x86_64-linux-gnu.so
7fb769a4a000-7fb769c49000 ---p 00029000 00:19 787666                     /usr/local/lib/python3.6/dist-packages/numpy/linalg/_umath_linalg.cpython-36m-x86_64-linux-gnu.so
7fb769c49000-7fb769c4e000 rw-p 00028000 00:19 787666                     /usr/local/lib/python3.6/dist-packages/numpy/linalg/_umath_linalg.cpython-36m-x86_64-linux-gnu.so
7fb769c4e000-7fb769c52000 r-xp 00000000 00:19 787665                     /usr/local/lib/python3.6/dist-packages/numpy/linalg/lapack_lite.cpython-36m-x86_64-linux-gnu.so
7fb769c52000-7fb769e52000 ---p 00004000 00:19 787665                     /usr/local/lib/python3.6/dist-packages/numpy/linalg/lapack_lite.cpython-36m-x86_64-linux-gnu.so
7fb769e52000-7fb769e55000 rw-p 00004000 00:19 787665                     /usr/local/lib/python3.6/dist-packages/numpy/linalg/lapack_lite.cpython-36m-x86_64-linux-gnu.so
7fb769e55000-7fb769f66000 rw-p 00000000 00:00 0 
7fb769f66000-7fb76a1b3000 r-xp 00000000 00:19 776670                     /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fb76a1b3000-7fb76a3b3000 ---p 0024d000 00:19 776670                     /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fb76a3b3000-7fb76a3d1000 r--p 0024d000 00:19 776670                     /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fb76a3d1000-7fb76a3db000 rw-p 0026b000 00:19 776670                     /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fb76a3db000-7fb76a3de000 rw-p 00000000 00:00 0 
7fb76a3de000-7fb76a3e4000 r-xp 00000000 00:19 446012                     /usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so
7fb76a3e4000-7fb76a5e3000 ---p 00006000 00:19 446012                     /usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so
7fb76a5e3000-7fb76a5e4000 r--p 00005000 00:19 446012                     /usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so
7fb76a5e4000-7fb76a5e5000 rw-p 00006000 00:19 446012                     /usr/lib/python3.6/lib-dynload/_hashlib.cpython-36m-x86_64-linux-gnu.so
7fb76a5e5000-7fb76a625000 rw-p 00000000 00:00 0 
7fb76a625000-7fb76a649000 r-xp 00000000 00:19 447145                     /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7fb76a649000-7fb76a849000 ---p 00024000 00:19 447145                     /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7fb76a849000-7fb76a84a000 r--p 00024000 00:19 447145                     /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7fb76a84a000-7fb76a84b000 rw-p 00025000 00:19 447145                     /lib/x86_64-linux-gnu/liblzma.so.5.2.2
7fb76a84b000-7fb76a852000 r-xp 00000000 00:19 460694                     /usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so
7fb76a852000-7fb76aa51000 ---p 00007000 00:19 460694                     /usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so
7fb76aa51000-7fb76aa52000 r--p 00006000 00:19 460694                     /usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so
7fb76aa52000-7fb76aa54000 rw-p 00007000 00:19 460694                     /usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so
7fb76aa54000-7fb76aa63000 r-xp 00000000 00:19 453977                     /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fb76aa63000-7fb76ac62000 ---p 0000f000 00:19 453977                     /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fb76ac62000-7fb76ac63000 r--p 0000e000 00:19 453977                     /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fb76ac63000-7fb76ac64000 rw-p 0000f000 00:19 453977                     /lib/x86_64-linux-gnu/libbz2.so.1.0.4
7fb76ac64000-7fb76ac68000 r-xp 00000000 00:19 460677                     /usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so
7fb76ac68000-7fb76ae67000 ---p 00004000 00:19 460677                     /usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so
7fb76ae67000-7fb76ae68000 r--p 00003000 00:19 460677                     /usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so
7fb76ae68000-7fb76ae69000 rw-p 00004000 00:19 460677                     /usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so
7fb76ae69000-7fb76b069000 rw-p 00000000 00:00 0 
7fb76b069000-7fb76b084000 r-xp 00000000 00:19 460686                     /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
7fb76b084000-7fb76b283000 ---p 0001b000 00:19 460686                     /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
7fb76b283000-7fb76b284000 r--p 0001a000 00:19 460686                     /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
7fb76b284000-7fb76b288000 rw-p 0001b000 00:19 460686                     /usr/lib/python3.6/lib-dynload/_ctypes.cpython-36m-x86_64-linux-gnu.so
7fb76b288000-7fb76b308000 rw-p 00000000 00:00 0 
7fb76b308000-7fb76b49a000 r-xp 00000000 00:19 787846                     /usr/local/lib/python3.6/dist-packages/numpy/core/umath.cpython-36m-x86_64-linux-gnu.so
7fb76b49a000-7fb76b69a000 ---p 00192000 00:19 787846                     /usr/local/lib/python3.6/dist-packages/numpy/core/umath.cpython-36m-x86_64-linux-gnu.so
7fb76b69a000-7fb76b6a0000 rw-p 00192000 00:19 787846                     /usr/local/lib/python3.6/dist-packages/numpy/core/umath.cpython-36m-x86_64-linux-gnu.so
7fb76b6a0000-7fb76b6a2000 rw-p 00000000 00:00 0 
7fb76b6a2000-7fb76d6a2000 rw-p 00000000 00:00 0 
7fb76d6a2000-7fb76f6a2000 rw-p 00000000 00:00 0 
7fb76f6a2000-7fb7716a2000 rw-p 00000000 00:00 0 
7fb7716a2000-7fb7716a3000 ---p 00000000 00:00 0 
7fb7716a3000-7fb771ea3000 rw-p 00000000 00:00 0 
7fb771ea3000-7fb771ea4000 ---p 00000000 00:00 0 
7fb771ea4000-7fb7726a4000 rw-p 00000000 00:00 0 
7fb7726a4000-7fb7746a4000 rw-p 00000000 00:00 0 
7fb7746a4000-7fb7766a4000 rw-p 00000000 00:00 0 
7fb7766a4000-7fb7786a4000 rw-p 00000000 00:00 0 
7fb7786a4000-7fb7786a5000 ---p 00000000 00:00 0 
7fb7786a5000-7fb778ea5000 rw-p 00000000 00:00 0 
7fb778ea5000-7fb778ea6000 ---p 00000000 00:00 0 
7fb778ea6000-7fb7796a6000 rw-p 00000000 00:00 0 
7fb7796a6000-7fb7796a7000 ---p 00000000 00:00 0 
7fb7796a7000-7fb779ea7000 rw-p 00000000 00:00 0 
7fb779ea7000-7fb77bea7000 rw-p 00000000 00:00 0 
7fb77bea7000-7fb77dea7000 rw-p 00000000 00:00 0 
7fb77dea7000-7fb77dea8000 ---p 00000000 00:00 0 
7fb77dea8000-7fb77e6a8000 rw-p 00000000 00:00 0 
7fb77e6a8000-7fb77e6a9000 ---p 00000000 00:00 0 
7fb77e6a9000-7fb77eea9000 rw-p 00000000 00:00 0 
7fb77eea9000-7fb780ea9000 rw-p 00000000 00:00 0 
7fb780ea9000-7fb780eaa000 ---p 00000000 00:00 0 
7fb780eaa000-7fb7816aa000 rw-p 00000000 00:00 0 
7fb7816aa000-7fb7836aa000 rw-p 00000000 00:00 0 
7fb7836aa000-7fb7836ab000 ---p 00000000 00:00 0 
7fb7836ab000-7fb783eab000 rw-p 00000000 00:00 0 
7fb783eab000-7fb785eab000 rw-p 00000000 00:00 0 
7fb785eab000-7fb787eab000 rw-p 00000000 00:00 0 
7fb787eab000-7fb787eac000 ---p 00000000 00:00 0 
7fb787eac000-7fb7886ac000 rw-p 00000000 00:00 0 
7fb7886ac000-7fb78a6ac000 rw-p 00000000 00:00 0 
7fb78a6ac000-7fb78a6ad000 ---p 00000000 00:00 0 
7fb78a6ad000-7fb78aead000 rw-p 00000000 00:00 0 
7fb78aead000-7fb78cead000 rw-p 00000000 00:00 0 
7fb78cead000-7fb78ceae000 ---p 00000000 00:00 0 
7fb78ceae000-7fb78d6ae000 rw-p 00000000 00:00 0 
7fb78d6ae000-7fb78f6ae000 rw-p 00000000 00:00 0 
7fb78f6ae000-7fb78f6af000 ---p 00000000 00:00 0 
7fb78f6af000-7fb78feaf000 rw-p 00000000 00:00 0 
7fb78feaf000-7fb78feb0000 ---p 00000000 00:00 0 
7fb78feb0000-7fb7906b0000 rw-p 00000000 00:00 0 
7fb7906b0000-7fb7926b0000 rw-p 00000000 00:00 0 
7fb7926b0000-7fb7926b1000 ---p 00000000 00:00 0 
7fb7926b1000-7fb792eb1000 rw-p 00000000 00:00 0 
7fb792eb1000-7fb794eb1000 rw-p 00000000 00:00 0 
7fb794eb1000-7fb796eb1000 rw-p 00000000 00:00 0 
7fb796eb1000-7fb7a0eb1000 rw-p 00000000 00:00 0 
7fb7a0eb1000-7fb7a0eb2000 ---p 00000000 00:00 0 
7fb7a0eb2000-7fb7a16b2000 rw-p 00000000 00:00 0 
7fb7a16b2000-7fb7a16b3000 ---p 00000000 00:00 0 
7fb7a16b3000-7fb7a1eb3000 rw-p 00000000 00:00 0 
7fb7a1eb3000-7fb7a1eb4000 ---p 00000000 00:00 0 
7fb7a1eb4000-7fb7a26b4000 rw-p 00000000 00:00 0 
7fb7a26b4000-7fb7a26b5000 ---p 00000000 00:00 0 
7fb7a26b5000-7fb7a2eb5000 rw-p 00000000 00:00 0 
7fb7a2eb5000-7fb7a2eb6000 ---p 00000000 00:00 0 
7fb7a2eb6000-7fb7a36b6000 rw-p 00000000 00:00 0 
7fb7a36b6000-7fb7a36b7000 ---p 00000000 00:00 0 
7fb7a36b7000-7fb7a3eb7000 rw-p 00000000 00:00 0 
7fb7a3eb7000-7fb7a3eb8000 ---p 00000000 00:00 0 
7fb7a3eb8000-7fb7a46b8000 rw-p 00000000 00:00 0 
7fb7a46b8000-7fb7a46b9000 ---p 00000000 00:00 0 
7fb7a46b9000-7fb7a4eb9000 rw-p 00000000 00:00 0 
7fb7a4eb9000-7fb7a4fa9000 r-xp 00000000 00:19 787789                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fb7a4fa9000-7fb7a51a8000 ---p 000f0000 00:19 787789                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fb7a51a8000-7fb7a51aa000 rw-p 000ef000 00:19 787789                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fb7a51aa000-7fb7a51ab000 rw-p 00000000 00:00 0 
7fb7a51ab000-7fb7a51b3000 rw-p 000f2000 00:19 787789                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libgfortran-ed201abd.so.3.0.0
7fb7a51b3000-7fb7a74c7000 r-xp 00000000 00:19 787788                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fb7a74c7000-7fb7a76c6000 ---p 02314000 00:19 787788                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fb7a76c6000-7fb7a76e5000 rw-p 02313000 00:19 787788                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fb7a76e5000-7fb7a7748000 rw-p 00000000 00:00 0 
7fb7a7748000-7fb7a77de000 rw-p 02425000 00:19 787788                     /usr/local/lib/python3.6/dist-packages/numpy/.libs/libopenblasp-r0-39a31c03.2.18.so
7fb7a77de000-7fb7a79b6000 r-xp 00000000 00:19 787832                     /usr/local/lib/python3.6/dist-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
7fb7a79b6000-7fb7a7bb6000 ---p 001d8000 00:19 787832                     /usr/local/lib/python3.6/dist-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
7fb7a7bb6000-7fb7a7bcf000 rw-p 001d8000 00:19 787832                     /usr/local/lib/python3.6/dist-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
7fb7a7bcf000-7fb7a7be7000 rw-p 00000000 00:00 0 
7fb7a7be7000-7fb7a7bed000 rw-p 001f2000 00:19 787832                     /usr/local/lib/python3.6/dist-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
7fb7a7bed000-7fb7a7d2e000 rw-p 00000000 00:00 0 
7fb7a7d2e000-7fb7a7d65000 r-xp 00000000 00:19 515258                     /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fb7a7d65000-7fb7a7f64000 ---p 00037000 00:19 515258                     /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fb7a7f64000-7fb7a7f65000 r--p 00036000 00:19 515258                     /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fb7a7f65000-7fb7a7f66000 rw-p 00037000 00:19 515258                     /usr/lib/x86_64-linux-gnu/libmpdec.so.2.4.2
7fb7a7f79000-7fb7a7f98000 r-xp 00000000 00:19 460691                     /usr/lib/python3.6/lib-dynload/_decimal.cpython-36m-x86_64-linux-gnu.so
7fb7a7f98000-7fb7a8197000 ---p 0001f000 00:19 460691                     /usr/lib/python3.6/lib-dynload/_decimal.cpython-36m-x86_64-linux-gnu.so
7fb7a8197000-7fb7a8198000 r--p 0001e000 00:19 460691                     /usr/lib/python3.6/lib-dynload/_decimal.cpython-36m-x86_64-linux-gnu.so
7fb7a8198000-7fb7a81a1000 rw-p 0001f000 00:19 460691                     /usr/lib/python3.6/lib-dynload/_decimal.cpython-36m-x86_64-linux-gnu.so
7fb7a81a1000-7fb7a8202000 rw-p 00000000 00:00 0 
7fb7a8202000-7fb7a8203000 r-xp 00000000 00:19 9848                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/spec_helper.so
7fb7a8203000-7fb7a8402000 ---p 00001000 00:19 9848                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/spec_helper.so
7fb7a8402000-7fb7a8403000 r--p 00000000 00:19 9848                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/spec_helper.so
7fb7a8403000-7fb7a8404000 rw-p 00001000 00:19 9848                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall/spec_helper.so
7fb7a8404000-7fb7a85c4000 rw-p 00000000 00:00 0 
7fb7a85c4000-7fb7a85d3000 r-xp 00000000 00:19 9861                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so
7fb7a85d3000-7fb7a87d3000 ---p 0000f000 00:19 9861                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so
7fb7a87d3000-7fb7a87d4000 r--p 0000f000 00:19 9861                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so
7fb7a87d4000-7fb7a87d5000 rw-p 00010000 00:19 9861                       /home/mrkn/src/github.com/mrkn/pycall.rb/lib/pycall.so
7fb7a87d5000-7fb7a87d7000 r-xp 00000000 00:19 445365                     /lib/x86_64-linux-gnu/libutil-2.27.so
7fb7a87d7000-7fb7a89d6000 ---p 00002000 00:19 445365                     /lib/x86_64-linux-gnu/libutil-2.27.so
7fb7a89d6000-7fb7a89d7000 r--p 00001000 00:19 445365                     /lib/x86_64-linux-gnu/libutil-2.27.so
7fb7a89d7000-7fb7a89d8000 rw-p 00002000 00:19 445365                     /lib/x86_64-linux-gnu/libutil-2.27.so
7fb7a89d8000-7fb7a89f4000 r-xp 00000000 00:19 447062                     /lib/x86_64-linux-gnu/libz.so.1.2.11
7fb7a89f4000-7fb7a8bf3000 ---p 0001c000 00:19 447062                     /lib/x86_64-linux-gnu/libz.so.1.2.11
7fb7a8bf3000-7fb7a8bf4000 r--p 0001b000 00:19 447062                     /lib/x86_64-linux-gnu/libz.so.1.2.11
7fb7a8bf4000-7fb7a8bf5000 rw-p 0001c000 00:19 447062                     /lib/x86_64-linux-gnu/libz.so.1.2.11
7fb7a8bf5000-7fb7a8c24000 r-xp 00000000 00:19 447001                     /lib/x86_64-linux-gnu/libexpat.so.1.6.7
7fb7a8c24000-7fb7a8e24000 ---p 0002f000 00:19 447001                     /lib/x86_64-linux-gnu/libexpat.so.1.6.7
7fb7a8e24000-7fb7a8e26000 r--p 0002f000 00:19 447001                     /lib/x86_64-linux-gnu/libexpat.so.1.6.7
7fb7a8e26000-7fb7a8e27000 rw-p 00031000 00:19 447001                     /lib/x86_64-linux-gnu/libexpat.so.1.6.7
7fb7a8e27000-7fb7a9219000 r-xp 00000000 00:19 522402                     /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
7fb7a9219000-7fb7a9419000 ---p 003f2000 00:19 522402                     /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
7fb7a9419000-7fb7a941d000 r--p 003f2000 00:19 522402                     /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
7fb7a941d000-7fb7a94ba000 rw-p 003f6000 00:19 522402                     /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
7fb7a94ba000-7fb7a94eb000 rw-p 00000000 00:00 0 
7fb7a94eb000-7fb7a94f2000 r-xp 00000000 00:19 472539                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
7fb7a94f2000-7fb7a96f1000 ---p 00007000 00:19 472539                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
7fb7a96f1000-7fb7a96f2000 r--p 00006000 00:19 472539                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
7fb7a96f2000-7fb7a96f3000 rw-p 00007000 00:19 472539                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
7fb7a96f3000-7fb7a96fb000 r-xp 00000000 00:19 537467                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/fiddle.so
7fb7a96fb000-7fb7a98fb000 ---p 00008000 00:19 537467                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/fiddle.so
7fb7a98fb000-7fb7a98fc000 r--p 00008000 00:19 537467                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/fiddle.so
7fb7a98fc000-7fb7a98fd000 rw-p 00009000 00:19 537467                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/fiddle.so
7fb7a98fd000-7fb7a9902000 r-xp 00000000 00:19 537493                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7fb7a9902000-7fb7a9b01000 ---p 00005000 00:19 537493                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7fb7a9b01000-7fb7a9b02000 r--p 00004000 00:19 537493                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7fb7a9b02000-7fb7a9b03000 rw-p 00005000 00:19 537493                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/strscan.so
7fb7a9b03000-7fb7a9b06000 r-xp 00000000 00:19 537391                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7fb7a9b06000-7fb7a9d05000 ---p 00003000 00:19 537391                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7fb7a9d05000-7fb7a9d06000 r--p 00002000 00:19 537391                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7fb7a9d06000-7fb7a9d07000 rw-p 00003000 00:19 537391                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/cgi/escape.so
7fb7a9d07000-7fb7a9d0d000 r-xp 00000000 00:19 537464                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7fb7a9d0d000-7fb7a9f0c000 ---p 00006000 00:19 537464                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7fb7a9f0c000-7fb7a9f0d000 r--p 00005000 00:19 537464                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7fb7a9f0d000-7fb7a9f0e000 rw-p 00006000 00:19 537464                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/etc.so
7fb7a9f0e000-7fb7a9f15000 r-xp 00000000 00:19 537480                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7fb7a9f15000-7fb7aa114000 ---p 00007000 00:19 537480                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7fb7aa114000-7fb7aa115000 r--p 00006000 00:19 537480                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7fb7aa115000-7fb7aa116000 rw-p 00007000 00:19 537480                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/pathname.so
7fb7aa116000-7fb7aa11d000 r-xp 00000000 00:19 537492                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7fb7aa11d000-7fb7aa31d000 ---p 00007000 00:19 537492                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7fb7aa31d000-7fb7aa31e000 r--p 00007000 00:19 537492                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7fb7aa31e000-7fb7aa31f000 rw-p 00008000 00:19 537492                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/stringio.so
7fb7aa31f000-7fb7aa321000 r-xp 00000000 00:19 537450                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7fb7aa321000-7fb7aa521000 ---p 00002000 00:19 537450                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7fb7aa521000-7fb7aa522000 r--p 00002000 00:19 537450                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7fb7aa522000-7fb7aa523000 rw-p 00003000 00:19 537450                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/trans/transdb.so
7fb7aa523000-7fb7aa525000 r-xp 00000000 00:19 537407                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7fb7aa525000-7fb7aa724000 ---p 00002000 00:19 537407                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7fb7aa724000-7fb7aa725000 r--p 00001000 00:19 537407                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7fb7aa725000-7fb7aa726000 rw-p 00002000 00:19 537407                     /usr/lib/x86_64-linux-gnu/ruby/2.5.0/enc/encdb.so
7fb7aa726000-7fb7aa8c3000 r-xp 00000000 00:19 445350                     /lib/x86_64-linux-gnu/libm-2.27.so
7fb7aa8c3000-7fb7aaac2000 ---p 0019d000 00:19 445350                     /lib/x86_64-linux-gnu/libm-2.27.so
7fb7aaac2000-7fb7aaac3000 r--p 0019c000 00:19 445350                     /lib/x86_64-linux-gnu/libm-2.27.so
7fb7aaac3000-7fb7aaac4000 rw-p 0019d000 00:19 445350                     /lib/x86_64-linux-gnu/libm-2.27.so
7fb7aaac4000-7fb7aaacd000 r-xp 00000000 00:19 445348                     /lib/x86_64-linux-gnu/libcrypt-2.27.so
7fb7aaacd000-7fb7aaccc000 ---p 00009000 00:19 445348                     /lib/x86_64-linux-gnu/libcrypt-2.27.so
7fb7aaccc000-7fb7aaccd000 r--p 00008000 00:19 445348                     /lib/x86_64-linux-gnu/libcrypt-2.27.so
7fb7aaccd000-7fb7aacce000 rw-p 00009000 00:19 445348                     /lib/x86_64-linux-gnu/libcrypt-2.27.so
7fb7aacce000-7fb7aacfc000 rw-p 00000000 00:00 0 
7fb7aacfc000-7fb7aacff000 r-xp 00000000 00:19 445349                     /lib/x86_64-linux-gnu/libdl-2.27.so
7fb7aacff000-7fb7aaefe000 ---p 00003000 00:19 445349                     /lib/x86_64-linux-gnu/libdl-2.27.so
7fb7aaefe000-7fb7aaeff000 r--p 00002000 00:19 445349                     /lib/x86_64-linux-gnu/libdl-2.27.so
7fb7aaeff000-7fb7aaf00000 rw-p 00003000 00:19 445349                     /lib/x86_64-linux-gnu/libdl-2.27.so
7fb7aaf00000-7fb7aaf7f000 r-xp 00000000 00:19 472433                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb7aaf7f000-7fb7ab17f000 ---p 0007f000 00:19 472433                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb7ab17f000-7fb7ab180000 r--p 0007f000 00:19 472433                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb7ab180000-7fb7ab181000 rw-p 00080000 00:19 472433                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
7fb7ab181000-7fb7ab19b000 r-xp 00000000 00:19 445361                     /lib/x86_64-linux-gnu/libpthread-2.27.so
7fb7ab19b000-7fb7ab39a000 ---p 0001a000 00:19 445361                     /lib/x86_64-linux-gnu/libpthread-2.27.so
7fb7ab39a000-7fb7ab39b000 r--p 00019000 00:19 445361                     /lib/x86_64-linux-gnu/libpthread-2.27.so
7fb7ab39b000-7fb7ab39c000 rw-p 0001a000 00:19 445361                     /lib/x86_64-linux-gnu/libpthread-2.27.so
7fb7ab39c000-7fb7ab3a0000 rw-p 00000000 00:00 0 
7fb7ab3a0000-7fb7ab587000 r-xp 00000000 00:19 445346                     /lib/x86_64-linux-gnu/libc-2.27.so
7fb7ab587000-7fb7ab787000 ---p 001e7000 00:19 445346                     /lib/x86_64-linux-gnu/libc-2.27.so
7fb7ab787000-7fb7ab78b000 r--p 001e7000 00:19 445346                     /lib/x86_64-linux-gnu/libc-2.27.so
7fb7ab78b000-7fb7ab78d000 rw-p 001eb000 00:19 445346                     /lib/x86_64-linux-gnu/libc-2.27.so
7fb7ab78d000-7fb7ab791000 rw-p 00000000 00:00 0 
7fb7ab791000-7fb7aba2b000 r-xp 00000000 00:19 537387                     /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.1
7fb7aba2b000-7fb7abc2a000 ---p 0029a000 00:19 537387                     /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.1
7fb7abc2a000-7fb7abc30000 r--p 00299000 00:19 537387                     /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.1
7fb7abc30000-7fb7abc31000 rw-p 0029f000 00:19 537387                     /usr/lib/x86_64-linux-gnu/libruby-2.5.so.2.5.1
7fb7abc31000-7fb7abc41000 rw-p 00000000 00:00 0 
7fb7abc41000-7fb7abc68000 r-xp 00000000 00:19 445342                     /lib/x86_64-linux-gnu/ld-2.27.so
7fb7abc6c000-7fb7abcec000 rw-p 00000000 00:00 0 
7fb7abd0d000-7fb7abe55000 rw-p 00000000 00:00 0 
7fb7abe60000-7fb7abe62000 r--s 00000000 00:19 536255                     /usr/bin/ruby2.5
7fb7abe62000-7fb7abe63000 rwxp 00000000 00:00 0 
7fb7abe63000-7fb7abe64000 ---p 00000000 00:00 0 
7fb7abe64000-7fb7abe68000 rw-p 00000000 00:00 0 
7fb7abe68000-7fb7abe69000 r--p 00027000 00:19 445342                     /lib/x86_64-linux-gnu/ld-2.27.so
7fb7abe69000-7fb7abe6a000 rw-p 00028000 00:19 445342                     /lib/x86_64-linux-gnu/ld-2.27.so
7fb7abe6a000-7fb7abe6b000 rw-p 00000000 00:00 0 
7ffd60eab000-7ffd616aa000 rw-p 00000000 00:00 0                          [stack]
7ffd617e7000-7ffd617ea000 r--p 00000000 00:00 0                          [vvar]
7ffd617ea000-7ffd617ec000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]


[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Aborted (core dumped)
/usr/bin/ruby2.5 -I/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/lib:/home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-support-3.7.1/lib /home/mrkn/src/github.com/mrkn/pycall.rb/vendor/bundle/ruby/2.5.0/gems/rspec-core-3.7.1/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb failed

PyCall::PythonNotFound with usage example

Hello guys,

I have Ruby 2.4.3p205 and Python 3.6.2 on my Windows 8.1 machine installed.
I tried to run the usage example which compares Python's math.sin with Ruby's Math.sin.

I get a PyCall::PythonNotFound exception on the line where it says pyimport :math.

Can somebody may help me with this?

[question] passing iterable object in ruby

The methods that I want to use requires iterable to be passed as argument.
I've tried to pass a simple Ruby array into it, but it still produces error.

Any help will be appreciated ... Thanks

How to use PyCall in Rails 5.1?

Hello, how do I use pycall in rails 5.1?

I have the following controller in Rails:

class RequerimentsController < ApplicationController

  require 'pycall/import'
  include PyCall::Import
  
  layout "admin"

  def index 
  end

  def show
  end

  def new
    @requeriment = Requeriment.new
    pyimport :nltk

    message = "Testando a integracao."
    nltk.word_tokenize(message)
  end
end

When I raise the server with rails s, and I trigger the new action it gives the following error:

/home/elton/.rvm/gems/ruby-2.5.0/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:71: [BUG] Segmentation fault at 0x0000000000000020
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0092 p:---- s:0604 e:000603 CFUNC  :from_ruby
c:0091 p:0027 s:0599 e:000598 METHOD /home/elton/.rvm/gems/ruby-2.5.0/gems/pycall-1.0.3/lib/pycall/pyobject_wrapper.rb:71
c:0090 p:0022 s:0594 e:000593 METHOD /home/elton/.rvm/gems/ruby-2.5.0/gems/blankslate-3.1.3/lib/blankslate.rb:131 [FINISH]
c:0089 p:---- s:0588 e:000587 CFUNC  :include
c:0088 p:0086 s:0583 e:000582 METHOD /home/elton/.rvm/gems/ruby-2.5.0/gems/pycall-1.0.3/lib/pycall/pytypeobject_wrapper.rb:16 [FINISH]
c:0087 p:---- s:0577 e:000576 CFUNC  :extend
c:0086 p:0024 s:0572 e:000571 BLOCK  /home/elton/.rvm/gems/ruby-2.5.0/gems/pycall-1.0.3/lib/pycall/pytypeobject_wrapper.rb:86 [FINISH]
c:0085 p:---- s:0568 e:000567 CFUNC  :initialize
c:0084 p:---- s:0565 e:000564 CFUNC  :new
c:0083 p:0012 s:0561 e:000560 BLOCK  /home/elton/.rvm/gems/ruby-2.5.0/gems/pycall-1.0.3/lib/pycall/pytypeobject_wrapper.rb:84
c:0082 p:0166 s:0558 e:000557 METHOD /home/elton/.rvm/gems/ruby-2.5.0/gems/pycall-1.0.3/lib/pycall/wrapper_object_cache.rb:34
c:0081 p:0023 s:0551 e:000550 METHOD /home/elton/.rvm/gems/ruby-2.5.0/gems/pycall-1.0.3/lib/pycall/pytypeobject_wrapper.rb:83 [FINISH]
c:0080 p:-17563899743352 s:0546 e:000545 TOP    [FINISH]
c:0079 p:---- s:0543 e:000542 CFUNC  :require

string tail is unexpectedly destroyed

When running https://gist.github.com/ngoto/50fd9216686d9f98f3adb25c7b325122
(with data file downloaded from http://togows.org/entry/ncbi-nucleotide/J00231.fasta)
in most cases, the tail of the seq string is unexpectedly destroyed by binary characters.
The length of the seq string is the same as expected (1089), but the content is destroyed.

For example,

$ ruby try01-seqio.rb
id:  "J00231.1"
description:  "J00231.1 Human Ig gamma3 heavy chain disease OMM protein mRNA"
seq:  "CCTGGACCTCCTGTGCAAGAACATGAAACANCTGTGGTTCTTCCTTCTCCTGGTGGCAGCTCCCAGATGGGTCCTGTCCCAGGTGCACCTGCAGGAGTCGGGCCCAGGACTGGGGAAGCCTCCAGAGCTCAAAACCCCACTTGGTGACACAACTCACACATGCCCACGGTGCCCAGAGCCCAAATCTTGTGACACACCTCCCCCGTGCCCACGGTGCCCAGAGCCCAAATCTTGTGACACACCTCCCCCATGCCCACGGTGCCCAGAGCCCAAATCTTGTGACACACCTCCCCCGTGCCCNNNGTGCCCAGCACCTGAACTCTTGGGAGGACCGTCAGTCTTCCTCTTCCCCCCAAAACCCAAGGATACCCTTATGATTTCCCGGACCCCTGAGGTCACGTGCGTGGTGGTGGACGTGAGCCACGAAGACCCNNNNGTCCAGTTCAAGTGGTACGTGGACGGCGTGGAGGTGCATAATGCCAAGACAAAGCTGCGGGAGGAGCAGTACAACAGCACGTTCCGTGTGGTCAGCGTCCTCACCGTCCTGCACCAGGACTGGCTGAACGGCAAGGAGTACAAGTGCAAGGTCTCCAACAAAGCCCTCCCAGCCCCCATCGAGAAAACCATCTCCAAAGCCAAAGGACAGCCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGAGGAGATGACCAAGAACCAAGTCAGCCTGACCTGCCTGGTCAAAGGCTTCTACCCCAGCGACATCGCCGTGGAGTGGGAGAGCAATGGGCAGCCGGAGAACAACTACAACACCACGCCTCCCATGCTGGACTCCGACGGCTCCTTCTTCCTCTACAGCAAGCTCACCGTGGACAAGAGCAGGTGGCAGCAGGGGAACATCTTCTCATGCTCCGTGATGCATGAGGCTCTGCACAACCGCTACACGCAGAAGAGCCTCTCCCTGTCTCCGGGTAAATGAGTGCCATGGCCGGCAAGCCCCCGCTCCCCGGGCTCTCGGGGTCGCGCGAGGATGCTTGGCACGTACCCCGTGTACATACTTCCCAGGCACCCAGCATGGA\xB1\x05\x00\x00\x00\x00\x00\x00X\x8B\xAC\x8C\x92\x7F\x00\x00X\x8B\xAC\x8C\x92\x7F\x00\x00\x00"

Calling Python modules

How can I import a Python module that I wrote myself? If I have somemodule.py, doing pyimport 'somemodule' does not work as it throws a PyCall::PyError: <type 'exceptions.ImportError'>: No module named somemodule error.

New python class wrapping system

Introduce a new method PyCall.wrap_class(pyclass). The argument pyclass is an instance of PyTypeObjectStruct, that refers a Python class object.
This makes a Ruby anonymous class that is a wrapper for a Python class that is referred by pyclass.

keras from pycall

I tried to use keras from pycall, but I encountered the error.

require 'pycall/import'
include PyCall::Import
pyimport "keras"

The error is the following.

Using TensorFlow backend.
/home/ubuntu/.anyenv/envs/rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170329/lib/pycall/eval.rb:35:in `import_module': pytype(AttributeError): AttributeError("module 'sys' has no attribute 'argv'",) (PyCall::PyError)
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/keras/__init__.py", line 3, in <module>
    from . import activations
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/keras/activations.py", line 3, in <module>
    from . import backend as K
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/keras/backend/__init__.py", line 64, in <module>
    from .tensorflow_backend import *
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 1, in <module>
    import tensorflow as tf
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/tensorflow/__init__.py", line 24, in <module>
    from tensorflow.python import *
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/tensorflow/python/__init__.py", line 118, in <module>
    from tensorflow.python.platform import app
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 23, in <module>
    from tensorflow.python.platform import flags
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/site-packages/tensorflow/python/platform/flags.py", line 25, in <module>
    _global_parser = _argparse.ArgumentParser()
  File "/home/ubuntu/.anyenv/envs/pyenv/versions/anaconda3-4.3.1/lib/python3.6/argparse.py", line 1622, in __init__
    prog = _os.path.basename(_sys.argv[0])
        from /home/ubuntu/.anyenv/envs/rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/pycall-0.1.0.alpha.20170329/lib/pycall/import.rb:24:in `pyimport'
        from test_keras.rb:3:in `<main>'

How can I fix this error?
Is this the issue of pycall ?
or, Is there any workaround of the error?

The Ruby version is 2.4.1p111
The Python version is 3.6.0 :: Anaconda 4.3.1
The Keras version is 2.0.2
The tensorflow version is 1.0.1

RubyDataScience

Dear @mrkn ,

we've recently added pycall to our upcoming RubyDataScience list: https://github.com/arbox/data-science-with-ruby

In order to connect all Ruby & Data Science related projects we introduced the rubydatascience topic on GitHub.

Please consider adding this topic to your repository as well so that the Ruby community can discover this project faster ๐Ÿ˜ƒ The rubyml topic could be of high relevance for you too.

Thank you in advance!

PIL.Image couldn't be imported

[1] pry(main)> require 'pycall/import'
=> true
[2] pry(main)> include PyCall::Import
=> Object
[3] pry(main)> pyfrom :PIL, import: :Image
PyCall::PyError: pytype(AttributeError): AttributeError("module 'PIL' has no attribute 'Image'",)
from /Users/mrkn/src/github.com/mrkn/pycall/lib/pycall/pyobject.rb:16:in `getattr'

Can't call a method on a imported module

My environment is
$ uname -a
Linux b22 4.13.0-25-generic #29-Ubuntu SMP Mon Jan 8 21:14:41 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 17.10
Release: 17.10
Codename: artful

Python 3.6.3
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
pycall (1.0.3)
numpy (1.14.0)
scikit-learn (0.19.1)
scipy (1.0.0)
sklearn (0.0)

I'm following the first steps in support vector machine from scikit-learn in a ruby console.

Here is the piece of code I ran:
pyfrom :sklearn, import: :svm
X = [[0, 0], [1, 1]]
y = [0, 1]
clf = svm.SVC()
clf.fit(X, y)

I manage to import all libraries, but then it fails with:
PyCall::PyError: <class 'TypeError'>: fit() missing 1 required positional argument: 'y'

This lead me to solutions where is mentioned to add parentheses when instantiating the class, but i'm not able to make it work.

I get the same error with:
clf.fit([[0,0],[1,1]], [0,1])

Can you help pls

Scikit Learn pipeline's predict_proba method hangs with ruby 2.3.0 but works fine with 2.3.3

Hello,
I am trying to use this awesome gem but I'm facing one issue.

@pipeline.predict_proba(df.values)

I create a scikit learn's pipeline object having 2 transformers with Keras neural network model as last step. 1st transformer is one hot encoder and 2nd is a scalar transformer.

The same code works perfectly with 2.3.3 version of ruby but same fails with 2.3.0. On executing with 2.3.0 version, the console or code flow just hangs without throwing any error or without showing any other significant changes in system's memory and status of other processes.

Please can you help me fix this issue as per 2.3.0 as we are using ruby 2.3.0 in our production environment and shifting our app to 2.3.3 can be cumbersome.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.