Giter Site home page Giter Site logo

lanl / draco Goto Github PK

View Code? Open in Web Editor NEW
52.0 19.0 44.0 26.59 MB

An object-oriented component library supporting radiation transport applications.

License: Other

CMake 10.03% CSS 0.42% Shell 3.31% TeX 0.46% Makefile 0.02% Emacs Lisp 2.98% C++ 77.11% C 1.59% Python 3.43% Fortran 0.43% Cuda 0.04% Vim Script 0.03% Batchfile 0.13% HTML 0.01%

draco's Introduction

Draco

Summary

Draco is an object-oriented component library geared towards numerically intensive, radiation (particle) transport applications built for parallel computing hardware. It consists of semi-independent packages and a robust build system. The packages in draco provide a set of components that can be used by multiple clients to build transport codes. The build system can also be extracted for use in clients.

To clone draco:

git clone https://github.com/lanl/Draco.git

To get started, please see Development - Quick Start Guide in the wiki. Pull requests must satisfy the requirements listed in the Style Guide.

Spack - Draco can be installed via the spack package manager

Synopsis of Active Draco Packages

  • c4 - A communications library for message passing interfaces (MPI).
    • For builds without MPI, all communication commands will be no-op functions (DRACO_C4={MPI;SCALAR}). Also provides a wrapper to libquo
  • cdi - Access to material data. The Common Data Interface (CDI) specifies a common abstraction for objects and libraries that return material data (opacities, atomic cross sections, equation-of-state data, etc.)
  • cdi_analytic - Analytic models for physical data
  • cdi_CPEloss - Stopping power models for charged particles.
  • cdi_eospac - Equation-of-State data
    • These classes wrap the EOSPAC6 libraries that read sesame files; Commonly used to access gray opacity data and heat capacities. (EOSPAC_LIB_DIR=<path>).
  • cdi_ipcress - Gray and multigroup opacities
    • The classes in this component will read and parse opacity values from an IPCRESS file produced by TOPS.
  • cdi_ndi - Wrapper around LANL's Nuclear Data Interface (NDI) library for accessing nuclear data tables.
  • compton_interface - Provides access to Compton scattering models and data as provided by the CSK library..
  • compton_tools - Provides performant converter, reader, and interpolation tools for Compton data
  • device - Wrapper for heterogeneous device communication
    • The classes in this component provide access to DaCS (deprecated) and CUDA calls for use on heterogeneous architecture platforms (GPU machines).
  • diagnostics - CPP macros that are activated at compile time that can provide additional diagnostic verbosity during calculations.
  • ds++ - Basic services and data structures library.
    • Array containers, assertion and Design-by-Contract, access to low level OS functions, file and path manipulation, unit test system, etc.
  • experimental - Implementations of C++ features that are not yet available to all compilers that are used when installing Draco libraries. Currently, this component provides mdspan.
  • fc4 - Fortran wrapper around portions of c4
  • fit - Least squares fitting routines.
  • fpe_trap - Catch IEEE floating point exceptions
  • FortranCheck - Test Fortran compatibility and interoperability
    • The examples in this component will demonstrate if the Fortran compiler is working; if Fortran/C inter-language linking/running is working and sample ISO_C_BINDING calls.
  • kde - KDE are a natural extension of quadrature. They reconstruct a smooth representation of a sampled field based on a specified Kernel shape. This populates the initial KDE infrastructure and some simple 1D reconstructions.
  • linear - direct solvers for small linear systems of equations.
  • mesh - Encapsulate mesh definition and accessors.
  • mesh_element - defines fundamental mesh element types used by mesh, meshReaders and RTT_Format_Reader.
  • meshReaders - Read RTT format mesh files.
  • min - Optimization routines. Find the minimum of a function.
  • norms - Calculate norms for data sets.
  • ode - Ordinary differential equation solvers (e.g.: Runge-Kutta).
  • parser - Lexical file/input parser.
  • quadrature - access to angular integration functions and related data.
  • rng - A random number generator component
    • The primary set of functions provided by this component were derived from Random123 random number library. A few additional random number generators are also provided.
  • roots - Root finding algorithms
  • RTT_Format_Reader - meshReaders implementation for RTT format mesh files or input-streams.
  • special_functions - Specialized math functions like factorial and Dirac delta.
  • units - Provides encapsulated unit systems, functions to convert between unit systems and physical constants.
  • VendorChecks - A testing component to ensure that discovered and used vendor libraries behave as expected.
  • viz - Generates Ensight files for data visualization.

Deprecated packages

  • lapack_wrap - C++ wrapper for BLAS and LAPACK (removed 2022 July 12).
  • plot2d - C++ interface to XMGrace 2-dimensional plotting (removed 2020 Dec 3).
  • shared_lib - Dynamically load/unload shared object libraries via dl load (removed 2020 Sep 7).
  • traits - A traits class used by viz.

Authors

Many thanks go to Draco's contributors.

Draco was originally written by staff from Los Alamos's CCS-2 Computational Physics and Methods Group:

CCS-2 Draco Team: Kelly G. Thompson, Matt A. Cleveland, Ryan T. Wollaeger, Ben R. Ryan, Alex R. Long, Kendra P. Long, James S. Warsa, Jae H. Chang, and Jeff R. Haack.

Prior Contributors: Kent G. Budge, Gabriel M. Rockefeller, Allan B. Wollaber, Tim Kelley, Rob B. Lowrie, Paul W. Talbot, Katherine J. Wang, Andrew T. Till, Ondrej Certik, Peter Ahrens, David A. Dixon, Massimiliano Rosa, Todd J. Urbatsch, Daniel Holladay, Howard Pritchard, Jeff D. Densmore, Jeff Furnish, John McGhee, Kris C. Garrett, Mike Buksas, Nick Myers, Paul Henning, Randy Roberts, Seth Johnson, Todd Adams, Tom Evans, Lori Pritchett-Sheats, and Seth D. Cook.

Release

Draco is released under the BSD 3-Clause License. For more details see the LICENSE file.

draco's People

Contributors

alexrlongne avatar attom avatar berselius avatar brryan avatar certik avatar ckrisgarrett avatar clevelam avatar david8dixon avatar hppritcha avatar jhchang-lanl avatar keadyk avatar kgbudge avatar kinetictheory avatar lowrie avatar ryanwollaeger avatar timmah avatar warsa 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

Watchers

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

draco's Issues

For CRAY_PE do not use -xHost

When using the Cray compile wrappers, rely on the compile wrapper to set the -xhost or avx512 compile options.

if( NOT CRAY_PE)
  include(CheckCCompilerFlag)  
  check_c_compiler_flag(-xHost HAS_XHOST) 
   toggle_compiler_flag( HAS_XHOST "-xHost" "C;CXX"  "")
endif()

Fix build warnings (LLVM)

Consider removing CPP pragma code used for suppressing and simply duplicating code in each switch statement case block.

Extend travis-ci to reject PR if clang-format fails

We should be able to copy the basic concepts from https://github.com/LLNL/spack. They use flake8 on python code, but the travis.yml code should be very similar (see https://github.com/LLNL/spack/blob/develop/.travis.yml)

Errors in CDash report

It appears that error colorization by gcc is confusing CDash's output. Output may look like this..

[NON-XML-CHAR-0x1B][01m[NON-XML-CHAR-0x1B][Kg++:[NON-XML-CHAR-0x1B][m[NON-XML-CHAR-0x1B][K [NON-XML-CHAR-0x1B][01;31m[NON-XML-CHAR-0x1B][Kerror: [NON-XML-CHAR-0x1B][m[NON-XML-CHAR-0x1B][KCMakeFiles/Ut_dsxx_tstFMA_exe.dir/tstFMA.cc.o: ...

I think changing the gcc flags -fdiagnostics-color=always to -fdiagnostics-color=auto will fix this.

PR252 causes many Jayenne and Capsaicin tests to fail

Ref #252.

It is hard for me to understand how these changes could cause so many failures Maybe we should revert the merge.

The one place that is tricky is in CDI.cc where I change if(T==0.0) to a soft_equiv(T,0.0,2.0e-16). Maybe we should use min() instead of epsilon().

-kt

Totalview no longer works on ccs-net machines.

Comments from Rob Cunningham (2017-07-27)

You’re right, this is indeed weird. And I’d say you have the right idea — I believe Open MPI 2.x here at LANL has some explicit configuration settings that favor our local clusters. Sockets and pipes breaking suggest Open MPI 2.x looks to be making assumptions about the OS version, or the interconnect fabric/hardware, something inherent in the design on the HPC cluster — some component that is different on your CCS departmental servers (as you suggest).

The intermittent nature of the problem is troublesome. I wonder about system load, network congestion, I/O traffic, etc. That is, other jobs running on the CCS servers. Does this happen on a quiet system?

When I first heard the description, I assumed it was the problem we usually see with Totalview — the symbol tables generated by the compiler. That still might be worth a brief test to see if the same thing happens with a different compiler. However, that’s a real stretch, it’s hard to tie together a symbol table misinterpretation to a pipe error.

Use new features of CMake-3.6.0

New features:

  • Begin supporting OpenBLAS (blas+lapack)
  • Take advantage of FindPkgConfig's ability to generate imported targets.
  • A "VS_STARTUP_PROJECT" directory property was introduced to specify for Visual Studio Generators the default startup project for generated solutions (".sln" files).
  • The "install()" command learned a new "EXCLUDE_FROM_ALL" option to leave installation rules out of the default installation.
  • The "list()" command gained a "FILTER" sub-command to filter list elements by regular expression.

Deprecated features (that might cause build issues):

  • The "find_library()", "find_path()", and "find_file()" commands no longer search in installation prefixes derived from the "PATH" environment variable on non-Windows platforms. This behavior was added in CMake 3.3 to support Windows hosts but has proven problematic on UNIX hosts. Users that keep some "/bin" directories in the "PATH" just for their tools do not necessarily want any supporting "/lib" directories searched. One may set the "CMAKE_PREFIX_PATH" environment variable with a ;-list of prefixes that are to be searched.
  • The precompiled OS X binary provided on "cmake.org" now requires OS X 10.7 or newer.

Reference: https://cmake.org/cmake/help/v3.6/release/3.6.html

Update travis to use newer OpenMPI

  • Require MPI_VER > 1.6 when OpenMPI. Build system should fail for older versions.
  • Update travis script to install a newer openmpi (1.10.3?)

Travis-CI matrix option WERROR=ON does not run as expected

Our build system is throwing away the -Werror compiler flag so the WERROR=ON CI check is identical to the no-opts check. This can be fixed, but I will need to pass the extra compile flags to cmake with a new variable. Maybe we should consider honoring ENV{CFLAGS}, ENV{CXXFLAGS} and ENV{FFLAGS}.

Allow linking to superlu-dist-5+

Jae and KT discussed this earlier today. The superlu-dist API has changed. We would like to support both 4.X and 5.X.

In 5.X, the type superlu_options_t is not defined.

Invert_Comm_Map should communicate data size to be exchanged

c4's Invert_Comm_Map currently takes a std::vector as input and output arguments, which are the vector of procs that the current proc will send/receive information to/from. Instead, it should take a std::map<int, size_t>, that maps proc number to the data size to be sent/received. Here, "size" is up to the user; it could be the number of elements in a container, or the actual number of bytes; it doesn't matter to this routine.

This change should give a very small decrease in performance, because size_t values would be communicated, instead of int values. But it would allow users to eliminate the extra communication step of determining the size of information to be received.

Should a particle know its tracking state?

Should a particle know whether it's analog, DDMC, random walk, etc.? I ask this because the particle knows several meta-state things about itself (cell, communication status, advection state) but there are still a lot of extra flags inside the transporter that get passed along with the particle that could be removed if the particle knew more about itself. I think we could include extra state data inside of the weird packed integer. From a design perspective, is it better to keep the particle state smaller and pass flags or to add more state data to the particle?

Use new features of CMake-3.11.0

Generators

  • The Makefile Generators and the "Ninja" generator learned to add compiler launcher tools along with the compiler for the "Fortran" language ("C", "CXX", and "CUDA" were supported previously). See the "CMAKE_<LANG>_COMPILER_LAUNCHER" variable and "<LANG>_COMPILER_LAUNCHER" target property for details.

Commands

  • "add_library()" and "add_executable()" commands can now be called without any sources and will not complain as long as sources are added later via the "target_sources()" command.
  • The "target_compile_definitions()" command learned to set the "INTERFACE_COMPILE_DEFINITIONS" property on Imported Targets.
  • The "target_compile_features()" command learned to set the "INTERFACE_COMPILE_FEATURES" property on Imported Targets.
  • The "target_compile_options()" command learned to set the "INTERFACE_COMPILE_OPTIONS" property on Imported Targets.
  • The "target_include_directories()" command learned to set the "INTERFACE_INCLUDE_DIRECTORIES" property on Imported Targets.
  • The "target_sources()" command learned to set the "INTERFACE_SOURCES" property on Imported Targets.
  • The "target_link_libraries()" command learned to set the "INTERFACE_LINK_LIBRARIES" property on Imported Targets.
  • The "COMPILE_DEFINITIONS" source file property learned to support "`generator expressions".
  • A "COMPILE_OPTIONS" source file property was added to manage list of options to pass to the compiler.

Variables

  • A "CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS" variable was added to enable setting of default permissions for directories created implicitly during installation of files by "install()" and "file(INSTALL)", e.g. during "make install".
  • A "CMAKE_JOB_POOLS" variable was added specify a value to use for the "JOB_POOLS" property. This enables control over build parallelism with command line configuration parameters when using the Ninja generator.
  • A "CMAKE_CUDA_SEPARABLE_COMPILATION" variable was added to initialize the "CUDA_SEPARABLE_COMPILATION" target property on targets when they are created.

Properties

  • The "COMPILE_DEFINITIONS" source file property learned to support "`generator expressions".
  • A "COMPILE_OPTIONS" source file property was added to manage list of options to pass to the compiler.

Modules

  • The "CheckIncludeFile" module "check_include_file" macro learned to honor the "CMAKE_REQUIRED_LIBRARIES" variable.
  • The "CheckIncludeFileCXX" module "check_include_file_cxx" macro learned to honor the "CMAKE_REQUIRED_LIBRARIES" variable.
  • The "CheckIncludeFiles" module "check_include_files" macro learned to honor the "CMAKE_REQUIRED_LIBRARIES" variable.
  • The "CheckIncludeFiles" module "CHECK_INCLUDE_FILES()" command gained a "LANGUAGE" option to specify whether to check using the "C" or "CXX" compiler.
  • The "FindBLAS" and "FindLAPACK" modules learned to support FLAME "blis" and "libflame".
  • The "FindDoxygen" module "doxygen_add_docs()" function now supports a new "DOXYGEN_VERBATIM_VARS" list variable. Any "DOXYGEN_..." variable contained in that list will bypass the automatic quoting logic, leaving its contents untouched when transferring them to the output "Doxyfile".

Other

  • Alias Targets may now alias Imported Targets that are created with the "GLOBAL" option to "`add_library()".
  • The "cmake(1)" "--open <dir>" command-line option was added to open generated IDE projects like Visual Studio solutions or Xcode projects.

Other Changes

  • Since the "CMakeCache.txt" format does not support newlines in values, values containing newlines are now truncated before writing to the file. In addition, a warning comment is written to the cache file, and a warning message is displayed to the user on the console.

Cielito: cannot clone from github

Cielito cannot see github. Regressions (rtt.lanl.gov/cdash) will show 'fail' for update. We will not fix this issue as this machine will be retired in 3 weeks. Once Trinitite regressions are working correctly, we will stop testing on Cielito and close this ticket.

Merge mods for Trinity back to 'develop'

  • Changes to support trinity were implemented in the source folder for draco-6_19_1, but not merged into the 'develop' branch.
  • Tag or release (via github) draco-6_19_1.

metrics_report not working after move to github

The script used to generate a monthly metrics report (code coverage, loc) is no longer working after draco was moved to github. I think this has to do with new paths used by the regression system. I will look into patching this script.

Use new features of cmake-3.12.0

CMake 3.12 Release Notes

New Features

Changes made since CMake 3.11 include the following.

Generators

  • The Visual Studio Generators for VS 2017 learned to support a "version=14.##" option in the "CMAKE_GENERATOR_TOOLSET" value (e.g. via the "cmake(1)" "-T" option) to specify a toolset version number.

Command-Line

  • The "cmake(1)" Build Tool Mode ("cmake --build") gained "--parallel []" and "-j []" options to specify a parallel build level. They map to corresponding options of the native build tool.

Commands

  • The "add_compile_definitions()" command was added to set preprocessor definitions at directory level. This supersedes "add_definitions()".
  • The "cmake_minimum_required()" and "cmake_policy(VERSION)" commands now accept a version range using the form "[...]". The "" version is required but policies are set based on the "" version. This allows projects to specify a range of versions for which they have been updated and avoid explicit policy settings.
  • The "file(GLOB)" and "file(GLOB_RECURSE)" commands learned a new flag "CONFIGURE_DEPENDS" which enables expression of build system dependency on globbed directory's contents.
  • The "file(TOUCH)" and "file(TOUCH_NOCREATE)" commands were added to expose "TOUCH" functionality without having to use CMake's command- line tool mode with "execute_process()".
  • The "find_package()" command now searches a prefix specified by a "PackageName_ROOT" CMake or environment variable. Package roots are maintained as a stack so nested calls to all "find_*" commands inside find modules also search the roots as prefixes. See policy "CMP0074".
  • The "install()" command learned an optional "NAMELINK_COMPONENT" parameter, which allows you to change the component for a shared library's namelink. If none is specified, the value of "COMPONENT" is used by default.
  • The "list()" command learned a "JOIN" sub-command to concatenate list's elements separated by a glue string.
  • The "list()" command learned a "SUBLIST" sub-command to get a sublist of the list.
  • The "list()" command learned a "TRANSFORM" sub-command to apply various string transformation to list's elements.
  • The "project()" command learned an optional "HOMEPAGE_URL" parameter which has the effect of setting variables like "PROJECT_HOMEPAGE_URL", "_HOMEPAGE_URL" and "CMAKE_PROJECT_HOMEPAGE_URL".
  • The "string()" command learned a "JOIN" sub-command to concatenate input strings separated by a glue string.
  • "target_compile_options()" and "add_compile_options()" commands gained a "SHELL:" prefix to specify a group of related options using shell-like quoting.
  • The "target_link_libraries()" command now supports Object Libraries. Linking to an object library uses its object files in direct dependents and also propagates usage requirements.
  • The "target_link_libraries()" command may now be called to modify targets created outside the current directory.

Variables

  • The "CMAKE_FOLDER" variable was added to initialize the "FOLDER" property on all targets.
  • The "CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION" variable was defined to initialize all "DOTNET_TARGET_FRAMEWORK_VERSION" target properties.
  • "CMAKE_PROJECT_VERSION*" variables have been introduced:
    • "CMAKE_PROJECT_VERSION"
    • "CMAKE_PROJECT_VERSION_MAJOR"
    • "CMAKE_PROJECT_VERSION_MINOR"
    • "CMAKE_PROJECT_VERSION_PATCH"
    • "CMAKE_PROJECT_VERSION_TWEAK"
  • The "CMAKE_SUPPRESS_REGENERATION" variable was extended to support the "Ninja" and Makefile Generators. It is also now documented.
  • "CMAKE_VS_SDK_*_DIRECTORIES" variables were defined to tell Visual Studio Generators for VS 2010 and above how to populate fields in ".vcxproj" files that specify SDK directories. The variables are:
    • "CMAKE_VS_SDK_EXCLUDE_DIRECTORIES"
    • "CMAKE_VS_SDK_EXECUTABLE_DIRECTORIES"
    • "CMAKE_VS_SDK_INCLUDE_DIRECTORIES"
    • "CMAKE_VS_SDK_LIBRARY_DIRECTORIES"
    • "CMAKE_VS_SDK_LIBRARY_WINRT_DIRECTORIES"
    • "CMAKE_VS_SDK_REFERENCE_DIRECTORIES"
    • "CMAKE_VS_SDK_SOURCE_DIRECTORIES"
  • A "MSVC_TOOLSET_VERSION" variable was added to provide the MSVC toolset version associated with the current MSVC compiler version in "MSVC_VERSION".

Properties

  • The "COMMON_LANGUAGE_RUNTIME" target property was introduced to configure the use of managed C++ for Visual Studio Generators for VS 2010 and above. A corresponding "IMPORTED_COMMON_LANGUAGE_RUNTIME" target property was added to support "C++/CLI" for imported targets.
  • The "DOTNET_TARGET_FRAMEWORK_VERSION" target property was introduced as replacement for "VS_DOTNET_TARGET_FRAMEWORK_VERSION", which is considered deprecated now.
  • An "EXPORT_PROPERTIES" target property was added to specify a custom list of target properties to include in targets exported by the "install(EXPORT)" and "export()" commands.
  • The "PDB_OUTPUT_DIRECTORY" property learned to support "generator expressions".
  • A "TESTS" directory property was added to hold the list of tests defined by the "add_test()" command.
  • A "VS_DEBUGGER_COMMAND" target property was created to set the debugging command line with Visual Studio Generators for VS 2010 and above.
  • HLSL source file properties "VS_SHADER_DISABLE_OPTIMIZATIONS" and "VS_SHADER_ENABLE_DEBUG" gained support for generator expressions.
  • HLSL source file property "VS_SHADER_OBJECT_FILE_NAME" has been added to the Visual Studio Generators for VS 2010 and above. The property specifies the file name of the compiled shader object.

Modules

  • The "FindALSA" module now provides imported targets.
  • The "FindCURL" module now provides imported targets.
  • The "FindJPEG" module now provides imported targets.
  • The "FindLibXml2" module now provides imported targets.
  • The "FindMatlab" module now supports the Matlab Runtime Compiler (MCR) for compiling and linking matlab extensions.
  • A "FindODBC" module was added to find an Open Database Connectivity (ODBC) library.
  • The "FindPkgConfig" module has learned to export the found libraries with full path for direct consumption with the "target_link_libraries()" command.
  • New "FindPython3" and "FindPython2" modules, as well as a new "FindPython" module, have been added to provide a new way to locate python environments.
  • The "UseSWIG" module gained a whole refresh and is now more consistent with standard CMake commands to generate libraries and is fully configurable through properties.
  • The "UseSWIG" module learned to manage multiple behaviors through "UseSWIG_MODULE_VERSION" variable to ensure legacy support as well as more robust handling of "SWIG" advanced features (like "%template").
  • The "UseSWIG" module learned to support CSHARP variant wrapper files.
  • The "WriteCompilerDetectionHeader" module gained a "BARE_FEATURES" option to add a compatibility define for the exact keyword of a new language feature.

Generator Expressions

  • A new "$<GENEX_EVAL:...>" and "$<TARGET_GENEX_EVAL:target,...>" "generator expression" has been added to enable consumption of generator expressions whose evaluation results itself in generator expressions.
  • A new "$<IN_LIST:...>" "generator expression" has been added.
  • A new "$<TARGET_EXISTS:...>" "generator expression" has been added.
  • A new "$<TARGET_NAME_IF_EXISTS:...>" "generator expression" has been added.

CTest

  • The "ctest_start()" command has been reworked so that you can simply call "ctest_start(APPEND)" and it will read all the needed information from the TAG file. The argument parsing has also been relaxed so that the order of the arguments is less significant.
  • A "PROCESSOR_AFFINITY" test property was added to request that CTest run a test with CPU affinity for a set of processors disjoint from other concurrently running tests with the property set.

Other

  • The "Compile Features" functionality is now aware of C++ 20. No specific features are yet enumerated besides the "cxx_std_20" meta-feature.
  • The "Compile Features" functionality is now aware of the availability of C features in MSVC since VS 2010.
  • The "Compile Features" functionality is now aware of C language standards supported by Texas Instruments C compilers.

Other Changes

  • Fortran dependency scanning now supports dependencies implied by Fortran Submodules.

Using spack to fulfill TPL requirements

Provide detailed instructions for using spack to generate all required third party libraries and tools.

This would allow developers to build and test draco from any Linux machine w/o specialized vendor support.

Lots of warnings about CMP0069 after upgrade to CMake-3.9

Example:

CMake Warning (dev) at config/component_macros.cmake:299 (add_library):
  Policy CMP0069 is not set: INTERPROCEDURAL_OPTIMIZATION is enforced when
  enabled.  Run "cmake --help-policy CMP0069" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  INTERPROCEDURAL_OPTIMIZATION property will be ignored for target
  'Lib_dsxx'.
Call Stack (most recent call first):
  src/ds++/CMakeLists.txt:93 (add_component_library)
This warning is for project developers.  Use -Wno-dev to suppress it.

Ref: https://cmake.org/cmake/help/git-stage/policy/CMP0069.html

sync_repository.sh might start too many jobs

The logic in sync_repository.sh that is used to kick of CI testing on LANL internal systems may occasionally start more than one set of tests for the same PR. For example, this script might report something like this:

==> git fetch origin +refs/pull/*:refs/pull/*
From https://github.com/losalamos/Draco
   62e3f64..75d7891  refs/pull/214/head -> refs/pull/214/head
 + 05f55ee...b8d6437 refs/pull/214/merge -> refs/pull/214/merge  (forced update)

Because there are two entries for PR 214, tests for 214 will be started twice. This is easily fixed by use of sort -u and will be submitted as a PR soon.

CodeCov is no longer integrated with GitHub?

The tail from a recent log

$ if [[ ${COVERAGE} ]]; then codecov --gcov-exec gcov-6; fi

      _____          _
     / ____|        | |
    | |     ___   __| | ___  ___ _____   __
    | |    / _ \ / _  |/ _ \/ __/ _ \ \ / /
    | |___| (_) | (_| |  __/ (_| (_) \ V /
     \_____\___/ \____|\___|\___\___/ \_/
                                    v2.0.9

==> Detecting CI provider
    Travis Detected
==> Preparing upload
==> Processing gcov (disable by -X gcov)
    Executing gcov (find /home/travis/build/lanl/Draco -type f -name '*.gcno'  -exec gcov-6 -pb  {} +)
==> Collecting reports
    + /home/travis/build/lanl/Draco/openmpi-1.10.5/ompi/mca/io/romio/romio/confdb/aclocal_coverage.m4 bytes=3585
==> Appending environment variables
    + TRAVIS_OS_NAME
==> Uploading
    .url https://codecov.io
    .query pr=305&service=travis&package=py2.0.9&yaml=.codecov.yml&job=278835013&build=1087.2&branch=develop&commit=e71f674f84a6c837683485b18200a88677587b88&slug=lanl%2FDraco
    Pinging Codecov...
    Uploading to S3...
    https://codecov.io/github/lanl/Draco/commit/e71f674f84a6c837683485b18200a88677587b88

Make Lmod the default on ccs-net machines

Lmod is now available on ccs-net machines. I would like to make this the default module system on ccs-net machines.

Testing:

  • I have provided a bash function that will switch a developer's environment to Lmod; switch_to_lmod

To Do:

  • I am working on modifying the CI and Regression scripts to work with Lmod. This is mostly done, but the valgrind_suppression file will need to be regenerated and this takes some time. This is not directly related to this ticket, but because the new Lmod module system only provides TPL's generated with [email protected] and [email protected], the old valgrind_supress.txt file is no longer valid. We can't switch the CI/regression tests to the new system until the valgrind suppression file is updated.
  • Update Draco's environment/bashrc/.bashrc_linux64 to include the setup found in switch_to_lmod (environment/bin/bash_functions.sh).
  • Debug builds with [email protected] might need additional sanitizer options enabled.

Adopt OpenMPI-1.10.x

Here are some of the reasons to switch to OpenMPI 1.10 (from 1.6.5). These changes will help Jayenne in several ways:

  • Improved performance of collective operations
  • Allow us to investigate non-blocking collective operations for particle completion messages
  • Potentially adopt new domain decomposition schemes that use one-sided RMA operations

These points are present in the changelogs as well:

OpenMPI 1.7

  • Entirely new implementation of many MPI collective routines focused on better performance.

OpenMPI 1.7.4

  • MPI-3: Added support for remaining non-blocking collectives.
  • MPI-3: Added support for neighborhood collectives.

OpenMPI 1.7.5

  • MPI-3: Added support for new RMA functions and functionality.

OpenMPI 1.8

  • Several fixes for MPI-3 one-sided support. For example, arbitrary-length datatypes are now supported.

OpenMPI 1.8.2

  • More RMA fixes.

.t.hh and .i.hh files

The Draco library has both .t.hh and .i.hh files containing definitions of templates declared in .hh files. I see no clear distinction between the two. If there is such a distinction which I have missed, where is it documented?

Use new features of CMake-3.10

Key items

  • The flang Fortran compiler is now supported, with compiler id "Flang".
  • The "include_guard()" command was introduced to allow guarding CMake scripts from being included more than once. The command supports "DIRECTORY" and "GLOBAL" options to adjust the corresponding include guard scope. If no options given, include guard is similar to basic variable-based check.
  • "FindMPI" received a major overhaul. It now features language specific components, better Fortran support, and support for statically linked MPI implementations.

New Features

Platforms

  • The flang Fortran compiler is now supported, with compiler id "Flang".

Generators

  • The Makefile Generators and the "Ninja" generator learned to add compiler launcher tools like ccache along with the compiler for the "CUDA" language ("C" and "CXX" were supported previously). See the
    "CMAKE__COMPILER_LAUNCHER" variable and "_COMPILER_LAUNCHER" target property for details.

Commands

  • The "cmake_host_system_information()" command learned more keys to get information about the processor capabilities and the host OS version.
  • The "configure_file()" command learned to support indented "# cmakedefine" and "# cmakedefine01". Spaces and/or tabs between the "#" character and the "cmakedefine"/"cmakedefine01" words are now understood and preserved in the output.
  • The "execute_process()" command gained a "RESULTS_VARIABLE" option to collect a list of results from all children in a pipeline of processes when multiple "COMMAND" arguments are given.
  • The "include_guard()" command was introduced to allow guarding CMake scripts from being included more than once. The command supports "DIRECTORY" and "GLOBAL" options to adjust the corresponding include guard scope. If no options given, include guard is similar to basic variable-based check.
  • The "string()" command learned a new "PREPEND" subcommand.
  • The "string(TIMESTAMP)" command now supports "%A" for full weekday name and "%B" for full month name.

Variables

  • A "CMAKE_DIRECTORY_LABELS" variable was added to specify labels for all tests in a directory.

Properties

  • A "CPPCHECK" target property and supporting "CMAKE_CPPCHECK" variable were introduced to tell the Makefile Generators and the "Ninja" generator to run "cppcheck" with the compiler for "C" and "CXX" languages.
  • A "LABELS" directory property was added to specify labels for all targets and tests in a directory.

Modules

  • "FindMPI" gained a number of new features, including:
    • Language-specific components have been added to the module.
    • Many more MPI environments are now supported.
    • The environmental support for Fortran has been improved.
    • A user now has fine-grained control over the MPI selection process, including passing custom parameters to the MPI compiler.
    • The version of the implemented MPI standard is now being exposed.
    • MPI-2 C++ bindings can now be detected and also suppressed if so desired.
    • The available Fortran bindings are now being detected and verified.
    • Various MPI-3 information can be requested, including the library version and Fortran capabilities of the individual bindings.
    • Statically linked MPI implementations are supported.

Reference

Travis builds are failing

All PRs on github.com/lanl/draco are failing the Travis checks due to the error:

1.32s$ pip install --upgrade setuptools
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
  SNIMissingWarning

I'll need to update the travis build environment to fix this.

Use new features of CMake-3.9.0

CMake-3.9 has some new features that Draco should consider adopting. A few interesting items are:

  • Commands

    • All "find_" commands now have a "PACKAGE_ROOT" search path group that is first in the search heuristics. If a "find_" command is called from inside a find module, then the CMake variable and environment variable named "_ROOT" are used as prefixes and are the first set of paths to be searched.
    • The "project()" command learned an optional "DESCRIPTION" parameter to set the "PROJECT_DESCRIPTION" variable.
    • The "separate_arguments()" command gained a "NATIVE_COMMAND" mode that performs argument separation depending on the host operating system.
  • Variables

    • A "CMAKE_INTERPROCEDURAL_OPTIMIZATION" variable was added to initialize the "INTERPROCEDURAL_OPTIMIZATION" property on all targets.
    • The "CMAKE_SYSROOT_COMPILE" and "CMAKE_SYSROOT_LINK" variables were added to use separate sysroots for compiling and linking.
  • Properties

    • A "CUDA_PTX_COMPILATION" target property was added to Object Libraries to support compiling to ".ptx" files instead of host object files.
    • A "GENERATOR_IS_MULTI_CONFIG" global property was added to determine whether the current generator is a multi-configuration generator (such as Visual Studio Generators or "Xcode").
    • The "INTERPROCEDURAL_OPTIMIZATION" target property is now enforced when enabled. CMake will add IPO flags unconditionally or produce an error if it does not know the flags for the current compiler. The project is now responsible to use the "CheckIPOSupported" module to check for IPO support before enabling the target property. See policy "CMP0069".
    • The "WINDOWS_EXPORT_ALL_SYMBOLS" target property may now be used in combination with explicit ".def" files in order to export all symbols from the object files within a target plus an explicit list of symbols that the linker finds in dependencies (e.g. "msvcrt.lib").
  • Modules

    • A "CheckIPOSupported" module was added to help projects check whether interprocedural optimization (IPO) is supported by the current toolchain and CMake version.
    • The "FeatureSummary" module "feature_summary()" command now accepts the new "DEFAULT_DESCRIPTION" option that will print the default title for the selected package type.
    • The "FeatureSummary" module gained a new "FeatureSummary__DESCRIPTION" variable that can be defined for each "" to replace the type name with the specified string whenever the package type is used in an output string by the module.
    • The "FindDoxygen" module learned to control Doxygen behavior using CMake variables and generate documentation via the newly added "doxygen_add_docs()" function. The Doxygen input file ("Doxyfile") is automatically generated and doxygen is run as part of a custom target. Additional components can be specified to find optional tools: "dot", "mscgen" and "dia".
    • The "FindMPI" module now provides imported targets.
  • CTest

    • The "ctest_submit()" command gained a "HTTPHEADER" option to specify custom headers to send during submission.
    • A "DISABLED" test property was added to mark tests that are configured but explicitly disabled so they do not run.
  • Other

    • Interprocedural optimization (IPO) is now supported for GNU and Clang compilers using link time optimization (LTO) flags. See the "INTERPROCEDURAL_OPTIMIZATION" target property and "CheckIPOSupported" module.
  • Other Changes

    • When running tests, CTest learned to treat skipped tests (using the "SKIP_RETURN_CODE" property) the same as tests with the new "DISABLED" property. Due to this change, CTest will not indicate failure when all tests are either skipped or pass.
  • Documentation is available at: https://cmake.org/cmake/help/v3.9

  • Release notes appear below and are also published at https://cmake.org/cmake/help/v3.9/release/3.9.html

Use new features of CMake-3.7.0

Commands:

  • The cmake_parse_arguments() command gained a new PARSE_ARGV mode to read arguments directly from ARGC and ARGV# variables inside a function() body.
  • The if() command gained new boolean comparison operations LESS_EQUAL, GREATER_EQUAL, STRLESS_EQUAL, STRGREATER_EQUAL, VERSION_LESS_EQUAL, and VERSION_GREATER_EQUAL.
  • The string(TIMESTAMP) and file(TIMESTAMP) commands gained support for the %a and %b placeholders. These are the abbreviated weekday and month names.

Properties:

  • A BINARY_DIR directory property was added to get the absolute path to the binary directory corresponding to the source directory on which the property is read.
  • A BUILDSYSTEM_TARGETS directory property was added to get the list of logical build system target names added by the project in a directory.
  • A SOURCE_DIR directory property was added to get the absolute path to the source directory associated with a directory.
  • A SUBDIRECTORIES directory property was added to get the list of subdirectories added by a project in a directory.
  • The WINDOWS_EXPORT_ALL_SYMBOLS target property now applies to executable targets with the ENABLE_EXPORTS property set.
  • A XCODE_FILE_ATTRIBUTES source file property was added to tell the Xcode generator to generate custom content in the Xcode project attributes for the file.

Modules:

  • The CheckFortranSourceCompiles module macro CHECK_Fortran_SOURCE_COMPILES gained a SRC_EXT option to specify a custom test Fortran source file extension.
  • The FindOpenMP module learned to detect the OpenMP version (specification date) from the compiler.

CTest:

  • CTest now supports test fixtures through the new FIXTURES_SETUP, FIXTURES_CLEANUP and FIXTURES_REQUIRED test properties. When using regular expressions or --rerun-failed to limit the tests to be run, a fixture’s setup and cleanup tests will automatically be added to the execution set if any test requires that fixture.
  • The ctest_configure(), ctest_build(), ctest_test(), ctest_coverage(), and ctest_upload() commands gained a new CAPTURE_CMAKE_ERROR option to capture any errors that occur as the commands run into a variable and avoid affecting the return code of the ctest(1) process.

Other:

  • A new cmake-server(7) mode was added to provide semantic information about a CMake-generated buildsystem to clients through a JSON protocol. Currently all protocols are experimental and subject to change.
  • The cmake(1) command learned a --trace-source=<file> option.
  • ccmake(1) learned to support vim-like navigation bindings.
  • cmake-gui(1) gained a button to open the generated project file for Visual Studio Generators and the Xcode generator.
  • vim-cmake-syntax project
  • The Fortran dependency scanner learned to support the syntax of Fortran Submodules.
  • Vim support files indent/cmake.vim and syntax/cmake.vim from the vim-cmake-syntax project are now distributed with CMake.

IWYU issues

IWUY

Info

https://include-what-you-use.org/

Installation

  1. Downloaded and expand sources for 0.10.
  2. module list
    user_contrib cmake/3.11.1
  3. mkdir build && cd $_
  4. llvm_loc=spack location -i [email protected]
  5. Must install into the llvm directory (ugh).
cmake -D IWYU_LLVM_INCLUDE_PATH=${llvm_loc}/include -D IWYU_LLVM_LIB_PATH=${llvm_loc}/lib \
-D CURSES_CURSES_LIBRARY=/scratch/vendors/spack.20180425/opt/spack/linux-rhel7-x86_64/clang-6.0.0/ncurses-6.0-33aiabd5htmhlzctx64gh2zkspprw7fm/lib/libncurses.so \
-DCMAKE_INSTALL_PREFIX=${llvm_loc} ../include-what-you-use
  1. make -j install

Manual use with Draco

  1. Load draco tools for clang
module load $dracomodules
module swap gcc llvm
  1. I needed to add the ncurses path to LD_LIBRARY_PATH.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/scratch/vendors/spack.20180425/opt/spack/linux-rhel7-x86_64/clang-6.0.0/ncurses-6.0-33aiabd5htmhlzctx64gh2zkspprw7fm/lib
  1. Configure with IWYU enabled and build
cmakedebug \
"-DCMAKE_CXX_INCLUDE_WHAT_YOU_USE=${llvm_loc}/bin/include-what-you-use;-Xiwyu;--transitive_includes_only" \
~/draco

make VERBOSE=1 Lib_dsxx
  1. Worked for Assert.cc but fails for DracoStrings.cc
cd /scratch/kellyt/llvm-mpid/d/src/ds++ && \
/scratch/vendors/spack.20180425/opt/spack/linux-rhel7-x86_64/clang-6.0.0/cmake-3.11.1-4eusqiiadp5xyyi7ai3cr2nbartqubbq/bin/cmake \
-E __run_co_compile \
--iwyu="/scratch/vendors/spack.20180425/opt/spack/linux-rhel7-x86_64/gcc-4.8.5/llvm-6.0.0-qtihyueuqp7m7meo6lq26yne5f7qoech/bin/include-what-you-use;-Xiwyu;--transitive_includes_only" \
-- /scratch/vendors/spack.20180425/opt/spack/linux-rhel7-x86_64/gcc-4.8.5/llvm-6.0.0-qtihyueuqp7m7meo6lq26yne5f7qoech/bin/clang++  \
-DLib_dsxx_EXPORTS -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 \
-D__STDC_CONSTANT_MACROS -I/home/kellyt/draco/src -I/scratch/kellyt/llvm-mpid/d/src/ds++  \
-Wcast-align -Wpointer-arith -Wall -Wno-long-long -pedantic -stdlib=libc++ \
-Wno-potentially-evaluated-expression -Wno-undefined-var-template -fopenmp=libomp  -g \
-fno-inline -O0 -Wextra -DDEBUG -Woverloaded-virtual -fPIC   -std=c++14 \
-o CMakeFiles/Lib_dsxx.dir/DracoStrings.cc.o -c /home/kellyt/draco/src/ds++/DracoStrings.cc

Error running \
'/scratch/vendors/spack.20180425/opt/spack/linux-rhel7-x86_64/gcc-4.8.5/llvm-6.0.0-qtihyueuqp7m7meo6lq26yne5f7qoech/bin/include-what-you-use': /scratch/kellyt/include-what-you-use/iwyu.cc:3311: \
Assertion failed: class_decl && "TemplateSpecializationType is not a TplSpecDecl?"
Child aborted

Build fails with pgi-15

The PGI compiler does not provide std::array. config/platform_checks.cmake must be updated to avoid setting HAVE_CXX11_ARRAY.

Use new features of CMake-3.8.0

New features found in CMake-3.8

CUDA

  • CMake learned to support "CUDA" as a first-class language that can be enabled via the "project()" and "enable_language()" commands.
  • "CUDA" is currently supported by the Makefile Generators and the "Ninja" generator on Linux, macOS, and Windows. Support for the Visual Studio IDE is under development but not included in this release.
  • The NVIDIA CUDA Toolkit compiler ("nvcc") is supported.

C & C++

  • The "Compile Features" functionality now offers meta-features that request compiler modes for specific language standard levels (e.g. "cxx_std_11"). See "CMAKE_C_KNOWN_FEATURES" and "CMAKE_CXX_KNOWN_FEATURES".
  • The "Compile Features" functionality is now aware of the availability of C99 in gcc since version 3.4.

Commands

  • The "add_custom_command()" and "add_custom_target()" commands learned the option "COMMAND_EXPAND_LISTS" which causes lists in the
    "COMMAND" argument to be expanded, including lists created by generator expressions.
  • The "string(TIMESTAMP)" command learned to treat "%%" as a way to encode plain "%".
  • The "string(TIMESTAMP)" command will now honor the"SOURCE_DATE_EPOCH" environment variable and use its value instead of the current time.
  • The "try_compile()" command source file signature gained new options to specify the language standard to use in the generated test project.
  • The "try_compile()" command source file signature now honors language standard variables like "CMAKE_CXX_STANDARD". See policy "CMP0067".

Variables

  • A "CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD" variable was added to tell Visual Studio Generators for VS 2010 and above to include the "PACKAGE" target in the default build, similar to the existing "CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD" variable for the "INSTALL" target.

Properties

  • A "BUILD_RPATH" target property and corresponding "CMAKE_BUILD_RPATH" variable were added to support custom "RPATH" locations to be added to binaries in the build tree.
  • The "COMPILE_FLAGS" source file property learned to support "generator expressions".
  • Imported Interface Libraries learned new "IMPORTED_LIBNAME" and "IMPORTED_LIBNAME_" target properties to specify a link library name since interface libraries do not build their own library files.
  • A "MANUALLY_ADDED_DEPENDENCIES" target property has been added. It provides a read-only list of dependencies that have been added with the "add_dependencies()" command.
  • The "MAP_IMPORTED_CONFIG_" target property learned to interpret empty list elements as referring to the configuration-less imported location specified by "IMPORTED_LOCATION".
  • The "NO_SYSTEM_FROM_IMPORTED" target property is now supported on Imported Interface Libraries.
  • A "VS_COPY_TO_OUT_DIR" source file property was added to tell Visual Studio Generators for VS 2010 and above whether or not a file should be copied to the output directory.
  • A "VS_DEBUGGER_WORKING_DIRECTORY" target property was added to tell Visual Studio Generators for VS 2010 and above what debugger working directory should be set for the target.
  • A "VS_USER_PROPS" target property was added to tell Visual Studio Generators for VS 2010 and above to use a custom MSBuild user ".props" file.
  • A "XCODE_EMIT_EFFECTIVE_PLATFORM_NAME" global property was added to tell the "Xcode" generator whether to emit the "EFFECTIVE_PLATFORM_NAME" variable. This is useful when building with multiple SDKs like "macosx" and "iphoneos" in parallel.
  • New "XCODE_PRODUCT_TYPE" and "XCODE_EXPLICIT_FILE_TYPE" target properties were created to tell the "Xcode" generator to use custom values of the corresponding attributes for a target in the generated Xcode project.

Modules

  • FindMPI: Use physical cores for MPIEXEC_MAX_NUMPROCS
  • The "ExternalData" module learned to support multiple content links for one data file using different hashes, e.g. "img.png.sha256" and "img.png.sha1". This allows objects to be fetched from sources indexed by different hash algorithms.
  • The "ExternalProject" module gained the "GIT_PROGRESS" option to force Git to show progress when cloning repositories.
  • The "ExternalProject" module gained a "GIT_CONFIG" option to pass " --config" options to Git when cloning repositories.
  • The "FeatureSummary" module "feature_summary()" command now accepts a new "QUIET_ON_EMPTY" option that suppresses the output when the list of packages that belong to the selected category is empty.
  • The "FeatureSummary" module "add_feature_info()" command now accepts lists of dependencies for deciding whether a feature is enabled or not.
  • The package types accepted by the "FeatureSummary" module can now be tweaked by changing the "FeatureSummary_PKG_TYPES", "FeatureSummary_REQUIRED_PKG_TYPES" and "FeatureSummary_DEFAULT_PKG_TYPE" global properties.

CTest

  • The "ctest_memcheck()" command gained a "DEFECT_COUNT " option to capture the number of memory defects detected.
  • The "ctest_memcheck()" command learned to read the location of suppressions files for sanitizers from the "CTEST_MEMORYCHECK_SUPPRESSIONS_FILE" variable.
  • The "ctest_memcheck()" command learned to support "LeakSanitizer" independently from "AddressSanitizer".
  • The "ctest_update()" command "CDASH_UPLOAD" signature was taught to honor the "RETRY_COUNT", "RETRY_DELAY", and "QUIET" options.

Other

  • A new generator expression "$IF:cond,true-value,false-value" was added. It resolves to the true-value if the condition is "1" and resolves to the false-value if the condition is "0".

Deprecated and Removed Features

  • The "FeatureSummary" module commands "set_package_info()", "set_feature_info()", "print_enabled_features()", and "print_disabled_features()" are now deprecated.

Other Changes

  • If a command specified by the "_CLANG_TIDY" target property returns non-zero at build time this is now treated as an error instead of silently ignored.
  • The "ctest_memcheck()" command no longer automatically adds "leak_check=1" to the options used by "AddressSanitizer". The default behavior of "AddressSanitizer" is to run LeakSanitizer to check leaks unless "leak_check=0".
  • The "ctest_memcheck()" command was fixed to correctly append extra sanitizer options read from the "CTEST_MEMORYCHECK_SANITIZER_OPTIONS" variable to the environment variables used internally by the sanitizers.
  • The "FeatureSummary" module "set_package_properties()" command no longer forces the package type to "OPTIONAL" when the type is not explicitly set.
  • The "Compile Features" functionality is now aware of features supported by Intel C++ compilers versions 12.1 through 17.0 on UNIX and Windows platforms.
  • Calls to the "FindPkgConfig" module "pkg_check_modules()" command following a successful call learned to re-evaluate the cached values for a given prefix after changes to the parameters to the command for that prefix.
  • The "try_compile()" command source file signature now honors the "CMAKE_WARN_DEPRECATED" variable value in the generated test project.

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.