Commit a6818e27 authored by acpaquette's avatar acpaquette
Browse files

Changed mention of isisio to isiscore

parent 0e7a6a0a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
%module(package="isisio") Blob
%module(package="isiscore") Blob
%{
    #include "Blob.h"
%}

isis/src/core/swig/isisio.i

deleted100644 → 0
+0 −163
Original line number Diff line number Diff line
%module isisio

%{
    #include <QString>
    #include <array>
    #include <vector> 
    #include <string>
    #include <sstream>
%}

%include "std_vector.i"
%include "std_string.i"
%include "std_array.i"
%include "std_map.i"
%include "carrays.i"
%include "std_pair.i"
%include "exception.i"

#include <nlohmann/json.hpp>
#include <QVector>
#include <QString>

%typemap(in) nlohmann::json {
  if (PyDict_Check($input) || PyList_Check($input)) {
    PyObject* module = PyImport_ImportModule("json");
    PyObject* jsonDumps = PyUnicode_FromString("dumps");
    PyObject* pythonJsonString = PyObject_CallMethodObjArgs(module, jsonDumps, $input, NULL);
    $1 = nlohmann::json::parse(PyUnicode_AsUTF8(pythonJsonString));
  }
  else {
    PyErr_SetString(PyExc_TypeError, "not a json serializable type");
    SWIG_fail;
  }
}

%typemap(typecheck, precedence=SWIG_TYPECHECK_MAP) nlohmann::json {
  $1 = PyDict_Check($input) ? 1 : 0;
}

%typemap(out) nlohmann::json {
  PyObject* module = PyImport_ImportModule("json");
  PyObject* jsonLoads = PyUnicode_FromString("loads");
  std::string jsonString = ($1).dump();
  PyObject* pythonJsonString = PyUnicode_DecodeUTF8(jsonString.c_str(), jsonString.size(), NULL);
  $result = PyObject_CallMethodObjArgs(module, jsonLoads, pythonJsonString, NULL);
}

%typemap(in) QVector<QString> & {
  int i;
  if (!PySequence_Check($input)) {
    PyErr_SetString(PyExc_ValueError,"Expected a List");
    SWIG_fail;
  }

  int size = PySequence_Length($input);
  $1 = new QVector<QString>(size);
  
  for (i = 0; i < size; i++) {
    PyObject *o = PySequence_GetItem($input,i);
    if (PyUnicode_Check(o)) {
      QString s = QString::fromUtf8(PyUnicode_AsUTF8(o));
      (*$1)[i] = s; 
    } else {
      PyErr_SetString(PyExc_ValueError,"Sequence elements must be string");      
      SWIG_fail;
    }
  }
}



%typemap(out) QVector<QString> & {
  $result = PyList_New($1_dim0);
  for (i = 0; i < $1_dim0; i++) {
    PyObject *o = PyString_AsString($1->at(i));
    PyList_SetItem($result,i,o);
  }
}


%typemap(in) QString const & {
  if (!PyUnicode_Check($input)) {
    PyErr_SetString(PyExc_ValueError,"Expected a String");
    SWIG_fail;
  }
  $1 = new QString(QString::fromUtf8(PyUnicode_AsUTF8($input))); 
}


%typemap(out) QString const & {
  $result = Py_BuildValue("s#", $1.toStdString().c_str(), $1.size());
}


%typemap(in) QString {
  if (!PyUnicode_Check($input)) {
    std::cout << "TANGERINE" << std::endl;
    PyErr_SetString(PyExc_ValueError,"Expected a String");
    SWIG_fail;
  }
  $1 = QString::fromUtf8(PyUnicode_AsUTF8($input)); 
}

%typemap(typecheck,precedence=SWIG_TYPECHECK_STRING) QString {
    $1 = !PyUnicode_Check($input);
    std::cout << PyUnicode_AsUTF8($input) << std::endl;
}

%typemap(out) QString = QString const &;

%typemap(in) QVector<QString> {
  int i;
  if (!PySequence_Check($input)) {
    PyErr_SetString(PyExc_ValueError,"Expected a List");
    SWIG_fail;
  }

  int size = PySequence_Length($input);
  $1 = new QVector<QString>(size);
  
  for (i = 0; i < size; i++) {
    PyObject *o = PySequence_GetItem($input,i);
    if (PyUnicode_Check(o)) {
      QString s = QString::fromUtf8(PyUnicode_AsUTF8(o));
      (*$1)[i] = s; 
    } else {
      PyErr_SetString(PyExc_ValueError,"Sequence elements must be string");      
      SWIG_fail;
    }
  }
}


%typemap(out) QVector<QString> = QVector<QString> &;

namespace std {
  %template(IntVector) vector<int>;
  %template(DoubleVector) vector<double>;
  %template(VectorDoubleVector) vector< vector<double> >;
  %template(StringVector) vector<string>;
  %template(ConstCharVector) vector<const char*>;
  %template(PairDoubleVector) vector<pair<double, double>>;
  %template(DoubleArray6) array<double, 6>;
}

%exception {
  try {
    $action
  } catch (std::exception const& e) {
    SWIG_exception(SWIG_RuntimeError, (std::string("std::exception: ") + e.what()).c_str());
  } catch (...) {
    SWIG_exception(SWIG_UnknownError, "Unknown error");
  }
}

%include "pvlKeyword.i"
%include "PvlContainer.h"
%include "pvlGroup.i"
%include "pvlObject.i"
%nodefaultdtor Isis::PvlObject;
// %include "UserInterface.i"
%include "isisblob.i"
%include "isispvl.i"
+1 −1
Original line number Diff line number Diff line
%module(package="isisio") PvlKeyword
%module(package="isiscore") PvlKeyword
%{
    #include "PvlKeyword.h"
%}
+9 −9
Original line number Diff line number Diff line
@@ -3,8 +3,8 @@ include(FindPythonAnaconda.cmake)
include_directories(${PYTHON_INCLUDE_DIR})

set(CMAKE_SWIG_FLAGS "")
set(CMAKE_SWIG_OUTDIR isisio)
set_source_files_properties(../isisio.i
set(CMAKE_SWIG_OUTDIR isiscore)
set_source_files_properties(../isiscore.i
                            PROPERTIES CPLUSPLUS ON SWIG_FLAGS "-py3")

#Find dependencies
@@ -15,20 +15,20 @@ message("-- Found Include: ${INCLUDE_DIR}")
include_directories(${INCLUDE_DIR})

# Add and link
swig_add_library(isisio
swig_add_library(isiscore
                 LANGUAGE python
                 SOURCES ../isisio.i)
                 SOURCES ../isiscore.i)

set_target_properties(_isisio PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SWIG_OUTDIR})
set_target_properties(_isiscore PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SWIG_OUTDIR})

SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")

if (APPLE)
     set_target_properties(_isisio PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
     set_target_properties(_isiscore PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
     # On OSX, do not link python - this causes segfaults
     swig_link_libraries(isisio core)
     swig_link_libraries(isiscore core)
else()
     swig_link_libraries(isisio core ${PYTHON_LIBRARY})
     swig_link_libraries(isiscore core ${PYTHON_LIBRARY})
endif()

# Build out a standard directory structure
@@ -38,7 +38,7 @@ endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in
               ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/__init__.py
              ${CMAKE_CURRENT_BINARY_DIR}/isisio/__init__.py
              ${CMAKE_CURRENT_BINARY_DIR}/isiscore/__init__.py
              COPYONLY)

## Move the tests
+4 −4
Original line number Diff line number Diff line
@@ -2,10 +2,10 @@ import setuptools

if __name__ == '__main__':
    setuptools.setup(
        name='isisio',
        version='0.0.1',
        packages=['isisio'],
        package_data={'':['_isisio.so']},
        name='isiscore',
        version='1.0.0',
        packages=['isiscore'],
        package_data={'':['_isiscore.so']},
        zip_safe=False,  # Some OSes can not dynamically load an so from an egg (zipfile)
        license='UnLicense',
        author='arsanders/acpaquette',