Skip to content

Commit

Permalink
Merge b138a7d into 39dff76
Browse files Browse the repository at this point in the history
  • Loading branch information
eschnett committed Jun 23, 2019
2 parents 39dff76 + b138a7d commit e9b794d
Show file tree
Hide file tree
Showing 12 changed files with 669 additions and 97 deletions.
16 changes: 16 additions & 0 deletions BUILD.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Redshift:

mkdir build && cd build
env "PATH=$HOME/src/spack-view/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX=$HOME/asdf-cxx -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -G Ninja ..

env "PATH=$HOME/src/spack-view/bin:$PATH" cmake --build .
for lib in *.so; do install_name_tool -change '@rpath/libyaml-cpp.0.6.dylib' "$HOME/src/spack-view/lib/libyaml-cpp.0.6.2.dylib" $lib; done
for exe in ./asdf-*; do install_name_tool -change '@rpath/libyaml-cpp.0.6.dylib' "$HOME/src/spack-view/lib/libyaml-cpp.0.6.2.dylib" $exe; done

env "PATH=$HOME/src/spack-view/bin:$PATH" "DYLD_LIBRARY_PATH=$HOME/src/spack-view/lib:$DYLD_LIBRARY_PATH" ./asdf-demo
env "PATH=$HOME/src/spack-view/bin:$PATH" "DYLD_LIBRARY_PATH=$HOME/src/spack-view/lib:$DYLD_LIBRARY_PATH" ./asdf-demo-external

env "PATH=$HOME/src/spack-view/bin:$PATH" "DYLD_LIBRARY_PATH=$HOME/src/spack-view/lib:$DYLD_LIBRARY_PATH" "PYTHONHOME=$HOME/src/spack-view" "PYTHONPATH=$(pwd)" $HOME/src/spack-view/bin/python ../asdf-demo-python.py
env "PATH=$HOME/src/spack-view/bin:$PATH" "DYLD_LIBRARY_PATH=$HOME/src/spack-view/lib:$DYLD_LIBRARY_PATH" "PYTHONHOME=$HOME/src/spack-view" "PYTHONPATH=$(pwd)" $HOME/src/spack-view/bin/python ../asdf-demo-external-python.py

env "PATH=$HOME/src/spack-view/bin:$PATH" cmake --build . --target install
53 changes: 49 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ cmake_policy(SET CMP0048 NEW)
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
set(CMAKE_DISABLE_SOURCE_CHANGES ON)

project(asdf-cxx VERSION 7.0.0 LANGUAGES CXX)
project(asdf-cxx VERSION 7.1.0 LANGUAGES CXX)
set(PROJECT_DESCRIPTION
"asdf-cxx (Advanced Scientific Data Format), C++ implementation")
set(PROJECT_URL "https://github.com/eschnett/asdf-cxx")
Expand Down Expand Up @@ -57,9 +57,25 @@ else()
set(HAVE_ZLIB 0)
endif()

set(Python_ADDITIONAL_VERSIONS 3.0)
# This sets PYTHONINTERP_FOUND
find_package(PythonInterp)
# This sets PYTHONLIBS_FOUND
find_package(PythonLibs)
if(PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND)
include_directories(${PYTHON_INCLUDE_DIRS})
endif()

if(PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND)
find_package(SWIG)
endif()
if(SWIG_FOUND)
include(${SWIG_USE_FILE})
endif()

# Main project

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

string(REPLACE "-DNDEBUG" ""
Expand Down Expand Up @@ -115,18 +131,43 @@ target_link_libraries(asdf-demo-large asdf-cxx ${LIBS})
add_executable(asdf-ls ls.cpp)
target_link_libraries(asdf-ls asdf-cxx ${LIBS})

# SWIG bindings

if(PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND SWIG_FOUND)
set_source_files_properties(asdf.i PROPERTIES CPLUSPLUS ON)
swig_add_library(asdf LANGUAGE python SOURCES asdf.i)
swig_link_libraries(asdf asdf-cxx ${LIBS} ${PYTHON_LIBRARIES})
endif()

# Tests

enable_testing()
add_test(NAME demo COMMAND ./asdf-demo)
add_test(NAME ls COMMAND ./asdf-ls demo.asdf)
add_test(NAME copy COMMAND ./asdf-copy demo.asdf demo2.asdf)
add_test(NAME ls2 COMMAND ./asdf-ls demo2.asdf)
add_test(NAME compare
add_test(NAME compare-demo
COMMAND ${CMAKE_SOURCE_DIR}/diff-commands.sh
"./asdf-ls demo.asdf" "./asdf-ls demo2.asdf")
"./asdf-ls demo.asdf" "./asdf-ls demo2.asdf")
add_test(NAME external COMMAND ./asdf-demo-external)

if(PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND SWIG_FOUND)
add_test(NAME demo-python
COMMAND
env "PYTHONPATH=${PROJECT_BINARY_DIR}:$ENV{PYTHONPATH}"
${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/asdf-demo-python.py")
add_test(NAME compare-demo-python
COMMAND ${CMAKE_SOURCE_DIR}/diff-commands.sh
"./asdf-ls demo.asdf" "./asdf-ls demo-python.asdf")
add_test(NAME demo-external-python
COMMAND
env "PYTHONPATH=${PROJECT_BINARY_DIR}:$ENV{PYTHONPATH}"
${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/asdf-demo-external-python.py")
add_test(NAME compare-demo-external-python
COMMAND ${CMAKE_SOURCE_DIR}/diff-commands.sh
"./asdf-ls demo-external.asdf" "./asdf-ls demo-external-python.asdf")
endif()

# Coverage

# We don't want this to run on every build
Expand All @@ -145,6 +186,10 @@ install(FILES "${PROJECT_BINARY_DIR}/asdf_config.hpp" DESTINATION include)
install(TARGETS asdf-cxx DESTINATION lib)
install(TARGETS asdf-copy asdf-demo asdf-demo-external asdf-demo-large asdf-ls
DESTINATION bin)
if(PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND SWIG_FOUND)
install(PROGRAMS asdf-demo-python.py asdf-demo-external-python.py
DESTINATION bin)
endif()

set(PKG_CONFIG_REQUIRES "yaml-cpp")
set(PKG_CONFIG_INCLUDEDIR "\${prefix}/include")
Expand Down
90 changes: 90 additions & 0 deletions asdf-demo-external-python.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#! /usr/bin/env python

from __future__ import print_function
import numpy as np

from asdf import *



def write_external():
print("Writing external file...")

# The actual dataset
alpha = ndarray.create_int64(
np.array([1, 2, 3], np.int64), block_format_t_inline_array,
compression_t_none, 0, np.array([]), [3])
# A local reference
beta = reference.create_from_path("", ["group", "alpha", "data"])

grp = group.create(
{"alpha": entry.create_from_ndarray("alpha", alpha, ""),
"beta": entry.create_from_reference("beta", beta, "")})

project = asdf.create_from_group({}, grp)
project.write("external.asdf")



def write_metadata():
print("Writing metadata file...")

# A remote reference
gamma = reference.create_from_path("external.asdf",
["group", "alpha", "data"])
# A local reference
delta = reference.create_from_path("", ["group", "gamma", "reference"])
# A remote reference to a local reference
epsilon = reference.create_from_path("external.asdf",
["group", "beta", "reference"])

grp = group.create(
{"gamma": entry.create_from_reference("gamma", gamma, ""),
"delta": entry.create_from_reference("delta", delta, ""),
"epsilon": entry.create_from_reference("epsilon", epsilon, "")})

project = asdf.create_from_group({}, grp)
project.write("metadata.asdf")



def read_metadata():
print("Reading metadata file...")

project = asdf.read("metadata.asdf")
grp = project.get_group()

gamma = grp.get_entries()["gamma"].get_reference()
print("gamma: <" + gamma.get_target() + ">")
rs_node = gamma.resolve()
arr = ndarray.read(rs_node)
print("gamma': [ndarray] " + str(arr.get_data_vector_int64()))

delta = grp.get_entries()["delta"].get_reference()
print("delta: <" + delta.get_target() + ">")
rs_node = delta.resolve()
ref = reference.create_from_reader_state_node(rs_node)
print("delta': [reference] " + ref.get_target())
rs_node1 = ref.resolve()
arr = ndarray.read(rs_node1)
print("delta'': [ndarray] " + str(arr.get_data_vector_int64()))

epsilon = grp.get_entries()["epsilon"].get_reference()
print("epsilon: <" + epsilon.get_target() + ">")
rs_node = epsilon.resolve()
ref = reference.create_from_reader_state_node(rs_node)
print("epsilon': [reference] " + ref.get_target())
rs_node1 = ref.resolve()
arr = ndarray.read(rs_node1)
print("epsilon'': [ndarray] " + str(arr.get_data_vector_int64()))



print("asdf-demo-external-python:")
print(" Create a simple ASDF file with external references from Python")

write_external()
write_metadata()
read_metadata()

print("Done.")
68 changes: 68 additions & 0 deletions asdf-demo-python.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#! /usr/bin/env python

from __future__ import print_function
import numpy as np

from asdf import *

print("asdf-demo-python: Create a simple ASDF file from Python")

array0d = ndarray.create_int64(np.array([42], np.int64),
block_format_t_inline_array,
compression_t_none,
0,
np.array([]),
np.array([]))
ent0 = entry.create_from_ndarray("alpha", array0d, "")

array1d = ndarray.create_int64(np.array([1, 2, 3], np.int64),
block_format_t_block,
compression_t_none,
0,
np.array([]),
np.array([3]))
ent1 = entry.create_from_ndarray("beta", array1d, "")

array2d = ndarray.create_float64(np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
np.float64),
block_format_t_inline_array,
compression_t_none, 0,
np.array([]),
np.array([2, 3]))
ent2 = entry.create_from_ndarray("gamma", array2d, "")

array3d = ndarray.create_complex128(np.array([1, -2, 3j, -4j, 5 + 1j, 6 - 1j],
np.complex128),
block_format_t_block,
compression_t_bzip2,
9,
np.array([]),
np.array([1, 2, 3]))
ent3 = entry.create_from_ndarray("delta", array3d, "")

array8d = ndarray.create_bool(np.array([True], np.int),
block_format_t_block,
compression_t_zlib,
9,
np.array([]),
np.array([1, 1, 1, 1, 1, 1, 1, 1]))
ent8 = entry.create_from_ndarray("epsilon", array8d, "")

seq = sequence.create([ent0, ent1, ent2])
ents = entry.create_from_sequence("zeta", seq, "")

ref = reference.create_from_path("", ["group", "1"])
entr = entry.create_from_reference("eta", ref, "")

grp = group.create({"alpha": ent0,
"beta": ent1,
"gamma": ent2,
"delta": ent3,
"epsilon": ent8,
"zeta": ents,
"eta": entr})

project = asdf.create_from_group({}, grp)
project.write("demo-python.asdf")

print("Done.")

0 comments on commit e9b794d

Please sign in to comment.