Giter Club home page Giter Club logo

obake's Introduction

language Linux Build Status Windows Build Status OSX Build Status Azure Build Status Code Coverage license Anaconda-Server Badge DOI

Obake (お化け) [...] are a class of yōkai, preternatural creatures in Japanese folklore. Literally, the terms mean a thing that changes, referring to a state of transformation or shapeshifting.

obake is a C++20 library for the symbolic manipulation of sparse polynomials and other closely-related mathematical objects (e.g., truncated power series, Poisson series, etc.). obake is the successor of the piranha project.

If you are using obake as part of your research, teaching, or other activities, we would be grateful if you could star the repository and/or cite our work. The DOI of the latest version and other citation resources are available at this link.

obake is under active development. Preliminary documentation (including installation instructions) is available here.

obake's People

Stargazers

 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

obake's Issues

libobake.so.7.0 doesn't have a SONAME

The FreeBSD ports framework identified this problem:

====> Running Q/A tests (stage-qa)
Warning: /disk-samsung/freebsd-ports/math/obake/work/stage/usr/local/lib/libobake.so.7.0 doesn't have a SONAME.
Warning: pkg(8) will not register it as being provided by the port.
Warning: If another port depend on it, pkg will not be able to know where it comes from.
Warning: It is directly in /usr/local/lib, it is probably used by other ports.

alphabetical order of symbols gives different results

I noticed some surprising behavior compared to Piranha. I boiled it down to a minimal example as follows. Basically depending on the alphabetical order of the symbols I use, I see different results:

    using Rational = mppp::rational<1>;
    using Monomial = obake::packed_monomial<unsigned int>;
    using Polynomial = obake::polynomial<Monomial, Rational>;
    
    auto x = "x"
#if 1   // <---------------------------------- WORKS
    auto y = "y";
#else   // <---------------------------------- BROKEN
    auto y = "e";
#endif

    auto [p_x, p_y] = obake::make_polynomials<Polynomial>(x, y);

    auto x2y_version1 = obake::integrate(p_x*p_x, y);

    auto x2y_version2 = p_x*p_x*p_y;

    std::cout << x2y_version1 << std::endl;
    std::cout << x2y_version2 << std::endl;

    auto x2_version1 =
    obake::subs(x2y_version1, obake::symbol_map<Polynomial>{{y, Polynomial{1} }});

    auto x2_version2 =
    obake::subs(x2y_version2, obake::symbol_map<Polynomial>{{y, Polynomial{1} }});

    std::cout << x2_version1 << std::endl;
    std::cout << x2_version2 << std::endl;

If I set y to "y", then I get the following output:

Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'x', 'y'}
Number of terms : 1
x**2*y
Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'x', 'y'}
Number of terms : 1
x**2*y
Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'x', 'y'}
Number of terms : 1
x**2
Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'x', 'y'}
Number of terms : 1
x**2

This result makes sense. However, if I set y to a letter that appears earlier in the alphabet, like "e", then I get the following output:

Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'x', 'e'}
Number of terms : 1
x**2*e
Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'e', 'x'}
Number of terms : 1
e*x**2
Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'x', 'e'}
Number of terms : 1
x**2*e
Key type        : obake::polynomials::packed_monomial<unsigned int, void>
Coefficient type: mppp::rational<1ul>
Tag             : obake::polynomials::tag
Rank            : 1
Symbol set      : {'e', 'x'}
Number of terms : 1
x**2

You can see, that it produces x**2*e vs. e*x**2 and then substitution fails to occur leaving x**2*e instead of x**2. The same behavior occurs if I set y to "w"

msvc compilation error

Compiled with VS2019 Version 16.7.2, MSVC 19.27.29110.0, with flags /std:c++17 /Zc:__cplusplus

Minimal reproducer:

#ifndef NOMINMAX
#  define NOMINMAX
#endif

#ifndef WIN32_LEAN_AND_MEAN
#  define WIN32_LEAN_AND_MEAN
#endif

#include <mp++/integer.hpp>
#include <mp++/rational.hpp>

#include <obake/polynomials/d_packed_monomial.hpp>
#include <obake/polynomials/polynomial.hpp>

int main(int argc, char** argv)
{
    using Rational = mppp::rational<1>;
    using Integer = mppp::integer<1>;

    using Monomial = obake::d_packed_monomial<unsigned long, 8>;
    using Polynomial = obake::polynomial<Monomial, Rational>;

    return 0;
}

Error message:

1>\obake\include\obake/series.hpp(141,60): error C2938: 'std::enable_if_t<false,void>' : Failed to specialize alias template
1>\obake\include\obake/series.hpp(141): message : see reference to alias template instantiation 'std::enable_if_t<false,void>' being compiled
1>test.cpp(22): message : see reference to alias template instantiation 'obake::polynomial<Monomial,Rational>' being compiled
1>\obake\include\obake/polynomials/polynomial.hpp(86,20): error C2976: 'obake::series': too few template arguments
1>\obake\include\obake/series.hpp(688): message : see declaration of 'obake::series'

The error points to this line:

template <typename K, typename C, typename, typename = ::std::enable_if_t<::std::conjunction_v<is_key<K>, is_cf<C>>>>

Visibility linker warnings

I'm sorry I missed this in #146. But I started getting warnings like:

ld: warning: direct access in function 'obake::detail::ss_intersect_idx(boost::container::flat_set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void> const&, boost::container::flat_set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void> const&)' from file '/obake/Debug/libobake.a(symbols.o)' to global weak symbol 'obake::safe_cast<unsigned long>' from file '/Debug/Objects-normal/x86_64/test.o' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.

These go away by also guarding the properties with OBAKE_BUILD_STATIC_LIBRARY:

if(OBAKE_BUILD_STATIC_LIBRARY)
    add_library(obake STATIC "${OBAKE_SRC_FILES}")
    target_compile_definitions(obake PUBLIC OBAKE_STATIC_BUILD)
else()
    add_library(obake SHARED "${OBAKE_SRC_FILES}")
    set_property(TARGET obake PROPERTY VERSION "8.0")
    set_property(TARGET obake PROPERTY SOVERSION 8)
    set_target_properties(obake PROPERTIES CXX_VISIBILITY_PRESET hidden)
    set_target_properties(obake PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
endif()

This suppresses the warnings, but I don't really understand the visibility properties, so am wondering does this change make sense?

Operators for quantum mechanics

Hi! I want to develop a new C++ project using obake. The project will compute derivatives of an expression of some operators in quantum mechanics, and afterward evaluate the derivatives numerically by using some external numerical functions. So my questions are:

  1. Operators in quantum mechanics usually do not commute, i.e. A*B is not equal to B*A where A and B are two operators, and * is multiplication. Moreover, an operator A can be a "function" of multi-variables, e.g. x, y, z, etc.. Is there any class in obake that I can use to represent these operators? If not, can I make a derived class for these operators?
  2. Take A*B as an example. When a derivative with respect to a variable x is computed, I want Derivative(A, x)*B + A*Derivative(B, x) to return as a result. Afterwards, I can evaluate this result numerically by replacing Derivative(A, x), B, A and Derivative(B, x) with external numerical function(s). Is it possible and how?

Thank you in advance.

0.8.0: Fails to build due to libfmt issues

===>  Building for obake-0.8.0
[ 25% 2/4] /usr/local/libexec/ccache/c++ -DFMT_SHARED -Dobake_EXPORTS -I/usr/ports/math/obake/work/obake-0.8.0/include -I/usr/ports/math/obake/work/.build/include -isystem /usr/local/include -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED  -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -ftemplate-depth=1024 -fdiagnostics-show-template-tree -pthread -std=c++20 -MD -MT CMakeFiles/obake.dir/src/polynomials/d_packed_monomial.cpp.o -MF CMakeFiles/obake.dir/src/polynomials/d_packed_monomial.cpp.o.d -o CMakeFiles/obake.dir/src/polynomials/d_packed_monomial.cpp.o -c /usr/ports/math/obake/work/obake-0.8.0/src/polynomials/d_packed_monomial.cpp
FAILED: CMakeFiles/obake.dir/src/polynomials/d_packed_monomial.cpp.o 
/usr/local/libexec/ccache/c++ -DFMT_SHARED -Dobake_EXPORTS -I/usr/ports/math/obake/work/obake-0.8.0/include -I/usr/ports/math/obake/work/.build/include -isystem /usr/local/include -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED  -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -ftemplate-depth=1024 -fdiagnostics-show-template-tree -pthread -std=c++20 -MD -MT CMakeFiles/obake.dir/src/polynomials/d_packed_monomial.cpp.o -MF CMakeFiles/obake.dir/src/polynomials/d_packed_monomial.cpp.o.d -o CMakeFiles/obake.dir/src/polynomials/d_packed_monomial.cpp.o -c /usr/ports/math/obake/work/obake-0.8.0/src/polynomials/d_packed_monomial.cpp
In file included from /usr/ports/math/obake/work/obake-0.8.0/src/polynomials/d_packed_monomial.cpp:16:
In file included from /usr/ports/math/obake/work/obake-0.8.0/include/obake/polynomials/d_packed_monomial.hpp:30:
/usr/local/include/fmt/core.h:2743:12: error: call to deleted constructor of 'conditional_t<has_formatter<mapped_type, context>::value, formatter<mapped_type, char_type>, fallback_formatter<stripped_type, char_type>>' (aka 'fmt::detail::fallback_formatter<mppp::integer<1>>')
  auto f = conditional_t<has_formatter<mapped_type, context>::value,
           ^
/usr/local/include/fmt/core.h:2954:23: note: in instantiation of function template specialization 'fmt::detail::parse_format_specs<mppp::integer<1>, fmt::detail::compile_parse_context<char>>' requested here
        parse_funcs_{&parse_format_specs<Args, parse_context_type>...},
                      ^
/usr/local/include/fmt/core.h:3159:47: note: in instantiation of member function 'fmt::detail::format_string_checker<char, fmt::detail::error_handler, mppp::integer<1>>::format_string_checker' requested here
      detail::parse_format_string<true>(str_, checker(s, {}));
                                              ^
/usr/ports/math/obake/work/obake-0.8.0/include/obake/polynomials/d_packed_monomial.hpp:436:45: note: in instantiation of function template specialization 'fmt::basic_format_string<char, mppp::integer<1> &>::basic_format_string<char[8], 0>' requested here
                    *cur_oss << fmt::format("^{{{}}}", tmp_mp);
                                            ^
/usr/local/include/fmt/core.h:1124:3: note: 'fallback_formatter' has been explicitly marked deleted here
  fallback_formatter() = delete;
  ^
/usr/local/include/fmt/core.h:1756:3: error: static_assert failed due to requirement 'formattable' "Cannot format an argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/latest/api.html#udt"
  static_assert(
  ^
/usr/local/include/fmt/core.h:1777:10: note: in instantiation of function template specialization 'fmt::detail::make_value<fmt::basic_format_context<fmt::appender, char>, mppp::integer<1> &>' requested here
  return make_value<Context>(val);
         ^
/usr/local/include/fmt/core.h:1899:23: note: in instantiation of function template specialization 'fmt::detail::make_arg<true, fmt::basic_format_context<fmt::appender, char>, fmt::detail::type::custom_type, mppp::integer<1> &, 0>' requested here
        data_{detail::make_arg<
                      ^
/usr/local/include/fmt/core.h:1918:10: note: in instantiation of function template specialization 'fmt::format_arg_store<fmt::basic_format_context<fmt::appender, char>, mppp::integer<1>>::format_arg_store<mppp::integer<1> &>' requested here
  return {FMT_FORWARD(args)...};
         ^
/usr/local/include/fmt/core.h:3206:28: note: in instantiation of function template specialization 'fmt::make_format_args<fmt::basic_format_context<fmt::appender, char>, mppp::integer<1> &>' requested here
  return vformat(fmt, fmt::make_format_args(args...));
                           ^
/usr/ports/math/obake/work/obake-0.8.0/include/obake/polynomials/d_packed_monomial.hpp:436:38: note: in instantiation of function template specialization 'fmt::format<mppp::integer<1> &>' requested here
                    *cur_oss << fmt::format("^{{{}}}", tmp_mp);
                                     ^
2 errors generated.
[ 50% 2/4] /usr/local/libexec/ccache/c++ -DFMT_SHARED -Dobake_EXPORTS -I/usr/ports/math/obake/work/obake-0.8.0/include -I/usr/ports/math/obake/work/.build/include -isystem /usr/local/include -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED  -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -ftemplate-depth=1024 -fdiagnostics-show-template-tree -pthread -std=c++20 -MD -MT CMakeFiles/obake.dir/src/polynomials/packed_monomial.cpp.o -MF CMakeFiles/obake.dir/src/polynomials/packed_monomial.cpp.o.d -o CMakeFiles/obake.dir/src/polynomials/packed_monomial.cpp.o -c /usr/ports/math/obake/work/obake-0.8.0/src/polynomials/packed_monomial.cpp
FAILED: CMakeFiles/obake.dir/src/polynomials/packed_monomial.cpp.o 
/usr/local/libexec/ccache/c++ -DFMT_SHARED -Dobake_EXPORTS -I/usr/ports/math/obake/work/obake-0.8.0/include -I/usr/ports/math/obake/work/.build/include -isystem /usr/local/include -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED  -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -ftemplate-depth=1024 -fdiagnostics-show-template-tree -pthread -std=c++20 -MD -MT CMakeFiles/obake.dir/src/polynomials/packed_monomial.cpp.o -MF CMakeFiles/obake.dir/src/polynomials/packed_monomial.cpp.o.d -o CMakeFiles/obake.dir/src/polynomials/packed_monomial.cpp.o -c /usr/ports/math/obake/work/obake-0.8.0/src/polynomials/packed_monomial.cpp
In file included from /usr/ports/math/obake/work/obake-0.8.0/src/polynomials/packed_monomial.cpp:17:
/usr/local/include/fmt/core.h:2743:12: error: call to deleted constructor of 'conditional_t<has_formatter<mapped_type, context>::value, formatter<mapped_type, char_type>, fallback_formatter<stripped_type, char_type>>' (aka 'fmt::detail::fallback_formatter<mppp::integer<1>>')
  auto f = conditional_t<has_formatter<mapped_type, context>::value,
           ^
/usr/local/include/fmt/core.h:2954:23: note: in instantiation of function template specialization 'fmt::detail::parse_format_specs<mppp::integer<1>, fmt::detail::compile_parse_context<char>>' requested here
        parse_funcs_{&parse_format_specs<Args, parse_context_type>...},
                      ^
/usr/local/include/fmt/core.h:3159:47: note: in instantiation of member function 'fmt::detail::format_string_checker<char, fmt::detail::error_handler, mppp::integer<1>>::format_string_checker' requested here
      detail::parse_format_string<true>(str_, checker(s, {}));
                                              ^
/usr/ports/math/obake/work/obake-0.8.0/src/polynomials/packed_monomial.cpp:172:41: note: in instantiation of function template specialization 'fmt::basic_format_string<char, mppp::integer<1> &>::basic_format_string<char[8], 0>' requested here
                *cur_oss << fmt::format("^{{{}}}", tmp_mp);
                                        ^
/usr/local/include/fmt/core.h:1124:3: note: 'fallback_formatter' has been explicitly marked deleted here
  fallback_formatter() = delete;
  ^
/usr/local/include/fmt/core.h:1756:3: error: static_assert failed due to requirement 'formattable' "Cannot format an argument. To make type T formattable provide a formatter<T> specialization: https://fmt.dev/latest/api.html#udt"
  static_assert(
  ^
/usr/local/include/fmt/core.h:1777:10: note: in instantiation of function template specialization 'fmt::detail::make_value<fmt::basic_format_context<fmt::appender, char>, mppp::integer<1> &>' requested here
  return make_value<Context>(val);
         ^
/usr/local/include/fmt/core.h:1899:23: note: in instantiation of function template specialization 'fmt::detail::make_arg<true, fmt::basic_format_context<fmt::appender, char>, fmt::detail::type::custom_type, mppp::integer<1> &, 0>' requested here
        data_{detail::make_arg<
                      ^
/usr/local/include/fmt/core.h:1918:10: note: in instantiation of function template specialization 'fmt::format_arg_store<fmt::basic_format_context<fmt::appender, char>, mppp::integer<1>>::format_arg_store<mppp::integer<1> &>' requested here
  return {FMT_FORWARD(args)...};
         ^
/usr/local/include/fmt/core.h:3206:28: note: in instantiation of function template specialization 'fmt::make_format_args<fmt::basic_format_context<fmt::appender, char>, mppp::integer<1> &>' requested here
  return vformat(fmt, fmt::make_format_args(args...));
                           ^
/usr/ports/math/obake/work/obake-0.8.0/src/polynomials/packed_monomial.cpp:172:34: note: in instantiation of function template specialization 'fmt::format<mppp::integer<1> &>' requested here
                *cur_oss << fmt::format("^{{{}}}", tmp_mp);
                                 ^
/usr/ports/math/obake/work/obake-0.8.0/src/polynomials/packed_monomial.cpp:204:13: note: in instantiation of function template specialization 'obake::polynomials::detail::(anonymous namespace)::packed_monomial_tex_stream_insert<int>' requested here
    detail::packed_monomial_tex_stream_insert(os, m, s);
            ^
2 errors generated.

libfmt-9.1.0
clang-14
FreeBSD 13.1

Compilation error in MSVC using C++20

Similar to bluescarni/mppp#291, I am attempting to compile using MSVC in C++20 mode. I just encountered the following error:

\obake\include\obake/polynomials/polynomial.hpp(204): error C2101: '&' on constant

in reference to:

        constexpr int arr[] = {1};

        // Create and add a new term.
        retval.add_term(series_key_t<T>(&arr[0], &arr[0] + 1), 1);

I modified the code as follows, in which case compilation succeeded:

        static constexpr int arr[] = {1};

        // Create and add a new term.
        retval.add_term(series_key_t<T>(&arr[0], &arr[0] + 1), 1);

I am still on an older version of Obake 0.6.0. However, the current version of Obake has the same snippet of code above.

Would it make sense to do a PR with the modification above?

After some dependency update obake now breaks

[ 53% 9/15] /usr/bin/c++ -DFMT_SHARED -Dobake_EXPORTS -I/wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/include -I/wrkdirs/usr/ports/math/obake/work/.build/include -isystem /usr/local/include -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED  -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -ftemplate-depth=1024 -fdiagnostics-show-template-tree -pthread -std=c++20 -MD -MT CMakeFiles/obake.dir/src/series.cpp.o -MF CMakeFiles/obake.dir/src/series.cpp.o.d -o CMakeFiles/obake.dir/src/series.cpp.o -c /wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/src/series.cpp
FAILED: CMakeFiles/obake.dir/src/series.cpp.o 
/usr/bin/c++ -DFMT_SHARED -Dobake_EXPORTS -I/wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/include -I/wrkdirs/usr/ports/math/obake/work/.build/include -isystem /usr/local/include -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED -O2 -pipe -fstack-protector-strong -fno-strict-aliasing  -DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED  -DNDEBUG -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -ftemplate-depth=1024 -fdiagnostics-show-template-tree -pthread -std=c++20 -MD -MT CMakeFiles/obake.dir/src/series.cpp.o -MF CMakeFiles/obake.dir/src/series.cpp.o.d -o CMakeFiles/obake.dir/src/series.cpp.o -c /wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/src/series.cpp
In file included from /wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/src/series.cpp:14:
/wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/include/obake/series.hpp:306:109: error: no matching literal operator for call to 'operator""_format' with arguments of types 'const char *' and 'unsigned long', and no matching literal operator template
                                                         "is not compatible with the series' symbol set, {}"_format(
                                                                                                            ^
/wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/include/obake/series.hpp:311:77: error: no matching literal operator for call to 'operator""_format' with arguments of types 'const char *' and 'unsigned long', and no matching literal operator template
                                "compatible with the series' symbol set, {}"_format(detail::to_string(ss)));
                                                                            ^
/wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/include/obake/series.hpp:1862:85: error: no matching literal operator for call to 'operator""_format' with arguments of types 'const char *' and 'unsigned long', and no matching literal operator template
                                                     "a non-negative integral value"_format(e));
                                                                                    ^
/wrkdirs/usr/ports/math/obake/work/obake-0.7.0-24-gb8cc71c/include/obake/series.hpp:1877:80: error: no matching literal operator for call to 'operator""_format' with arguments of types 'const char *' and 'unsigned long', and no matching literal operator template
            "series/coefficient types do not support the necessary operations)"_format(::obake::type_name<rT>()));
                                                                               ^
4 errors generated.

Version: 0.7.0-24

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.