pycall 1.3.0.dev → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 026f371fe891d8a8ef0fc80caefc2c22b1cefc22e937d3699d2aec0a42239d07
4
- data.tar.gz: 51d1a6b56e187ceee4954eddf0d48e0c32d51d350e306ed05f6c7624bea914f4
3
+ metadata.gz: ca6f356d0a95d938f235c348ca3825d261590d2870b3e9bf9f27325d25a5e39e
4
+ data.tar.gz: 232853fded2a1afb7c6f0a8fdd7e49030879087f00528383c48c7039f0bb8c1a
5
5
  SHA512:
6
- metadata.gz: 4e7c254cbd02e82a401ab75be52c84738d075b6cbc82c31013513d383af529746afa74df272a84432962d1fe1f0d4eca79a8688d149790ab0ccecf1e7cff679e
7
- data.tar.gz: a7f31a993b56cd8b15df2d5d5c2847f71382bef26e26f3723194e71addbf44d35b2939d641a906f8ea12de796befc8f2bf975670db5edf2dd01855c1cac08d2b
6
+ metadata.gz: 25afa008419432d52ac88a8488341426eaf6287d51b686d5d5dbdb83f8673920a0370b194cfba6b8bbe34c173584d0c7e0c10575b312d0c86e97140b2b561276
7
+ data.tar.gz: 9a31e7fd32ef9267210e93ab0404f89835a237bcad65c07c8c382cb341969c6e087bede158d0218f591cf73e53cebbc3d5672915ced8942bf5d58aa190d7dcc9
@@ -0,0 +1,67 @@
1
+ name: CI
2
+
3
+ on:
4
+ - push
5
+
6
+ jobs:
7
+ test:
8
+ name: Test
9
+ runs-on: ${{ matrix.os }}
10
+
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ os:
15
+ - ubuntu-18.04
16
+ #- macos-latest
17
+ ruby_version:
18
+ - 2.7.x
19
+ - 2.6.x
20
+ - 2.5.x
21
+ - 2.4.x
22
+ python_version:
23
+ - 3.8.x
24
+ - 3.7.x
25
+ - 3.6.x
26
+ - 2.7.x
27
+ python_architecture:
28
+ - x64
29
+
30
+ steps:
31
+ - name: Setup Ruby
32
+ if: matrix.ruby_version != 'master-nightly'
33
+ uses: actions/setup-ruby@v1
34
+ with:
35
+ ruby-version: ${{ matrix.ruby_version }}
36
+
37
+ - name: Setup Python
38
+ uses: actions/setup-python@v1
39
+ with:
40
+ python-version: ${{ matrix.python_version }}
41
+ architecture: ${{ matrix.python_architecture }}
42
+
43
+ - name: Checkout
44
+ uses: actions/checkout@v1
45
+ with:
46
+ fetch-depth: 1
47
+
48
+ - name: Prepare environment
49
+ run: |
50
+ gem install bundler
51
+
52
+ - name: Install requirements
53
+ run: |
54
+ pip install --user numpy
55
+ bundle install
56
+
57
+ - name: Compile pycall.so
58
+ run: |
59
+ bundle exec rake compile
60
+
61
+ - name: Python investigator
62
+ run: |
63
+ python lib/pycall/python/investigator.py
64
+
65
+ - name: Test
66
+ run: |
67
+ PYTHON=python bundle exec rake
@@ -2,48 +2,74 @@ language: ruby
2
2
 
3
3
  os: linux
4
4
 
5
- dist: trusty
5
+ dist: bionic
6
6
  sudo: required
7
7
 
8
8
  rvm:
9
9
  - ruby-head
10
- - 2.5.0
11
- - 2.4.3
12
- - 2.3.5
10
+ - 2.7
11
+ - 2.6
12
+ - 2.5
13
+ - 2.4
13
14
 
14
15
  env:
15
16
  global:
16
17
  - PYCALL_DEBUG_FIND_LIBPYTHON=1
17
18
  matrix:
18
- - PYENV_VERSION=2.7.13
19
- - PYENV_VERSION=3.6.2
20
- - PYENV_VERSION=system LIBPYTHON=versions/3.6.2/lib/libpython3.6m.so
21
- - PYENV_VERSION=miniconda2-4.1.11
22
- - PYENV_VERSION=miniconda3-4.3.11
19
+ - PYENV_VERSION=3.8.0
20
+ - PYENV_VERSION=3.7.5
21
+ - PYENV_VERSION=2.7.17
22
+ - PYENV_VERSION=system LIBPYTHON=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
23
+ - PYENV_VERSION=system LIBPYTHON=/usr/lib/x86_64-linux-gnu/libpython2.7.so
24
+ - PYENV_VERSION=miniconda2-4.3.30
25
+ - PYENV_VERSION=miniconda3-4.3.30
23
26
 
24
27
  matrix:
25
28
  include:
26
29
  - os: osx
27
- osx_image: xcode9
30
+ osx_image: xcode11.2
28
31
  compiler: clang
29
- rvm: 2.4.1
30
- env: PYENV_VERSION=3.6.2
32
+ rvm: 2.7
33
+ env: PYENV_VERSION=3.8.0
31
34
  - os: osx
32
- osx_image: xcode9
35
+ osx_image: xcode11.2
33
36
  compiler: clang
34
- rvm: 2.4.1
35
- env: PYENV_VERSION=system LIBPYTHON=versions/3.6.2/lib/libpython3.6m.so
37
+ rvm: 2.6
38
+ env: PYENV_VERSION=3.8.0
36
39
  - os: osx
37
- osx_image: xcode9
40
+ osx_image: xcode11.2
38
41
  compiler: clang
39
- rvm: 2.4.1
42
+ rvm: 2.5
43
+ env: PYENV_VERSION=3.8.0
44
+ - os: osx
45
+ osx_image: xcode11.2
46
+ compiler: clang
47
+ rvm: 2.4
48
+ env: PYENV_VERSION=3.8.0
49
+ - os: osx
50
+ osx_image: xcode11.2
51
+ compiler: clang
52
+ rvm: 2.7
53
+ env: PYENV_VERSION=miniconda3-4.3.11
54
+ - os: osx
55
+ osx_image: xcode11.2
56
+ compiler: clang
57
+ rvm: 2.6
58
+ env: PYENV_VERSION=miniconda3-4.3.11
59
+ - os: osx
60
+ osx_image: xcode11.2
61
+ compiler: clang
62
+ rvm: 2.5
63
+ env: PYENV_VERSION=miniconda3-4.3.11
64
+ - os: osx
65
+ osx_image: xcode11.2
66
+ compiler: clang
67
+ rvm: 2.4
40
68
  env: PYENV_VERSION=miniconda3-4.3.11
41
69
  allow_failures:
42
70
  - os: osx
43
71
 
44
72
  before_install:
45
- - gem update --system
46
- - gem update bundler
47
73
  - export PATH="$(pyenv root)/bin:$PATH"
48
74
  - eval "$(pyenv init -)"
49
75
 
data/CHANGES.md CHANGED
@@ -1,9 +1,25 @@
1
1
  # The change history of PyCall
2
2
 
3
- ## master
3
+ ## 1.3.0
4
4
 
5
5
  * Add `PyCall.without_gvl` for explicitly releasing the RubyVM GVL
6
6
 
7
+ * Fix for missing if in PyObjectWrapper
8
+
9
+ *Kouhei Sutou*
10
+
11
+ * Fix for Anaconda environment
12
+
13
+ *Ryo MATSUMIYA*
14
+
15
+ * Fix against `unknown symbol "PyInt_AsSsize_t"` (Fiddle::DLError)
16
+
17
+ *Kouhei Sutou*
18
+
19
+ * Fix for `TypeError: Compared with non class/module`
20
+
21
+ *Archonic*
22
+
7
23
  ## 1.2.1
8
24
 
9
25
  * Prevent circular require in pycall/iruby.rb
data/README.md CHANGED
@@ -5,8 +5,9 @@
5
5
 
6
6
  # PyCall: Calling Python functions from the Ruby language
7
7
 
8
+ [![Build Status](https://github.com/mrkn/pycall.rb/workflows/CI/badge.svg)](https://github.com/mrkn/pycall.rb/actions?query=workflow%3ACI)
8
9
  [![Build Status](https://travis-ci.org/mrkn/pycall.rb.svg?branch=master)](https://travis-ci.org/mrkn/pycall.rb)
9
- [![Build status](https://ci.appveyor.com/api/projects/status/071is0f4iu0vy8lp/branch/master?svg=true)](https://ci.appveyor.com/project/mrkn/pycall/branch/master)
10
+ [![Build status](https://ci.appveyor.com/api/projects/status/0fad23u4qj1yr49e/branch/master?svg=true)](https://ci.appveyor.com/project/mrkn/pycall-rb/branch/master)
10
11
 
11
12
  This library provides the features to directly call and partially interoperate
12
13
  with Python from the Ruby language. You can import arbitrary Python modules
@@ -6,10 +6,6 @@ environment:
6
6
  PYTHONDIR: "C:\\Python27"
7
7
  PYTHON: "C:\\Python27\\python.exe"
8
8
 
9
- - ruby_version: "24"
10
- PYTHONDIR: "C:\\Python34"
11
- PYTHON: "C:\\Python34\\python.exe"
12
-
13
9
  - ruby_version: "24"
14
10
  PYTHONDIR: "C:\\Python35"
15
11
  PYTHON: "C:\\Python35\\python.exe"
@@ -23,10 +19,6 @@ environment:
23
19
  PYTHONDIR: "C:\\Python27-x64"
24
20
  PYTHON: "C:\\Python27-x64\\python.exe"
25
21
 
26
- - ruby_version: "24-x64"
27
- PYTHONDIR: "C:\\Python34-x64"
28
- PYTHON: "C:\\Python34-x64\\python.exe"
29
-
30
22
  - ruby_version: "24-x64"
31
23
  PYTHONDIR: "C:\\Python35-x64"
32
24
  PYTHON: "C:\\Python35-x64\\python.exe"
@@ -57,10 +49,6 @@ environment:
57
49
  PYTHONDIR: "C:\\Python27-x64"
58
50
  PYTHON: "C:\\Python27-x64\\python.exe"
59
51
 
60
- - ruby_version: "23-x64"
61
- PYTHONDIR: "C:\\Python34-x64"
62
- PYTHON: "C:\\Python34-x64\\python.exe"
63
-
64
52
  - ruby_version: "23-x64"
65
53
  PYTHONDIR: "C:\\Python35-x64"
66
54
  PYTHON: "C:\\Python35-x64\\python.exe"
@@ -10,19 +10,35 @@ if test -z "$PYENV_VERSION"; then
10
10
  exit 1
11
11
  fi
12
12
 
13
+ pyenv_root=$(pyenv root)
14
+
13
15
  if test -n "$LIBPYTHON"; then
14
- export LIBPYTHON=$(pyenv root)/$LIBPYTHON
16
+ if test ! -f $LIBPYTHON; then
17
+ if test -f ${pyenv_root}/$LIBPYTHON; then
18
+ export LIBPYTHON=${pyenv_root}/$LIBPYTHON
19
+ else
20
+ echo "Invalid value in LIBPYTHON: ${LIBPYTHON}" >&2
21
+ exit 1
22
+ fi
23
+ fi
15
24
  fi
16
25
 
17
- if test "$PYENV_VERSION" = "system"; then
18
- if test -z "$LIBPYTHON"; then
19
- echo "ERROR: LIBPYTHON is not provided for PYENV_VERSION=system" >2
20
- exit 1
26
+ (
27
+ cd $(pyenv root)
28
+ if [ -d .git ]; then
29
+ git fetch origin
30
+ git checkout master
31
+ git reset --hard origin/master
21
32
  fi
22
- # NOTE: PYENV_VERSION should be the version of LIBPYTHON during install script
23
- PYENV_VERSION=$(basename $(dirname $(dirname $LIBPYTHON)))
24
- fi
25
- PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install -f $PYENV_VERSION
33
+ )
34
+
35
+ case $PYENV_VERSION in
36
+ system)
37
+ ;;
38
+ *)
39
+ PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install -f $PYENV_VERSION
40
+ ;;
41
+ esac
26
42
 
27
43
  case "$PYENV_VERSION" in
28
44
  *conda*)
@@ -40,6 +56,11 @@ case "$PYENV_VERSION" in
40
56
  travis_retry conda create -q -n test-environment python=$python_version numpy
41
57
  source $(pyenv prefix)/bin/activate test-environment
42
58
  ;;
59
+ system)
60
+ travis_retry pip install --user numpy
61
+ sudo sh -c "apt-get update && apt-get install --no-install-recommends -y python3-pip"
62
+ travis_retry python3.6 -m pip install --user numpy
63
+ ;;
43
64
  *)
44
65
  travis_retry pip install --user numpy
45
66
  ;;
@@ -30,7 +30,13 @@ lookup_libpython_api(VALUE libpython_handle, char const *name)
30
30
  arg.libpython_handle = libpython_handle;
31
31
  arg.name = name;
32
32
  addr = rb_protect((VALUE (*)(VALUE))lookup_libpython_api_0, (VALUE)&arg, &state);
33
- return (state || NIL_P(addr)) ? NULL : NUM2PTR(addr);
33
+ if (state) {
34
+ rb_set_errinfo(Qnil);
35
+ return NULL;
36
+ }
37
+ else {
38
+ return NIL_P(addr) ? NULL : NUM2PTR(addr);
39
+ }
34
40
  }
35
41
 
36
42
  #define LOOKUP_API_ENTRY(api_name) lookup_libpython_api(libpython_handle, #api_name)
@@ -40,10 +40,6 @@ module PyCall
40
40
  debug_report("find_libpython(#{python.inspect})")
41
41
  python, python_config = find_python_config(python)
42
42
 
43
- set_PYTHONHOME(python_config)
44
- libs = make_libs(python_config)
45
- libpaths = make_libpaths(python_config)
46
-
47
43
  # Try LIBPYTHON environment variable first.
48
44
  if (libpython = ENV['LIBPYTHON'])
49
45
  if File.file?(libpython)
@@ -59,6 +55,9 @@ module PyCall
59
55
  end
60
56
 
61
57
  # Find libpython (we hope):
58
+ set_PYTHONHOME(python_config)
59
+ libs = make_libs(python_config)
60
+ libpaths = make_libpaths(python_config)
62
61
  multiarch = python_config[:MULTIARCH] || python_config[:multiarch]
63
62
  libs.each do |lib|
64
63
  libpaths.each do |libpath|
@@ -121,7 +120,7 @@ module PyCall
121
120
  end
122
121
 
123
122
  def set_PYTHONHOME(python_config)
124
- if !ENV.has_key?('PYTHONHOME') && python_config[:conda]
123
+ if !ENV.has_key?('PYTHONHOME')
125
124
  case RUBY_PLATFORM
126
125
  when /mingw32/, /cygwin/, /mswin/
127
126
  ENV['PYTHONHOME'] = python_config[:exec_prefix]
@@ -178,7 +178,7 @@ module PyCall
178
178
  def check_isclass(pyptr)
179
179
  pyptr = pyptr.__pyptr__ if pyptr.kind_of? PyObjectWrapper
180
180
  return if pyptr.kind_of? LibPython::API::PyType_Type
181
- return defined?(LibPython::API::PyClass_Type) && pyptr.kind_of?(LibPython::API::PyClass_Type)
181
+ return if defined?(LibPython::API::PyClass_Type) && pyptr.kind_of?(LibPython::API::PyClass_Type)
182
182
  raise TypeError, "PyType object is required"
183
183
  end
184
184
  end
@@ -1,12 +1,8 @@
1
1
  from distutils.sysconfig import get_config_var
2
2
  import sys
3
3
 
4
- def conda():
5
- return 'conda' in sys.version or 'Continuum' in sys.version
6
-
7
4
  for var in ('executable', 'exec_prefix', 'prefix'):
8
5
  print(var + ': ' + str(getattr(sys, var)))
9
- print('conda: ' + ('true' if conda() else 'false'))
10
6
  print('multiarch: ' + str(getattr(getattr(sys, 'implementation', sys), '_multiarch', None)))
11
7
  for var in ('VERSION', 'INSTSONAME', 'LIBRARY', 'LDLIBRARY', 'LIBDIR', 'PYTHONFRAMEWORKPREFIX', 'MULTIARCH'):
12
8
  print(var + ': ' + str(get_config_var(var)))
@@ -51,8 +51,18 @@ module PyCall
51
51
 
52
52
  def <(other)
53
53
  case other
54
+ when self
55
+ false
54
56
  when PyTypeObjectWrapper
55
57
  __pyptr__ < other.__pyptr__
58
+ when Class
59
+ false if other.ancestors.include?(self)
60
+ when Module
61
+ if ancestors.include?(other)
62
+ true
63
+ elsif other.ancestors.include?(self)
64
+ false
65
+ end
56
66
  else
57
67
  raise TypeError, "compared with non class/module"
58
68
  end
@@ -1,5 +1,5 @@
1
1
  module PyCall
2
- VERSION = "1.3.0-dev"
2
+ VERSION = "1.3.0"
3
3
 
4
4
  module Version
5
5
  numbers, TAG = VERSION.split("-")
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
36
36
  spec.require_paths = ["lib"]
37
37
  spec.extensions = ["ext/pycall/extconf.rb"]
38
38
 
39
- spec.add_development_dependency "bundler", ">= 1.17.2"
39
+ spec.add_development_dependency "bundler"
40
40
  spec.add_development_dependency "rake"
41
41
  spec.add_development_dependency "rake-compiler"
42
42
  spec.add_development_dependency "rake-compiler-dock"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pycall
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0.dev
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenta Murata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-07 00:00:00.000000000 Z
11
+ date: 2020-01-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.17.2
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.17.2
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -130,6 +130,7 @@ extensions:
130
130
  - ext/pycall/extconf.rb
131
131
  extra_rdoc_files: []
132
132
  files:
133
+ - ".github/workflows/ci.yml"
133
134
  - ".gitignore"
134
135
  - ".rspec"
135
136
  - ".travis.yml"
@@ -216,11 +217,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
216
217
  version: '0'
217
218
  required_rubygems_version: !ruby/object:Gem::Requirement
218
219
  requirements:
219
- - - ">"
220
+ - - ">="
220
221
  - !ruby/object:Gem::Version
221
- version: 1.3.1
222
+ version: '0'
222
223
  requirements: []
223
- rubygems_version: 3.0.3
224
+ rubygems_version: 3.0.6
224
225
  signing_key:
225
226
  specification_version: 4
226
227
  summary: pycall