These are chat archives for bluescarni/pagmo_reborn

11th
May 2016
Marcus Märtens
@CoolRunning
May 11 2016 06:40
Dario Izzo
@darioizzo
May 11 2016 06:40
lol !
Marcus Märtens
@CoolRunning
May 11 2016 06:41
Overwatch was fun though - hard to deny
Francesco Biscani
@bluescarni
May 11 2016 08:05
std::vector<double> sample_from_simplex(std::vector<double> in) shouldn't this be a const reference?
Francesco Biscani
@bluescarni
May 11 2016 08:16
no it does need a copy
Dario Izzo
@darioizzo
May 11 2016 08:23
its modified internally and returned
I can make it a const ref but then I need a copy inside
Francesco Biscani
@bluescarni
May 11 2016 08:23
yes I saw
Dario Izzo
@darioizzo
May 11 2016 08:24
congrates fo the appveyor :) cool stuff
Francesco Biscani
@bluescarni
May 11 2016 08:24
that's what happens when there's no dota night :p
would be nice to have an OSX ci eventually
but for now I think we are ok
Dario Izzo
@darioizzo
May 11 2016 08:27
does it also include the python stuff? like creation of _core.so ?
Francesco Biscani
@bluescarni
May 11 2016 08:27
no, that is probably all broken at the moment
Dario Izzo
@darioizzo
May 11 2016 08:28
right ... let me finish with stochastic (docs + tests) then we may 1) fix python 2) start the algo
Francesco Biscani
@bluescarni
May 11 2016 08:28
I need to understand how to do the numpy thing decently, but it's not easy.. I'd feel more comfortable if it was boost python to be honest
Dario Izzo
@darioizzo
May 11 2016 08:28
being out of your comfort zone its good .... its exciting, challenging, new :) !
Francesco Biscani
@bluescarni
May 11 2016 08:29
:) not much in this case
just need to learn the quirks of yet another library
and it makes me a bit nervous to depend on pybind
Dario Izzo
@darioizzo
May 11 2016 08:30
we can still go back. If appveyor creates the bundle and uploads automatically a new release already well packaged, we can have some boost dependency
The reason not to have boost is to easy the packaging, but if we have a good automated system to do it, then .....
Francesco Biscani
@bluescarni
May 11 2016 08:31
we'll see, I have a full boost stack ready on the virtual machine... I just extracted the headers and unit test library for appveyor
Dario Izzo
@darioizzo
May 11 2016 08:31
I also like the pybind11 automatic container conversions
which boost does not have ....
Francesco Biscani
@bluescarni
May 11 2016 08:32
I think pybind packaging wise does not save us much, we will still have to provide some libraries with pagmo if we don't want to give out a crippled version
and the automatic conversion is just the problem right now ironically
but we'll see
Dario Izzo
@darioizzo
May 11 2016 08:32
k
Francesco Biscani
@bluescarni
May 11 2016 08:33
maybe I am just worrying too much, but I did not like much the attitude of the guy regarding the serialization issues, and I don't like very much the coding style in pybind
Dario Izzo
@darioizzo
May 11 2016 08:34
but but, .....
in general you do not like anyone nor any style
so I would not consider it as a "marker" :)
Francesco Biscani
@bluescarni
May 11 2016 08:34
not true.. cereal looks good for instance :)
or boost
Dario Izzo
@darioizzo
May 11 2016 08:35
I did her you complaining about cereal and to a lesser extent boost
Cereal -> not well maintained, risky, do not trust them (you bitching about it a month back)
Boost -> serialization versioning is ridiculous, what was in their mind?
Francesco Biscani
@bluescarni
May 11 2016 08:35
cereal I was complaining about the lack of development (which is actually not true)
Dario Izzo
@darioizzo
May 11 2016 08:36
Just kidding dude
Francesco Biscani
@bluescarni
May 11 2016 08:36
yeah yeah
Dario Izzo
@darioizzo
May 11 2016 09:04
finished.
Do we want an example / tutorial on the stochastic problem?
Francesco Biscani
@bluescarni
May 11 2016 09:06
do we have tutorials on everything else?
➜  build_clang git:(lambify_improvement) ✗ ls -lsatrh /home/yardbird/.local/lib/python3.4/site-packages/pyranha/_core.so
1.1G -rwxr-xr-x 1 yardbird yardbird 1.1G May 11 11:02 /home/yardbird/.local/lib/python3.4/site-packages/pyranha/_core.so
look at the size..
Dario Izzo
@darioizzo
May 11 2016 09:37
well ... thats something :)
template metaprog effects?
tutorials, no we do not. At the moment I only wrote two tutorials: one to show the use of the user problem, the other to introduce hessians and gradients ideas
Francesco Biscani
@bluescarni
May 11 2016 09:39
when you strip it, it goes down to 86MB, and this is a debug build... In release mode, a full zipped and stripped build is 5MB
so not too bad
Dario Izzo
@darioizzo
May 11 2016 09:39
stripped of what?
Dario Izzo
@darioizzo
May 11 2016 10:16
I just pushed a tutorial on the stochastic problem ... care to check if its well made?
I am wondering, do you ever use git status and git diff before committing? :)
Dario Izzo
@darioizzo
May 11 2016 10:26
sometimes
but mostly I forget :)
its there now ....
I skipped the ci though
btw ... what a stupid error message. Instead of saying "file not found" he complains he could not determine the linker language for the file
HONESTLY
Francesco Biscani
@bluescarni
May 11 2016 10:57

looks good, but I am always puzzled by your use of stringstream:

            std::ostringstream s;
            s << "This is just a simple toy problem with one fitness, " << '\n';
            s << "no constraint and a fixed dimension of 4." << "\n";
            return s.str();

What is wrong with

return "This is just a simple toy problem with one fitness,\n no constraint and a fixed dimension of 4.\n";

?

Francesco Biscani
@bluescarni
May 11 2016 11:08
        std::string get_name() const
        {   
            return std::string("My Problem");
        }
this one as well, can be just return "My Problem";
btw I think [skip ci] does not work with gitlab ci, probably the command is different
Dario Izzo
@darioizzo
May 11 2016 11:29
Its advanced programming, you would not understand
Francesco Biscani
@bluescarni
May 11 2016 11:29
:)
Dario Izzo
@darioizzo
May 11 2016 11:42
so what now? algorithm?
Francesco Biscani
@bluescarni
May 11 2016 12:05
you could fix the tutorial :)
but then yeah, I guess the algorithm is next... then things should get more interesting
Dario Izzo
@darioizzo
May 11 2016 12:11
tutorial is "fixed"
Dario Izzo
@darioizzo
May 11 2016 12:21
struct algo_inner_base
{
    virtual ~algo_inner_base() {}
    virtual algo_inner_base *clone() const = 0;
    virtual void evolve(population &pop) const = 0;
    virtual void set_seed(unsigned int) = 0;
    virtual void set_screen_output(bool) = 0;
    virtual std::string get_name() const = 0;
    virtual std::string get_extra_info() const = 0;

    template <typename Archive>
    void serialize(Archive &) {}
};
something like this?
The user must implement evolve and set_seed, may implement all other methods.
Francesco Biscani
@bluescarni
May 11 2016 12:22
I'd rewrite the evolve to return a copy of pop and pass in the population as const reference
because like that in Python it will not work
Dario Izzo
@darioizzo
May 11 2016 12:23
wow, really? also in c++ we want to copy the whole pop?
In python we can have a small wrapper making the copy
Francesco Biscani
@bluescarni
May 11 2016 12:24
we could write that wrapper, but then you have the confusion of different apis from Python and C++
besides, why would you expect the cost of copying the population to be any relevant?
Dario Izzo
@darioizzo
May 11 2016 12:24
So we want to "offer" the same API. This will necessarily bring suboptimal choices for c++. Do we care?
Francesco Biscani
@bluescarni
May 11 2016 12:25
relevant with respect to an evolve I mean
Dario Izzo
@darioizzo
May 11 2016 12:25
Pop can be huge and, say you only evolve for one generation at a time, you could encounter situations where this counts. But the truth is I never did ...
I usually work with small pops
Francesco Biscani
@bluescarni
May 11 2016 12:26
you still have to iterate at least once on the population to do something, anything, with those individuals
Dario Izzo
@darioizzo
May 11 2016 12:26
Example: you have a pop of 10000 individuals. You call a local optimizer that selects only one individual and makes one hill climb step.
Like this you would evaluate the fitness only once. An pay the cost of copying 10000 individuals .....
Is this something we care about? Well in python there is little we can do, but in c++ are we renouncing to offer the most efficient library to c++ guys?
Francesco Biscani
@bluescarni
May 11 2016 12:27
we made already tons of suboptimal choices... example, I want to minimise x^2 and the cost of copying the fitness vector is 10^3 times the cost of evaluating a single objective
Dario Izzo
@darioizzo
May 11 2016 12:27
I do not have an opinion, just asking
Francesco Biscani
@bluescarni
May 11 2016 12:28
shuold we optimise the API for that scenario?
Dario Izzo
@darioizzo
May 11 2016 12:28
no, because x^2 is idiotic.
But studying the use of huge populations may be interesting to some
Francesco Biscani
@bluescarni
May 11 2016 12:29
keep in mind that when you have clustering you can't even get around making a copy, you even have to serialize it
the point is not huge populations
huge populations are fine as long as you are reading at least once every individual
the problem is the case you make above in which you use 1 individual and ignore the other 9999
is it idiotic like x^2? I have no idea :)
Dario Izzo
@darioizzo
May 11 2016 12:31
It will be the default behaviour for our local algo. They will pick an individual from the pop (random or best) and work on it
Francesco Biscani
@bluescarni
May 11 2016 12:31
if you do anything, even just reading it, to all or most individuals of a pop then your cost of copying it is paid for
ok but then you are saying we should account for a scenario in which one:
  • uses 0.01% indivduals,
  • does a single evolution step
Dario Izzo
@darioizzo
May 11 2016 12:32
I understand. The point is 1) Do we offer the same API in c++ and python. 2) We code in c++ efficiently and then wrap it to python 3) We develop in c++ thinking about python and taking an averagely good decision for both cases?
Francesco Biscani
@bluescarni
May 11 2016 12:32
I don't know as I am not an evolutionary guy, so maybe it's important... I just don't know... but this is a decision we will have to live forever with
Marcus Märtens
@CoolRunning
May 11 2016 12:33
I have no strong opinion on this, but when in doubt, I would vote for more consistency at the expense of performance.
Francesco Biscani
@bluescarni
May 11 2016 12:33
I would like to offer the same API yes, I think it's important to have the two versions as close as possible, so one does not have to learn things twice
Dario Izzo
@darioizzo
May 11 2016 12:34
ok then its decided
Marcus Märtens
@CoolRunning
May 11 2016 12:34
for corner cases where performance is really the deal-breaker, people will hack their own code anyway I guess?
Dario Izzo
@darioizzo
May 11 2016 12:34
We try to offer the same API as much as possible.
Marcus Märtens
@CoolRunning
May 11 2016 12:34
The use of libraries comes with overhead
So people should not expect the absolute optimum performance.
Not that we should not care about it
Dario Izzo
@darioizzo
May 11 2016 12:34
struct algo_inner_base
{
    virtual ~algo_inner_base() {}
    virtual algo_inner_base *clone() const = 0;
    virtual population evolve(const population &pop) const = 0;
    virtual void set_seed(unsigned int) = 0;
    virtual void set_screen_output(bool) = 0;
    virtual std::string get_name() const = 0;
    virtual std::string get_extra_info() const = 0;

    template <typename Archive>
    void serialize(Archive &) {}
};
Marcus Märtens
@CoolRunning
May 11 2016 12:34
But so far copying population hasn't been an issue, right?
Dario Izzo
@darioizzo
May 11 2016 12:35
Nope
so far huge population were not even alloweda s the multiobjective stuff prevented anything larger than ~300
Francesco Biscani
@bluescarni
May 11 2016 12:35
so what I am talking about with the Python issue above is the following:
Dario Izzo
@darioizzo
May 11 2016 12:35
Try in the old PaGMO to instantiate a population with 10000 inds, you can wait 1 hour :)
so I am not 100% sure that the same thing happens in boost.python, and I don't know if it is a more general limitation
but that was the main decision behind having the impl_ methods implemented the way they are in the old pagmo
Marcus Märtens
@CoolRunning
May 11 2016 12:37
Well, you can't have it all, I guess. I see more pending issues created by inconsistencies than by that. It always adds this "but in C++ it works a little bit different" to it, which I don't like on a basic level.
Francesco Biscani
@bluescarni
May 11 2016 12:37
it seemed like less hassle just to have an api with copies around
Dario Izzo
@darioizzo
May 11 2016 12:43
So ..... to summarize: mandatory methods will be evolve and set_seed. optional methods set_screen_output, get_name, get_extra_info ...
We may also consider having set seed as optional ....
Francesco Biscani
@bluescarni
May 11 2016 12:44
wait, why set_seed mandatory?
Dario Izzo
@darioizzo
May 11 2016 12:45
right ... so that deterministic algorithms do not have to implement all the random_engine stuff ....
Francesco Biscani
@bluescarni
May 11 2016 12:45
yeah
Dario Izzo
@darioizzo
May 11 2016 12:45
I can use the same type traits too right?
I mean the signatures are identical ... so
only need for adding screen_output type trait
Francesco Biscani
@bluescarni
May 11 2016 12:46
yes.. you need new ones only for set_screen_output() and evolve()
Dario Izzo
@darioizzo
May 11 2016 12:46
k
Francesco Biscani
@bluescarni
May 11 2016 12:46
maybe I'd call it set_verbose()?
doesn't matter
as you prefer
Dario Izzo
@darioizzo
May 11 2016 12:47
verbose has levels?
like set_verbose(unsigned int)
?
or just a bool ?
Right now our algorithms either print on screen or do not. The exception is for third party algos, they sometime have a level of screen output
Francesco Biscani
@bluescarni
May 11 2016 12:51
maybe yeah the verbose level would be good
Dario Izzo
@darioizzo
May 11 2016 13:08
template <typename T>
class has_evolve: detail::sfinae_types
{
        template <typename U>
        static auto test0(const U &p) -> decltype(p.evolve(std::declval<const population &>()));
        static no test0(...);
        static const bool implementation_defined =
            std::is_same<population,decltype(test0(std::declval<const T &>()))>::value;
    public:
        /// static const boolean value flag
        static const bool value = implementation_defined;
};

template <typename T>
const bool has_evolve<T>::value;
If i call pagmo::has_evolve<my_algo>, the T is my_algo. Why when calling test0 I want to pass him a const ref to my_algo and not my_algo directly?
Francesco Biscani
@bluescarni
May 11 2016 13:09
:+1: can you include population in type_traits.hpp or is there a circular dependency going on?
Dario Izzo
@darioizzo
May 11 2016 13:10
we do not need type traits in population right?
AH but we include problem that includes type traits .. dunno still have not compiled
Francesco Biscani
@bluescarni
May 11 2016 13:11
because calling foo(std::declval<T>()) is like calling foo(T{}), that is, you are creating an rvalue with declval
it would still work in this case, the chain of events is as follows:
  • std::declval<T>() creates an rvalue of type T
  • test0(std::declval<T>()) tries to call test0 with an rvalue of type T
  • test0(const U &p) is selected among the 2 possible overloads, because rvalues can bind directly to const references
(actually, anything binds directly to const references, it's the best type ever!)
Dario Izzo
@darioizzo
May 11 2016 13:15
SO there is not a strong reason to have const U &p as signature in test0, also U&p would work?
Francesco Biscani
@bluescarni
May 11 2016 13:15
I don't think U &p would work, I need to check but I think that the const deduction would fail in that case
I mean, U &p should work if you don't pass an rvalue
but I just find it clearer to put the const reference everywhere so I don't have to think about it
so you don't have to rely on any obscure rule on rvalue/lvalue reference conversions to make it work
as you are spelling out exactly the types you want
Dario Izzo
@darioizzo
May 11 2016 13:17
sorry for keeping asking stupid question but ..
template <typename T>
class has_set_seed: detail::sfinae_types
{
        template <typename U>
        static auto test0(U &p) -> decltype(p.set_seed(std::declval<unsigned int>()));
        static no test0(...);
        static const bool implementation_defined =
            std::is_same<void,decltype(test0(std::declval<T &>()))>::value;
    public:
        /// static const boolean value flag
        static const bool value = implementation_defined;
};
why here we got rid of const ... ?
Francesco Biscani
@bluescarni
May 11 2016 13:18
because set_seed is not a const method
Dario Izzo
@darioizzo
May 11 2016 13:18
yes I figured, but I fail to see the logic ....
Francesco Biscani
@bluescarni
May 11 2016 13:19
think of it this way, when you write has_set_seed<my_prob>::value the compiler is checking the following
"if I were to pass a reference (a non-const one) to my_prob to the the test0() method, which overload would I pick?"
I'd pick the first overload because:
  • U is deduced as my_prob
  • the decltype in the trailing return type gives my an expression that "would compile"
Dario Izzo
@darioizzo
May 11 2016 13:21
I get this, but if I had put:
template <typename T>
class has_set_seed: detail::sfinae_types
{
        template <typename U>
        static auto test0(const U &p) -> decltype(p.set_seed(std::declval<unsigned int>()));
        static no test0(...);
        static const bool implementation_defined =
            std::is_same<void,decltype(test0(std::declval<const T &>()))>::value;
    public:
        /// static const boolean value flag
        static const bool value = implementation_defined;
};
Then the compiler would be checking the following:
"if I were to pass a reference (a const one) to my_prob to the the test0() method, which overload would I pick?"
I'd pick the first overload because:
  • U is deduced as my_prob
  • the decltype in the trailing return type gives my an expression that "would compile"
Francesco Biscani
@bluescarni
May 11 2016 13:25
the expression would not compile if the set_seed() method is not const in prob
Dario Izzo
@darioizzo
May 11 2016 13:26
thats what I fucking missed for 30 mins .....
fuckety fuck
thanks
Francesco Biscani
@bluescarni
May 11 2016 13:27
lol np
fuck fuck fuckety fuck
Dario Izzo
@darioizzo
May 11 2016 13:30
lol ... chissa se lo script era cosi oppure "imporvvisare"
Francesco Biscani
@bluescarni
May 11 2016 13:30
:)
Dario Izzo
@darioizzo
May 11 2016 13:46
for the circular problem -> forward declaration is ok?
Francesco Biscani
@bluescarni
May 11 2016 13:48
what I do usually is to put in the detail/ subdirectory a file called population_fwd.hpp containing the declaration, then I include it from both population.hpp and type_traits.hpp
so if the declaration of population ever changes there's no risk of having different declarations in different files
Dario Izzo
@darioizzo
May 11 2016 13:49
so just
class population;
Francesco Biscani
@bluescarni
May 11 2016 13:49
yes, with namespace, include guards, etc.
Dario Izzo
@darioizzo
May 11 2016 13:49
and why including it in population.hpp too?
Francesco Biscani
@bluescarni
May 11 2016 13:50
because I make some modifications to population and forgot to update the fwd declaration, the compiler will tell me
Dario Izzo
@darioizzo
May 11 2016 13:50
you are weird .... ok
#ifndef PAGMO_POPULATION_FWD_HPP
#define PAGMO_POPULATION_FWD_HPP

namespace pagmo { 
    // Forward declaration
    class population;
}

#endif
it is in the folder details, but not in the namespace detail
Francesco Biscani
@bluescarni
May 11 2016 13:52
yes.. you could not put it into detail:: because population is not in detail::
Dario Izzo
@darioizzo
May 11 2016 13:53
still ok with you?
Francesco Biscani
@bluescarni
May 11 2016 13:53
well no indentation, brackets etc.
we really need clang-format
Dario Izzo
@darioizzo
May 11 2016 13:53
thats a job for glang format
:)
Francesco Biscani
@bluescarni
May 11 2016 13:53
you know I will modify the CI to mark the build as failed if there are formatting problems
and doxygen/sphinx warnings
:)
Dario Izzo
@darioizzo
May 11 2016 13:54
yes i know ...
Francesco Biscani
@bluescarni
May 11 2016 13:54
no I won't do it with the format, as it's unfair to marcus
Dario Izzo
@darioizzo
May 11 2016 13:54
for the warnings I would be carefult though.... right now for example we have warnings in sphinx from breathe failiurs
and breathe is a badly maintained project that will never fix upstream our issues
Francesco Biscani
@bluescarni
May 11 2016 13:55
I think the breathe failures stem from doxygen actually
Dario Izzo
@darioizzo
May 11 2016 13:55
For the format we just run the clang format on each commit right?
Francesco Biscani
@bluescarni
May 11 2016 13:55
any pointer?
we can do it, but marcus I don't think he can
Dario Izzo
@darioizzo
May 11 2016 13:55
You mean for the current sphinx warning?
Francesco Biscani
@bluescarni
May 11 2016 13:55
yes
Dario Izzo
@darioizzo
May 11 2016 13:55
WARNING: The config value breathe_default_members' has typestr', defaults to `tuple.'
And failure to find the images in the image folder
Unfair to marcus?????? Do we really care :)
Francesco Biscani
@bluescarni
May 11 2016 13:57
Dario Izzo
@darioizzo
May 11 2016 13:57
i tried to fix it unsuccesfully (5-10 min)
Francesco Biscani
@bluescarni
May 11 2016 13:57
the path of the images probably needs to be fixed somehow.. it is a relative path right now?
Dario Izzo
@darioizzo
May 11 2016 13:57
let me check
yes relative to the folder indicated in doxygen as containing the images
it works when producing an html doxygen website
looks like xml has problems .....
Manually putting the images in the xml folder fixes the warning
and actually makes the image visible
Francesco Biscani
@bluescarni
May 11 2016 13:59
breathe_default_members = ('members') this should probably be breathe_default_members = ('members',)
since it's expecting a tuple
Dario Izzo
@darioizzo
May 11 2016 13:59
tried
Dario Izzo
@darioizzo
May 11 2016 13:59
I can try again maybe back then I was drunk ..
wait
Francesco Biscani
@bluescarni
May 11 2016 14:00
here it runs cleanly
Dario Izzo
@darioizzo
May 11 2016 14:00
yep .... I swear I did the same last week :)
Francesco Biscani
@bluescarni
May 11 2016 14:01
I did not touch it :)
it's running fine with the version from it
git
ah wait
lol wrong dir
➜  sphinx git:(master) make clean html
rm -rf _build/*
sphinx-build -b html -d _build/doctrees   . _build/html
Running Sphinx v1.3.5
making output directory...
loading pickled environment... not yet created
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 13 source files that are out of date
updating environment: 13 added, 0 changed, 0 removed
reading sources... [100%] index                                                                                                                        
/home/yardbird/repos/PaGMOreborn/doc/sphinx/docs/population.rst:4: WARNING: image file not readable: ../doxygen/xml/population.jpg
/home/yardbird/repos/PaGMOreborn/doc/sphinx/docs/problems/rosenbrock.rst:4: WARNING: image file not readable: ../doxygen/xml/rosenbrock.png
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] index                                                                                                                         
generating indices... genindex
writing additional pages... search
copying static files... done
copying extra files... done
dumping search index in English (code: en) ... done
dumping object inventory... done
build succeeded, 2 warnings.

Build finished. The HTML pages are in _build/html.
I just get the warnings from the files
https://gitlab.com/EuropeanSpaceAgency/PaGMOreborn/builds/1345141 here's there's no reference to the tuple problem either
oh wait there is
Dario Izzo
@darioizzo
May 11 2016 14:06
anyway .... its fixed what about the images
Francesco Biscani
@bluescarni
May 11 2016 14:06
I wonder if it is a python 2.x vs 3.x
Dario Izzo
@darioizzo
May 11 2016 14:07
just leave it :) next ...
Francesco Biscani
@bluescarni
May 11 2016 14:07
not sure it's fixed, we'll see next build
we could patch the xml files :)
Dario Izzo
@darioizzo
May 11 2016 14:09
copying manually the images you mean?
Francesco Biscani
@bluescarni
May 11 2016 14:10
we would need to reconstruct the doxygen dir structure in sphinx?
or copy the jpgs into the xml dir
rather
Dario Izzo
@darioizzo
May 11 2016 14:11
copy the content of the image folder in xml
Francesco Biscani
@bluescarni
May 11 2016 14:11
yeah that works
Dario Izzo
@darioizzo
May 11 2016 14:12
so we add it to the ci scripts?
Francesco Biscani
@bluescarni
May 11 2016 14:12
yeah should be an easy one liner
Dario Izzo
@darioizzo
May 11 2016 14:12
and to the script compile in the sphinx folder?
which i guess I am the only one that uses it :)
Francesco Biscani
@bluescarni
May 11 2016 14:13
I think moving the images is enough? It worked here when I did make html
Dario Izzo
@darioizzo
May 11 2016 14:13
yes it is .... I have a script named compile in the folder sphinx to run doxygen and then sphinx
#!/bin/bash   
cd ../doxygen
doxygen Doxyfile
cd ../sphinx
make html
Francesco Biscani
@bluescarni
May 11 2016 14:14
but it's not being used in the CI
Dario Izzo
@darioizzo
May 11 2016 14:14
no I use it locally
I am just saying that I will also add there the copy
Francesco Biscani
@bluescarni
May 11 2016 14:14
well we should use it in the CI as well instead of repeating
Dario Izzo
@darioizzo
May 11 2016 14:14
nvm
can do
needs bash installed
which can be probably be changed to sh
btw its [ci skip] not [skip ci] :)
Francesco Biscani
@bluescarni
May 11 2016 14:20
lol ok
yes sh should work
Dario Izzo
@darioizzo
May 11 2016 14:26
running .. lets see
warning: Tag `CLANG_ASSISTED_PARSING' at line 1047 of file `Doxyfile' belongs to an option that was not enabled at compile time.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u", or recompile doxygen with this feature enabled.
warning: Tag `CLANG_OPTIONS' at line 1055 of file `Doxyfile' belongs to an option that was not enabled at compile time.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u", or recompile doxygen with this feature enabled.
che palle
Are you sure you want a warning free build?
Like the image?
Francesco Biscani
@bluescarni
May 11 2016 14:31
just comment out those doxygen options
saw it nice :)
I'll do it
the build should actually fail in case of warnings, but we can do it in a later stage
for now I just removed non-warning output
Dario Izzo
@darioizzo
May 11 2016 14:34
as you wish dart scarni
Dario Izzo
@darioizzo
May 11 2016 14:57
if you redirect to /dev/null also the warnings will be lost right?
Francesco Biscani
@bluescarni
May 11 2016 14:58
no, they go to stderr not stdout
Dario Izzo
@darioizzo
May 11 2016 14:58
ah right ...
anyway, going now ... I made a first commit for the algo inner in case you guys are curious .... still no tests or shit ... nor the main body :)
Francesco Biscani
@bluescarni
May 11 2016 14:59
yeah I took a look earlier