--- Log opened Wed Jan 23 00:00:39 2019 | ||
-!- tangy [491d7f98@gateway/web/freenode/ip.73.29.127.152] has joined #shogun | 01:09 | |
-!- tangy [491d7f98@gateway/web/freenode/ip.73.29.127.152] has quit [Client Quit] | 01:10 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 02:40 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 02:42 | |
-!- mode/#shogun [+o wiking] by ChanServ | 02:42 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 245 seconds] | 02:46 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 02:50 | |
-!- mode/#shogun [+o wiking] by ChanServ | 02:50 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 246 seconds] | 02:54 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 03:31 | |
-!- mode/#shogun [+o wiking] by ChanServ | 03:31 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 246 seconds] | 03:35 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 04:28 | |
-!- mode/#shogun [+o wiking] by ChanServ | 04:28 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 245 seconds] | 04:32 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 04:49 | |
-!- mode/#shogun [+o wiking] by ChanServ | 04:49 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 250 seconds] | 04:54 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 06:11 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 06:11 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 06:11 | |
-!- mode/#shogun [+o wiking] by ChanServ | 06:11 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 250 seconds] | 06:15 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 06:32 | |
-!- mode/#shogun [+o wiking] by ChanServ | 06:32 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 245 seconds] | 06:36 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 07:48 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 07:48 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 07:48 | |
-!- mode/#shogun [+o wiking] by ChanServ | 07:48 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 244 seconds] | 07:55 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 08:24 | |
-!- mode/#shogun [+o wiking] by ChanServ | 08:24 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 245 seconds] | 08:28 | |
-!- gf712 [8028b333@gateway/web/freenode/ip.128.40.179.51] has joined #shogun | 08:49 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 09:19 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 09:19 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 09:19 | |
-!- mode/#shogun [+o wiking] by ChanServ | 09:19 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 09:23 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 09:24 | |
-!- mode/#shogun [+o wiking] by ChanServ | 09:24 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 09:32 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 09:47 | |
-!- mode/#shogun [+o wiking] by ChanServ | 09:47 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 272 seconds] | 09:51 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 10:10 | |
-!- mode/#shogun [+o wiking] by ChanServ | 10:10 | |
gf712 | wiking are you there? | 10:28 |
---|---|---|
@wiking | gf712: yes | 10:28 |
gf712 | I was wondering if there was some page where there is a breakdown of what works for swig in the target languages we support? | 10:29 |
@wiking | i dont think so | 10:29 |
@wiking | it's all in a distributed cache in our minds | 10:30 |
@wiking | afaik | 10:30 |
gf712 | OK, thanks! | 10:30 |
gf712 | btw do you know if the people from OpenML are thinking about merging your PR? | 10:30 |
gf712 | started to work on a shogun "translator" | 10:31 |
@wiking | ah i need to talk with them | 10:35 |
@wiking | but yeah we can get that merged | 10:35 |
@wiking | quite rapidly | 10:35 |
@wiking | just need to justify some of the design decisions | 10:36 |
@wiking | but since the last ping i haven't got back to them that's why its stale atm | 10:36 |
gf712 | OK! that's cool, I just need to wrap it all up in a class then at some point | 10:37 |
gf712 | but the functions will be similar | 10:37 |
gf712 | I think now we have all that is needed | 10:37 |
@wiking | ok so your new interface | 10:49 |
@wiking | has the ability to query things from swig? :) | 10:49 |
@wiking | i.e. name, type, value, description? | 10:49 |
@wiking | :) | 10:49 |
gf712 | not description yet but the rest yest | 10:50 |
gf712 | yes* | 10:50 |
gf712 | oh, unless you mean the docstring? | 10:51 |
@wiking | nono | 10:51 |
@wiking | i mean we need to get out the description of a value | 10:51 |
@wiking | programatically | 10:52 |
@wiking | value = parameter | 10:52 |
gf712 | the string we pass to SG_ADD? | 10:53 |
@wiking | yes | 10:55 |
@wiking | the 2nd string | 10:55 |
@wiking | not the first :) | 10:55 |
@wiking | but we could use the 1st string as the name of the variable | 10:55 |
@wiking | so we need this tuple basically: (value_name, value_description, value_type, value) | 10:55 |
gf712 | SG_ADD3(param, name, description) -> you mean description = value_description | 10:56 |
gf712 | value_name = name | 10:56 |
@wiking | yes | 10:57 |
gf712 | that should be doable | 10:57 |
gf712 | is it worth introducing these sklearn-like methods directly in shogun, like get_params(deep=bool)? | 11:09 |
gf712 | or is it somethig that should sit in a seperate python script just for openml stuff? | 11:11 |
@wiking | mmm i'm not so sure why would we need something like that at all | 11:19 |
@wiking | i mean the reason i started to do some separation in openml-python is that under the hood | 11:20 |
@wiking | we could do anything | 11:20 |
@wiking | to expose a param | 11:20 |
gf712 | ah ok! | 11:20 |
gf712 | I was just pretty much translating stuff to make it work | 11:20 |
gf712 | I'll have a look at the base class you wrote in your PR | 11:21 |
gf712 | wiking: Anyway all good to access the descriptions | 11:22 |
@wiking | +! | 11:23 |
@wiking | +1 | 11:23 |
gf712 | same principle as the parameter_names and parameter_types | 11:23 |
gf712 | just added a parameter_descriptions | 11:23 |
-!- Lefteris [836fb90d@gateway/web/freenode/ip.131.111.185.13] has joined #shogun | 11:30 | |
@wiking | ok | 11:43 |
@wiking | perfect | 11:43 |
@wiking | i'm working now on exporting things to coreml | 11:55 |
@wiking | i've added a minimal new thing to machine | 11:55 |
@wiking | that marks whether a machine has been trained | 11:55 |
@wiking | as we dont have things for this | 11:55 |
@wiking | i'm thinking about making the train/apply thread safe | 11:55 |
@wiking | but that's up for discussion | 11:55 |
gf712 | ah that's good | 11:57 |
gf712 | have you | 11:57 |
gf712 | btw to check whether it's trainable it should be enough to check if the shogun object has a .train method? | 11:58 |
@wiking | mmmmm | 12:00 |
@wiking | afaik yes | 12:00 |
@wiking | why? | 12:00 |
gf712 | just wondering. I was checking the SKLearnConverter and in sklearn you can check if something is trainable with fit | 12:01 |
@wiking | mmm | 12:02 |
@wiking | but in our case it's enough that it's a mchine | 12:02 |
@wiking | *machine | 12:02 |
@wiking | sorry | 12:02 |
@wiking | machine or a transformer | 12:02 |
@wiking | but both has fit/train | 12:02 |
@wiking | but | 12:02 |
gf712 | what about the gridsearch? | 12:02 |
@wiking | oh that's another story | 12:03 |
@wiking | we'll have to figure that out | 12:03 |
@wiking | but in my case | 12:03 |
@wiking | now i'm working with this | 12:03 |
@wiking | EMachineType | 12:03 |
@wiking | for me that's a good selector for how to map a given machien | 12:03 |
@wiking | and maybe we should just extend that | 12:03 |
@wiking | get_solver_type | 12:04 |
@wiking | machine.get_solver_type() | 12:04 |
@wiking | some of the machines are not marked good atm | 12:04 |
gf712 | oh right, yes we need that | 12:04 |
@wiking | but that's fixable | 12:04 |
@wiking | it's more like a bug atm | 12:04 |
gf712 | I can't remember where I found that I needed it | 12:04 |
@wiking | for example CLibLinearRegression is not marked as any machine | 12:04 |
@wiking | that is a bug | 12:04 |
gf712 | I think it was when I was translating undocumented | 12:04 |
gf712 | ah ok | 12:05 |
@wiking | but i've just realised that using that enum | 12:05 |
@wiking | would be a better thing to do | 12:05 |
@wiking | and imo that's the same for u | 12:05 |
@wiking | instead of checking whether an object has a given method | 12:05 |
@wiking | it's more robust | 12:05 |
@wiking | :) | 12:05 |
@wiking | imo | 12:05 |
@wiking | transformers atm does not have that enum | 12:06 |
@wiking | now the problem with this is actually the following | 12:06 |
@wiking | and we need to figure out something with this | 12:06 |
@wiking | say we have the base interface | 12:06 |
@wiking | and base library like shogun-core | 12:06 |
@wiking | this is not going to be extenable | 12:06 |
@wiking | if we rely on an enum | 12:06 |
@wiking | since that enum is fixed in the core interface | 12:06 |
@wiking | that would mean that in that case | 12:07 |
@wiking | we would need to do a new release | 12:07 |
@wiking | if we have a new pluging | 12:07 |
@wiking | *plugin | 12:07 |
@wiking | (see what i mean?) | 12:07 |
@wiking | sorry i've just realised this.... so currently just stating facts | 12:07 |
gf712 | I need a minute to absorb the information :p | 12:08 |
@wiking | https://github.com/shogun-toolbox/shogun/blob/develop/src/shogun/machine/Machine.h#L32 | 12:08 |
@wiking | so i'm talking about this | 12:08 |
gf712 | yup | 12:08 |
@wiking | so this is not really supporting a dynamically loadable | 12:09 |
@wiking | machien | 12:09 |
@wiking | right? :) | 12:09 |
@wiking | say tomorrow we implement WonderMachine | 12:09 |
gf712 | oh right | 12:09 |
@wiking | that is some magic stuff | 12:09 |
gf712 | yes yes | 12:09 |
@wiking | how do we add this to the system correct way | 12:09 |
@wiking | only way is that we extend this enum | 12:09 |
@wiking | but that's against the actual design | 12:09 |
@wiking | right | 12:09 |
@wiking | ? | 12:09 |
@wiking | because then it's not a plugin | 12:09 |
@wiking | because we cannot extend this runtime | 12:10 |
@wiking | of course we can always use the return value of get_name() | 12:10 |
@wiking | :D | 12:10 |
@wiking | but that's kind of crazy imo | 12:10 |
gf712 | i am just not sure why you need to extend it at runtime? i get that you need to extend everytime you implement something | 12:10 |
gf712 | I am lost in that part :D | 12:10 |
@wiking | ok | 12:10 |
@wiking | so the long term plan is | 12:11 |
@wiking | that we'll have a libshogun-core | 12:11 |
@wiking | that only contains very base interfaces | 12:11 |
@wiking | like machine, features etc | 12:11 |
@wiking | and adding a new model | 12:11 |
@wiking | or method or whatever | 12:11 |
@wiking | is basically just implementing these interfaces | 12:11 |
@wiking | and shipping a .so or dll | 12:11 |
gf712 | ahh ok, it's starting to click in my head | 12:12 |
@wiking | and then in runtime the framework would be able to load that .soi | 12:12 |
@wiking | since it implements the interface we need | 12:12 |
@wiking | now | 12:12 |
@wiking | if we would keepo this | 12:13 |
@wiking | EMachineType | 12:13 |
@wiking | we have a problem | 12:13 |
@wiking | because we cannot extend this | 12:14 |
@wiking | as it should be in the core | 12:14 |
@wiking | right? | 12:14 |
gf712 | well you could do the bitmasking thing again | 12:14 |
@wiking | in what sense | 12:14 |
@wiking | i mean we cannot use an enum right? | 12:14 |
@wiking | :) | 12:14 |
gf712 | hmm ok, let me think a bit | 12:15 |
@wiking | so we could go with a magic number | 12:15 |
@wiking | :P | 12:15 |
@wiking | like in case of serialUUID in java | 12:15 |
@wiking | of course that has the same 'problematic' as a string | 12:15 |
@wiking | as nothing can enforce you | 12:15 |
gf712 | what do you mean magic number? | 12:15 |
@wiking | uint32_T | 12:15 |
@wiking | and you choose some random uuid | 12:16 |
@wiking | see UUID | 12:16 |
gf712 | so just randomly attribute a number from 0 to 2**32 - 1? | 12:16 |
@wiking | yes | 12:16 |
@wiking | but with that ht eproblem is | 12:16 |
@wiking | that you can still collide right | 12:17 |
@wiking | (same as get_name()) | 12:17 |
@wiking | i mean there's no enforcing | 12:17 |
@wiking | that you cannot choose the same id | 12:17 |
@wiking | so this is a minor problem with the current design | 12:17 |
@wiking | ;) | 12:17 |
@wiking | that's what i'm tryign to say here | 12:17 |
gf712 | so can you generate it from the hash of the name of each implementation? | 12:18 |
@wiking | and we should not rely on this enum | 12:18 |
@wiking | because this enum should go | 12:18 |
@wiking | yeah | 12:18 |
@wiking | like in java | 12:18 |
gf712 | but it should be collusion free no? | 12:18 |
@wiking | where every obj has a .hash() method | 12:18 |
@wiking | :) | 12:18 |
gf712 | collision haha | 12:18 |
@wiking | hahahah collusion | 12:18 |
@wiking | THER WAS NO collusion | 12:18 |
@wiking | :D | 12:18 |
@wiking | NONE | 12:18 |
@wiking | :> | 12:18 |
@wiking | ok | 12:18 |
gf712 | haha | 12:19 |
@wiking | but yeah .hash is still a good question | 12:19 |
@wiking | what do we hash? | 12:19 |
gf712 | just the name | 12:19 |
gf712 | it should be unique no? | 12:19 |
@wiking | i can name myself whatever i want no? | 12:20 |
@wiking | i mean there's no way to enforce things from the core | 12:20 |
@wiking | that's what i'm trying to say | 12:20 |
@wiking | so there's no way i can enforce that 2 totally different implementation | 12:20 |
@wiking | cannot appear as the same thing | 12:20 |
@wiking | right? | 12:20 |
gf712 | not if you name them the same way.. | 12:20 |
@wiking | yeah | 12:20 |
@wiking | so anyways | 12:20 |
@wiking | we are gonna have this problem | 12:20 |
gf712 | __FILENAME__ macro? | 12:21 |
@wiking | what filename? :) | 12:21 |
@wiking | i mean this is just saying that | 12:21 |
@wiking | i can always create a malicious plugin | 12:21 |
@wiking | that appears to be the same thing | 12:21 |
@wiking | but does totally different stuff | 12:21 |
@wiking | only way to do this | 12:21 |
@wiking | to do some sort of public/private key signing | 12:21 |
@wiking | and then we check whether the signature is there | 12:21 |
@wiking | :) | 12:21 |
@wiking | but yeah that's another level | 12:21 |
@wiking | i was just wondeirng if there's a sane way | 12:22 |
gf712 | true, but that is quite advanced | 12:22 |
@wiking | instead of a string compare | 12:22 |
@wiking | :D | 12:22 |
@wiking | but seems not | 12:22 |
gf712 | as in would take some work | 12:22 |
@wiking | and the enum should good sooner or later | 12:22 |
@wiking | as that's against the design what we have in mind | 12:22 |
gf712 | when are you considering doing the split? | 12:23 |
@wiking | mmm | 12:23 |
@wiking | good q | 12:23 |
@wiking | now i've mentioned this more about | 12:23 |
gf712 | could write a proposal for gsoc? | 12:23 |
@wiking | the coreml using that enum | 12:23 |
@wiking | that shoudl not happen | 12:23 |
@wiking | :D | 12:23 |
gf712 | when do you use it in coreml btw? just to situate myself a bit better... | 12:25 |
@wiking | to figure out into what object i would need to serialize the given machine | 12:28 |
@wiking | say i see an SVM | 12:28 |
@wiking | then i need to serialize that into an SVM + kernel | 12:29 |
@wiking | in coreml | 12:29 |
@wiking | now unfortunately it seems this'll be done by specifying a list of strings | 12:29 |
@wiking | (get_name()) | 12:29 |
@wiking | and if machine.get_name() in set(svms) then -. | 12:29 |
@wiking | etc etc | 12:29 |
@wiking | i just feel that this is ugly | 12:30 |
@wiking | but it'll be like this it seems | 12:30 |
gf712 | is that how they do it for sklearn? | 12:31 |
@wiking | dunno | 12:32 |
@wiking | :) | 12:32 |
@wiking | but probably something like this | 12:32 |
@wiking | you need a mapping | 12:33 |
@wiking | between the objects and the coreml objects | 12:33 |
gf712 | and then use this switch https://github.com/apple/coremltools/blob/master/coremltools/converters/sklearn/_svm_common.py | 12:33 |
gf712 | btw are you going to ask them to extend their kernel support? | 12:34 |
@wiking | https://github.com/apple/coremltools/blob/master/coremltools/converters/sklearn/_converter_internal.py#L264 | 12:35 |
@wiking | gf712: we could create a PR :) | 12:35 |
@wiking | but for the time being having a full coverage between coreml objs and shogun | 12:35 |
@wiking | would be nice | 12:35 |
gf712 | yup! | 12:36 |
gf712 | coreml seems to be more comments than code.. :D | 12:37 |
@wiking | heheh yeah | 12:38 |
@wiking | i mean it's more like a protobuf | 12:38 |
@wiking | and some patches between some libs | 12:38 |
@wiking | that's all | 12:38 |
@wiking | way too good https://www.linkedin.com/feed/update/urn:li:ugcPost:6489523331119742976 | 12:50 |
gf712 | ahahaha | 12:53 |
@wiking | so true | 13:08 |
-!- abhinav-7 [76b9ec98@gateway/web/freenode/ip.118.185.236.152] has joined #shogun | 13:10 | |
@wiking | there's something strange with the Pipeline.cpp | 13:26 |
@wiking | as that is being recompiled every time of make | 13:26 |
@wiking | i'll need to check why is that | 13:26 |
@wiking | wuwei[m]: any ideas? :) | 13:26 |
@wiking | hence the whole .so is being relinked | 13:27 |
@wiking | etc etc | 13:27 |
wuwei[m] | hmm | 13:27 |
wuwei[m] | that's weird | 13:27 |
wuwei[m] | I can reproduce it locally | 13:29 |
wuwei[m] | i guess variant is re-installed everytime you make | 13:31 |
wuwei[m] | wiking: btw are we moving to c++17 ? | 13:38 |
@wiking | mmm we should soon | 13:43 |
@wiking | but i think we could patch the variant reinstall part | 13:44 |
@wiking | so that if it's there then there's no trigger | 13:44 |
wuwei[m] | yes I will change the cmake file | 13:44 |
@wiking | shared_mutex | 13:45 |
@wiking | nooooooo | 13:45 |
@wiking | it's c++17?! | 13:45 |
@wiking | really | 13:46 |
@wiking | why shared_mutex is not c++14 ? :> | 13:46 |
@wiking | anybody knows of a good list of compilers that support c++17 | 13:47 |
@wiking | shared_timed_mutex is c++14 | 13:47 |
@wiking | doh | 13:47 |
gf712 | full c++17 support? | 13:47 |
@wiking | not full | 13:47 |
@wiking | but what are the supports | 13:47 |
@wiking | i think full nobody has | 13:48 |
gf712 | yea, i dont think so | 13:48 |
gf712 | i had a list somewhere | 13:48 |
gf712 | let me have a look | 13:48 |
gf712 | https://en.cppreference.com/w/cpp/compiler_support | 13:48 |
gf712 | it's what I use | 13:48 |
@wiking | mmm | 13:50 |
@wiking | lemme see about common distros | 13:50 |
@wiking | :D | 13:50 |
@wiking | https://packages.ubuntu.com/search?keywords=gcc | 13:50 |
@wiking | https://packages.debian.org/search?keywords=gcc&searchon=names&suite=stable§ion=all | 13:51 |
@wiking | fuck debian stable only has gcc6 | 13:51 |
@wiking | :S | 13:51 |
gf712 | I thought gcc6 is the one that has best support no? | 13:51 |
@wiking | its a bit shitty as variant, any, string_view etc is in 7 | 13:51 |
gf712 | in any case you can get gcc-8 now quite easily on ubuntu | 13:52 |
@wiking | hehe | 13:53 |
@wiking | yeah but debian? | 13:53 |
@wiking | for example i dont use ubuntu on any server | 13:53 |
@wiking | i prefer deb | 13:53 |
@wiking | and it's not only me | 13:53 |
@wiking | on the other hand https://packages.debian.org/search?keywords=clang-4.0 | 13:54 |
@wiking | woudl work | 13:54 |
@wiking | lisitsyn: ^ | 13:54 |
@wiking | https://packages.debian.org/stretch/clang-4.0 | 13:55 |
@wiking | Clang implements all of the ISO C++ 1998, 11 and 14 standards and also provides most of the support of C++17. | 13:55 |
@wiking | but again... not having gcc is a bit icky | 13:55 |
@wiking | i feel | 13:55 |
@wiking | in any case creating a feature branch that has c++17 requirements would not hurt imo | 14:01 |
@wiking | there | 14:05 |
gf712 | yup, I am guessing some stuff would break from 14 to 17? | 14:05 |
@wiking | https://github.com/shogun-toolbox/shogun/tree/feature/cpp17 | 14:07 |
@wiking | lets see :D | 14:07 |
@wiking | https://dev.azure.com/shogunml/shogun/_build/results?buildId=307 | 14:08 |
@wiking | here's the pipeline | 14:08 |
@wiking | we'll see | 14:08 |
gf712 | that was quick :D | 14:10 |
@wiking | 2019-01-23T13:09:25.9364249Z CMake Error in src/shogun/CMakeLists.txt: | 14:10 |
@wiking | 2019-01-23T13:09:25.9364619Z Target "libshogun" requires the language dialect "CXX17" , but CMake does | 14:10 |
@wiking | 2019-01-23T13:09:25.9364665Z not know the compile flags to use to enable it. | 14:10 |
@wiking | 2019-01-23T13:09:25.9364694Z | 14:10 |
@wiking | yeah | 14:10 |
@wiking | i'm guessing the msvc will go | 14:10 |
@wiking | and probably the osx as well | 14:11 |
gf712 | need cmake version > 3.8 | 14:11 |
@wiking | but anyhow i'll try to make this branch in sync and we'll see then what we do with this | 14:11 |
@wiking | rather 4.0 | 14:11 |
@wiking | ah cmake | 14:11 |
@wiking | why? | 14:11 |
@wiking | that's only in case of the problem with MSVC | 14:11 |
@wiking | no? | 14:11 |
gf712 | not sure, just checked stackoverflow | 14:12 |
@wiking | yeah | 14:12 |
gf712 | and people said 3.8 | 14:12 |
@wiking | this one: https://stackoverflow.com/questions/45688522/how-to-enable-c17-in-cmake | 14:12 |
@wiking | ? | 14:12 |
@wiking | because that's more about msvc | 14:12 |
@wiking | but we have the trick for that | 14:12 |
@wiking | and based on the cmake error | 14:12 |
@wiking | it detected correctly | 14:12 |
@wiking | that it doesn't know how to enable 17 for that compiler | 14:13 |
gf712 | https://stackoverflow.com/a/47251418 | 14:13 |
@wiking | it should be tested though | 14:13 |
@wiking | if there's clang 4.0 | 14:13 |
@wiking | then what happens | 14:13 |
@wiking | lemme see on donbot | 14:13 |
gf712 | https://cmake.org/cmake/help/v3.8/prop_tgt/CXX_STANDARD.html | 14:14 |
gf712 | https://cmake.org/cmake/help/v3.7/prop_tgt/CXX_STANDARD.html | 14:14 |
gf712 | support for 17 appears in 3.8 | 14:15 |
@wiking | yeah ok | 14:15 |
@wiking | no workie | 14:16 |
@wiking | :D | 14:16 |
@wiking | CMake Error in tests/meta/CMakeLists.txt: | 14:16 |
@wiking | Target "meta_example_integration_tester" requires the language dialect | 14:16 |
@wiking | "CXX17" , but CMake does not know the compile flags to use to enable it. | 14:16 |
@wiking | even in case of clang 4.0 | 14:16 |
@wiking | https://packages.debian.org/stretch-backports/cmake | 14:17 |
@wiking | ok there is at least backport | 14:17 |
@wiking | :) | 14:17 |
gf712 | we are just ahead of our time | 14:19 |
@wiking | mmmm | 14:20 |
@wiking | i've ran now with gcc 6.3 on debian and cmake 3.13 | 14:20 |
@wiking | and it didn't complain | 14:20 |
@wiking | lemme see how it dies with variant | 14:21 |
@wiking | dunno how we can enforce certain part of 17 | 14:21 |
@wiking | coz yeah 6.3.0 gcc has some c++17 | 14:21 |
@wiking | but not variant etc | 14:21 |
@wiking | woops | 14:22 |
@wiking | this is interesting | 14:22 |
@wiking | (note that we use this for SWIG) | 14:22 |
gf712 | is that the build that is running now? | 14:23 |
@wiking | 2019-01-23T13:10:46.9540290Z ? noexcept(false)?2019-01-23T13:10:46.9539740Z ? ^~~~~~~~~~~~~~~~~~~~~~?2019-01-23T13:10:46.9539140Z bool has(const std::string& name) const throw(ShogunException)2019-01-23T13:10:46.9539060Z ?/Users/vsts/agent/2.144.2/work/1/s/src/shogun/base/SGObject.h:329:42: ?note: ?use 'noexcept(false)' instead?2019-01-23T13:10:46.9538430Z ? ^~~~~~~~~~~~~~~~~~~~~~?2019-01-23T13:10:46.9537740Z | 14:23 |
@wiking | bool has(const std::string& name) const throw(ShogunException)2019-01-23T13:10:46.9537150Z ?/Users/vsts/agent/2.144.2/work/1/s/src/shogun/base/SGObject.h:329:42: ?error: ?ISO C++17 does not allow dynamic exception specifications [-Wdynamic-exception-spec]? | 14:23 |
@wiking | so this is on macos | 14:23 |
gf712 | so need to replace all the throw(..) with noexcept(false)? | 14:27 |
gf712 | https://en.cppreference.com/w/cpp/language/except_spec | 14:27 |
gf712 | even just throw() will disappear | 14:27 |
gf712 | in c++20 | 14:27 |
@wiking | yes | 14:28 |
@wiking | mmm anyhow it might work | 14:29 |
@wiking | needs regex | 14:29 |
@wiking | :) | 14:29 |
gf712 | haha, it should be as simple as find and replace | 14:30 |
gf712 | for openml, how can you tell if an object is a pipeline? | 14:31 |
gf712 | other than get_name() == "pipeline"? | 14:32 |
@wiking | yes | 14:32 |
@wiking | ok lets see if this helped | 14:38 |
@wiking | https://dev.azure.com/shogunml/shogun/_build/results?buildId=309 | 14:38 |
@wiking | regex fail | 14:42 |
@wiking | :D | 14:42 |
gf712 | so are you testing only macos right now? | 14:50 |
@wiking | basically | 14:50 |
@wiking | but that is almost the same compiler that you would have on ubuntu | 14:50 |
@wiking | if u use clang | 14:50 |
@wiking | and of course we'll see what happens on msvc as well | 14:50 |
@wiking | but that should be fine | 14:50 |
gf712 | oh the register issue | 14:54 |
gf712 | that is going to be annoyng with Python2.7 | 14:54 |
@wiking | why? | 15:00 |
@wiking | worst case we need to drop 2.7 support :D | 15:01 |
gf712 | well, if it is that easy to drop support then it's not an issue :D | 15:02 |
@wiking | :> | 15:03 |
@wiking | but good to know what will break if we move the 17 | 15:03 |
gf712 | so are shogun's dependencies also being compiled with 17? | 15:04 |
gf712 | i.e. stanmath | 15:04 |
@wiking | yeah | 15:05 |
@wiking | but since we dont include it anywhere | 15:05 |
@wiking | it shoudl be ok | 15:05 |
@wiking | :D | 15:05 |
gf712 | no std::ptr_fun, time to get used to lambdas :D | 15:10 |
wuwei[m] | wiking: do you have idea what I should do with variant ? | 15:10 |
wuwei[m] | what's the standard way for external project | 15:11 |
@wiking | mmm lemme check | 15:18 |
@wiking | copy_directory is the problem i think | 15:19 |
@wiking | as that will always copy | 15:20 |
@wiking | that makes things changed | 15:20 |
wuwei[m] | yes | 15:20 |
@wiking | and that's why then things are being called again | 15:20 |
@wiking | for compilation | 15:20 |
wuwei[m] | I used copy_if_different for single file version previously | 15:20 |
@wiking | yes | 15:20 |
@wiking | the thing is that we need to copy more than one file right? | 15:21 |
wuwei[m] | yes | 15:21 |
@wiking | its only 4 files | 15:21 |
@wiking | or? | 15:21 |
wuwei[m] | but it's okay to switch to the single file version for variant | 15:22 |
@wiking | can we? | 15:22 |
wuwei[m] | it has a new single file release | 15:22 |
@wiking | ok | 15:22 |
wuwei[m] | https://github.com/mpark/variant/blob/single-header/v1.4.0/variant.hpp | 15:22 |
@wiking | can you try switching to that | 15:22 |
@wiking | and do a copy_if_different | 15:22 |
@wiking | for the install | 15:22 |
@wiking | that way i think it should be fixed | 15:22 |
wuwei[m] | okay | 15:22 |
@wiking | thnx | 15:23 |
@wiking | lisitsyn: tapkee is not c++17 ready :D | 15:26 |
lisitsyn | oh really? | 15:26 |
lisitsyn | wiking: what breaks? | 15:26 |
@wiking | yep fails | 15:26 |
@wiking | https://dev.azure.com/shogunml/shogun/_build/results?buildId=312 | 15:26 |
@wiking | see the macos build | 15:26 |
@wiking | there's the log | 15:26 |
@wiking | mem_fun_ref_t is removed in c++17 | 15:27 |
lisitsyn | oh | 15:27 |
@wiking | random_shuffle needs an engine | 15:28 |
@wiking | and tapkee uses register as well | 15:28 |
@wiking | in covertree | 15:28 |
lisitsyn | nah that's some strange covertree code | 15:28 |
lisitsyn | :D | 15:28 |
@wiking | ok anyhow there's some things that are breaking stuff now in tapkee | 15:29 |
@wiking | so i guess we'll need to change both in shogun and as well in your repo | 15:29 |
lisitsyn | yeah let me check | 15:29 |
@wiking | kk | 15:30 |
-!- HeikoS [5aae0475@gateway/web/cgi-irc/kiwiirc.com/ip.90.174.4.117] has joined #shogun | 15:32 | |
HeikoS | gf712 yo | 15:32 |
gf712 | HeikoS hey! | 15:32 |
HeikoS | how are things going? | 15:33 |
HeikoS | Lefteris hi! | 15:33 |
gf712 | fine! we are pretty much ready for openml | 15:33 |
gf712 | so working on that | 15:33 |
HeikoS | Ill be online for a while now and will do reviews, ping me if you wanna discuss anything | 15:33 |
HeikoS | gf712 nice! looking forward to see that? | 15:33 |
gf712 | things are working, but need to figure out Pipelines | 15:33 |
Lefteris | Hello | 15:33 |
gf712 | and crossvalidators, etc.. | 15:33 |
HeikoS | I see | 15:33 |
HeikoS | yeah that will be tricky | 15:34 |
gf712 | but models work fine | 15:34 |
HeikoS | as it is not within the parameter framework in an exposable way | 15:34 |
HeikoS | ok let me dig into those PRs | 15:34 |
gf712 | OK, i'll let you have a look and the figure things out | 15:34 |
gf712 | then* | 15:34 |
@wiking | wuwei[m]: does that work then? | 15:35 |
-!- mode/#shogun [+o HeikoS] by ChanServ | 15:35 | |
wuwei[m] | yes it works | 15:35 |
@wiking | great | 15:35 |
wuwei[m] | I sent a pr | 15:35 |
@wiking | thnx | 15:35 |
@wiking | HeikoS: i wouldn't merge this | 15:45 |
@wiking | as it adds more crazyness | 15:45 |
@wiking | into it | 15:45 |
@wiking | adn later cleanup | 15:45 |
@HeikoS | ok sure | 15:45 |
@HeikoS | pitty for him though | 15:45 |
@HeikoS | lots of work | 15:46 |
@wiking | dunno why he went ahead | 15:46 |
@HeikoS | Let me push him again then to have a look at the feature branch | 15:46 |
@HeikoS | curiosity I guess | 15:46 |
@wiking | yeah but i told him | 15:46 |
@wiking | that there's another thing going on | 15:46 |
@wiking | and that should be the prio | 15:46 |
@wiking | if | 15:46 |
@HeikoS | Lefteris any updates on the string feature madness? | 15:51 |
Lefteris | I am about to hit enter for a new push | 15:53 |
Lefteris | I think now the python version is fine | 15:53 |
Lefteris | I could not fix the java version yet. | 15:54 |
@HeikoS | did you add the method to swig? | 15:55 |
@HeikoS | the methods you added were guarded so that swig only saw them for python | 15:55 |
Lefteris | not but why do we want to use DoubleMatrix? | 15:58 |
Lefteris | isn't this for double numbers? | 15:59 |
@HeikoS | Lefteris well we don't want to use it | 16:04 |
@HeikoS | this is why we want to change it | 16:04 |
@HeikoS | There is a typemap for stringlist | 16:04 |
@HeikoS | in java | 16:04 |
@HeikoS | gf712 just made some comments around this map | 16:05 |
@wiking | HeikoS: i dont agree with this | 16:05 |
@HeikoS | gf712 since std::map doesnt work, I think we should not use a map | 16:05 |
@wiking | Furthermore, we could then either have Python/specific lang extensions that turn it into a local datastructure (such as an explicit typemap for std::map in Python) or whatever if we want. | 16:05 |
@wiking | its a lot of extra work | 16:05 |
@HeikoS | wiking I think we shouldnt use CMap | 16:05 |
@wiking | cmap is somewhat swigable | 16:05 |
@HeikoS | because it makes later changes harder | 16:05 |
@wiking | which changes? | 16:06 |
@HeikoS | change to std:: for example | 16:06 |
@wiking | std | 16:06 |
@wiking | map you mean? | 16:06 |
@wiking | that we can never do | 16:06 |
@wiking | for swig | 16:06 |
@wiking | because that would mean that somebody will implement those typemaps | 16:06 |
@HeikoS | exactly | 16:06 |
@wiking | within swig | 16:06 |
@wiking | that will not happen | 16:06 |
@wiking | as its still missing in many target langs | 16:06 |
@HeikoS | but for this use case I dont think it is necessary to use/explose cmap | 16:07 |
@HeikoS | we just want some descriptions | 16:07 |
@HeikoS | and we want to minimise using those hand-baked data structures we have | 16:07 |
@wiking | yeah | 16:07 |
@HeikoS | especially if not really necessary | 16:07 |
@wiking | but we can move cmap | 16:07 |
@wiking | into the swig | 16:07 |
@wiking | if we want | 16:07 |
@wiking | but still | 16:07 |
@wiking | having an 'ordered' std::list/vector | 16:08 |
@HeikoS | no thats shitz | 16:08 |
@HeikoS | getter for single descr is my fav | 16:08 |
@HeikoS | I dont like it | 16:08 |
@HeikoS | but I like it more than the cmap | 16:08 |
@HeikoS | @wik | 16:09 |
@HeikoS | @wiking or you prefer the cmap thingi for real? | 16:09 |
@wiking | well that would work :) | 16:10 |
@wiking | i mean somewhere there will be the mapping | 16:10 |
@wiking | :) | 16:10 |
@wiking | or no mapping at all | 16:10 |
@wiking | and you need to do a [o.get_descr(n) for n in o.param_names()] | 16:10 |
@wiking | in all the target langs | 16:10 |
@wiking | if you want to expose the description of all the params | 16:11 |
@wiking | of a machine param | 16:11 |
@HeikoS | which sucks as well | 16:11 |
@HeikoS | sign | 16:11 |
@HeikoS | well at least no cmap so I prefer it | 16:11 |
@HeikoS | we can add the specific target lang code anyways for that then btw | 16:12 |
@HeikoS | add a method that returns a python dict | 16:12 |
@wiking | that sucks | 16:12 |
@wiking | i mean because this is getting more and more | 16:12 |
@wiking | python stuff | 16:12 |
@HeikoS | it is somewhat simmilar to the get | 16:12 |
@wiking | and we and up the same way | 16:12 |
@wiking | as with examples | 16:12 |
@HeikoS | true | 16:12 |
@wiking | there will be python target that is super maintained | 16:12 |
@wiking | everything else will just linger around | 16:12 |
@wiking | but that's the same for get already | 16:13 |
@wiking | :) | 16:13 |
@wiking | just wanna avoid to have this super python oriented solutions | 16:13 |
@HeikoS | get is quite findamental so it is useful there I think | 16:13 |
@wiking | yeah but would be useful in all the langauges | 16:13 |
@wiking | (none-typed) | 16:13 |
@wiking | :> | 16:13 |
@wiking | wuwei[m]: yeah great i've just merged the pr worked nicely | 16:14 |
wuwei[m] | great | 16:14 |
@HeikoS | ok I think then we should go for the getter | 16:15 |
@HeikoS | gf712 see discussion above | 16:15 |
@wiking | https://foonathan.net/meetingcpp2018.html | 16:15 |
@wiking | cool talk | 16:15 |
Lefteris | unfortunately, I will be able to work on this on Monday again. | 16:15 |
wuwei[m] | wiking: StanMath might have the same issue | 16:15 |
@HeikoS | Lefteris ok sure | 16:16 |
Lefteris | HeikoS: Thank you! | 16:16 |
@HeikoS | gf712 ah you already wrote a typemap for CMap I see | 16:16 |
lisitsyn | wiking: I fixed tapkee in the upstream | 16:34 |
lisitsyn | is C++17 a branch? | 16:34 |
@wiking | lisitsyn: is it copy paste that we did? | 16:34 |
@wiking | feature/cpp17 | 16:34 |
lisitsyn | ok | 16:34 |
lisitsyn | I can send a pr | 16:34 |
@wiking | nono | 16:34 |
@wiking | just push it directly | 16:34 |
@wiking | :D | 16:34 |
lisitsyn | ok | 16:34 |
@wiking | thnx | 16:34 |
@wiking | lisitsyn: https://github.com/lisitsyn/tapkee/commit/749c6e1edf026d5f88ddcaa61cca49c210828492#r32037936 | 16:35 |
@wiking | lisitsyn: adding some comments in tapkee | 16:35 |
lisitsyn | oh thanks | 16:35 |
lisitsyn | wiking: check the constexpr thing | 16:36 |
@wiking | haha | 16:36 |
@wiking | was about to comment | 16:36 |
lisitsyn | I had to do really crazy stuff | 16:36 |
@wiking | crazy hacko | 16:36 |
@wiking | :) | 16:36 |
lisitsyn | it was barely 11 these days | 16:36 |
lisitsyn | amazing that rather advanced code I wrote back then is now such a total crap lol | 16:36 |
@wiking | std::mt19937_64 is better btw | 16:36 |
@wiking | faster that is | 16:36 |
@wiking | and you need cmake_minimum_required (VERSION 3.8) to be able to set 17 standard in cmake | 16:37 |
@wiking | lalala | 16:37 |
lisitsyn | wiking: yeah thanks just updtaed | 16:37 |
@wiking | kk | 16:37 |
@wiking | lisitsyn: register | 16:38 |
@wiking | or where is that covertree | 16:38 |
lisitsyn | wiking: I think it is already dropped in the upstream | 16:38 |
lisitsyn | yeah it is | 16:38 |
@wiking | ajh yeah | 16:38 |
@wiking | cool cool | 16:38 |
lisitsyn | wiking: I just need to update | 16:38 |
@wiking | we had a sync problem | 16:38 |
lisitsyn | wiking: which is | 16:38 |
@wiking | hahahah | 16:38 |
lisitsyn | well | 16:38 |
@wiking | not a copy | 16:39 |
@wiking | i guess | 16:39 |
@wiking | :D | 16:39 |
lisitsyn | wiking: I lost my regular expression to do that for sure | 16:39 |
lisitsyn | but idea is that we need to replace everything in between of | 16:39 |
lisitsyn | these /* Tapkee includes */ | 16:39 |
@wiking | :D | 16:39 |
Lefteris | Bye guys. I'll be back on Monday. | 16:41 |
@wiking | ttyl | 16:41 |
-!- Lefteris [836fb90d@gateway/web/freenode/ip.131.111.185.13] has left #shogun [] | 16:42 | |
gf712 | HeykoS sorry was away from my desk | 16:51 |
@HeikoS | gf712 no worries | 16:55 |
gf712 | so shall I drop the map in favour of a single param getter? | 16:55 |
@HeikoS | I would prefer, but not sure about you andor wiking | 16:56 |
@HeikoS | my final thoughts are: then at least we have the same API for all langs without having to do anything | 16:56 |
@HeikoS | (and avoid spreading the cmap) | 16:57 |
gf712 | I like the dictionary, because it avoids having to write a loop/comprehension to get all the param value pairs | 16:57 |
@HeikoS | well | 16:57 |
@HeikoS | how to access the map? | 16:57 |
@HeikoS | in say java? | 16:57 |
@HeikoS | with a loop over the swig api of the CMap | 16:57 |
@HeikoS | so we don't really get anything from doing that | 16:57 |
@HeikoS | of course we could write typemaps for all langs | 16:58 |
gf712 | ok! I can replace it then | 16:58 |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 16:58 | |
gf712 | for me it is not a big issue | 16:58 |
@HeikoS | but I dont think this would happen, and if it only happens for python we will have the old problem of different APIs back | 16:58 |
gf712 | was more out of convenience, but I only use the python interface | 16:58 |
@HeikoS | keep the old code maybe in case the discussions goes back (it sometimes does :) ) | 16:59 |
gf712 | Hmm, I can have a look at the other langs to be honest | 16:59 |
gf712 | always wanted to be polylingual | 16:59 |
gf712 | :p | 16:59 |
@HeikoS | lol, well there are a few | 16:59 |
@HeikoS | and all this needs to be maintained | 17:00 |
@HeikoS | so you write the typemaps and then leave and then they will never be touched | 17:00 |
@HeikoS | adding a new lang will be harder | 17:00 |
@HeikoS | etc | 17:00 |
gf712 | OK, i'll stick to std::strings as return types | 17:00 |
@HeikoS | as said keep the old code (and psych) just in case ;) | 17:00 |
gf712 | Do you know what other std structures cause issues btw? | 17:01 |
gf712 | basically stick to primitives and std::string? | 17:01 |
@HeikoS | the only thing we can rely on is vector atm I think | 17:02 |
@HeikoS | not sure what the state of Some is | 17:02 |
gf712 | OK | 17:03 |
-!- abhinav-7 [76b9ec98@gateway/web/freenode/ip.118.185.236.152] has quit [Quit: Page closed] | 17:03 | |
@HeikoS | gf712 all this is subject to change if someone has better ideas :D | 17:04 |
gf712 | I would return a vector instead of a map but I am always scared that the order might mess up somehow | 17:04 |
@HeikoS | yeah let's not go there indeed | 17:04 |
-!- abhinav_7 [76b9ec98@gateway/web/freenode/ip.118.185.236.152] has joined #shogun | 17:05 | |
gf712 | alright, I'll replace the SWIG getters and stash the current code | 17:05 |
@HeikoS | cool! | 17:06 |
gf712 | and fix the error message | 17:06 |
gf712 | in CSGObject.cpp | 17:06 |
@HeikoS | cool! | 17:06 |
@HeikoS | I like having those 3 methods for name, type, and descr | 17:07 |
gf712 | HeikoS also need to talk about pipelines and crossvalidators at some point | 17:07 |
@HeikoS | sure | 17:07 |
@HeikoS | what do you want to know? | 17:07 |
gf712 | 1) how to find out it's a pipeline (get_name() == "Pipeline") | 17:08 |
gf712 | 2) how to iterate over transformers with the interface | 17:08 |
@HeikoS | 1) you mean the only way to find out is to ask for its name? | 17:09 |
gf712 | 3) is it possible to have nested pipelines? I don't think it is from the C++ code, but just to make sure | 17:09 |
gf712 | yes | 17:09 |
gf712 | if I have an object in Python | 17:09 |
@HeikoS | As of now, we don't have a Swig type pipeline i.e. it is not part of the base types iirc | 17:10 |
gf712 | and need to know if it is a sg.Pipeline | 17:10 |
@HeikoS | yeah I see | 17:10 |
@HeikoS | that is since you need to extract stuff that only a pipeline has | 17:10 |
@HeikoS | In this case, I think we need to add this to the base types | 17:10 |
@HeikoS | so that SWIG knows the type | 17:11 |
gf712 | this seems to work type(pipeline) == sg.Pipeline | 17:11 |
@HeikoS | yes because we export everything to swig | 17:12 |
gf712 | where pipeline is instantiated from sg.PipelineBuilder() | 17:12 |
@HeikoS | and this needs to stay like that | 17:12 |
@HeikoS | i.e. pipeline needs to a be a base type | 17:12 |
@HeikoS | and also we need a factory for the builder in factory.h | 17:12 |
gf712 | OK! | 17:12 |
@HeikoS | actually we dont if the type is exposed to swig | 17:12 |
gf712 | how would the builder handle multiple transformers though? | 17:12 |
@HeikoS | we can just use the ctor | 17:12 |
gf712 | sorry factory not builder | 17:12 |
gf712 | OK! | 17:12 |
abhinav_7 | Could anyone tell how to subscribe to the mailing list? Thanks in advance! | 17:13 |
@HeikoS | gf712 so the type(...) == sg.Pipeline works? | 17:13 |
@HeikoS | abhinav_7 the instructions on the website dont work? | 17:13 |
gf712 | HeikoS yes that works | 17:13 |
@HeikoS | gf712 ok that would be ok then or? | 17:14 |
gf712 | yup, I just hadn't thought about it before haha | 17:14 |
@HeikoS | hehe ok | 17:14 |
gf712 | what about 2)? | 17:14 |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 17:14 | |
-!- mode/#shogun [+o wiking] by ChanServ | 17:14 | |
@HeikoS | ok then how to iterate over its elements | 17:15 |
@HeikoS | I think you need to ask wiking | 17:15 |
@HeikoS | not sure there is yet a python api for that but I might be wrong | 17:15 |
@HeikoS | wuwei[m] actually wrote it so he can probably help as well | 17:15 |
abhinav_7 | @HeikoS The website links to this email address shogun-list-subscribe@shogun-toolbox.org, I don't know what do with it. | 17:15 |
gf712 | because you can get by name | 17:15 |
gf712 | but I can't find a way to get a list of the names | 17:16 |
gf712 | other than from __repr__ | 17:16 |
@HeikoS | abhinav_7 send an email with "subscribe" in subject I think | 17:16 |
abhinav_7 | I have done that. I think I should wait. Thanks for the help! | 17:16 |
@HeikoS | gf712 I see, you might have to add that, should be useful for other cases or? | 17:16 |
@HeikoS | abhinav_7 an empty email might also work | 17:17 |
gf712 | potentially, I mean it is used internally by pipeline so could expose it | 17:17 |
@HeikoS | yeah why not, just make sure the others have a look | 17:17 |
gf712 | and then nested pipelines? Is that a thing? | 17:18 |
gf712 | sorry about the question bombardment, I have been going through what is still needed for openml | 17:18 |
@HeikoS | i dont know the answer, haven't seen it though, seems complicated | 17:18 |
@HeikoS | no worries | 17:19 |
gf712 | OK! | 17:19 |
gf712 | thanks :) | 17:19 |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 245 seconds] | 17:20 | |
wuwei[m] | HeikoS gf712 hey | 17:21 |
@HeikoS | hi | 17:21 |
@HeikoS | see questions above | 17:22 |
wuwei[m] | what's the status of pipeline, is it a base class | 17:22 |
wuwei[m] | ? | 17:22 |
gf712 | yes | 17:22 |
gf712 | I think Pipeline can only be instantiated from PipelineBuilder | 17:22 |
gf712 | which returns a Pipeline base class | 17:23 |
wuwei[m] | this is what we are doing I think | 17:23 |
@HeikoS | wuwei[m] it atm is just exposed to swig | 17:24 |
@HeikoS | and I think this will stay like this | 17:24 |
wuwei[m] | I remember the issue of cross validation with pipeline is that we need CMachine* | 17:24 |
@HeikoS | yes | 17:24 |
wuwei[m] | see https://github.com/shogun-toolbox/shogun/pull/4380#issuecomment-437896178 | 17:24 |
@HeikoS | ah yes this issue | 17:25 |
@HeikoS | the problem is that "put" is very strict on types | 17:25 |
@HeikoS | no subclasses allowed | 17:25 |
@HeikoS | if something is stored as CMachine you have to give CMachine, cannot give CPipeline | 17:26 |
@HeikoS | this will not change unfortunately, it is down to the design of the tags framework | 17:27 |
@HeikoS | having something like "as" is the only way out I see atm | 17:27 |
@HeikoS | either as_pipeline or as_machine | 17:28 |
@HeikoS | one alternative would be to hardcode this particular case into the dispatcher for "put" ... not the nicest either | 17:28 |
@HeikoS | the alternative of just leaving it sitting there is not good as well finally | 17:28 |
@HeikoS | actually due to the stuff gf712 is doing, we should not return a pipeline as a machine, since then it will be impossible to extract its members for openml | 17:29 |
@HeikoS | so we need the pipeline type | 17:31 |
@HeikoS | although get_name also does the job | 17:32 |
gf712 | Either work for now! As long as we can rely on get_name | 17:32 |
@HeikoS | gf712 we can due to class_list in shogun | 17:33 |
@HeikoS | but then, note that "get" doesnt expose the pipeline elements | 17:33 |
@HeikoS | so we need the type anyways | 17:33 |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 17:38 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 17:38 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 17:38 | |
-!- mode/#shogun [+o wiking] by ChanServ | 17:38 | |
@wiking | abhinav_7: hi! please write to the mailing list | 17:38 |
@HeikoS | wuwei[m] what about we have a factory for xvalidation that accepts pipeline? | 17:40 |
wuwei[m] | HeikoS: what do you mean? | 17:43 |
@HeikoS | wuwei[m] have a factory method | 17:43 |
@HeikoS | CCrossValidation* xval(CPipeline* pipeline, ... ) | 17:43 |
@HeikoS | and inside it sets the "machine" member | 17:43 |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 17:45 | |
wuwei[m] | I think this works, we can only add it to swig | 17:45 |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 17:45 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 17:45 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 17:45 | |
-!- mode/#shogun [+o wiking] by ChanServ | 17:45 | |
wuwei[m] | this is the current factory method: machine_evaluation("CrossValidation", machine=pipeline, ...) | 17:46 |
wuwei[m] | so we will have another factory that take a pipeline argument | 17:47 |
@HeikoS | yes exactly | 17:47 |
@HeikoS | this way libshogun stay proper but we still can stick things together | 17:48 |
wuwei[m] | machine_evaluation("CrossValidation", pipeline=pipeline, ...), this still translates to xval.put | 17:51 |
@HeikoS | sure | 17:51 |
@HeikoS | it will have to be | 17:52 |
@HeikoS | machine_evaluation("CrossValidation, my_pipeline_instance) | 17:52 |
@HeikoS | translating to a c++ factory with 2 arguments | 17:52 |
@HeikoS | and then all the put stuff afterwards | 17:52 |
@HeikoS | maybe even this works | 17:52 |
wuwei[m] | i see | 17:53 |
@HeikoS | machine_evaluation("CrossValidation", pipeline, foo=bar) | 17:53 |
@HeikoS | finally, there is the option to have an exception is the dispatcher for the interfaces | 17:53 |
@HeikoS | wuwei[m] check out shogun.i | 17:54 |
@HeikoS | there are lots of such exceptions there already | 17:54 |
@HeikoS | you could sneak in a method put_machine_from_pipeline | 17:54 |
@HeikoS | similar to say put_vector_or_matrix_from_double_matrix_dispatcher | 17:55 |
@HeikoS | so you actually define c++ code that overloads the original "put" | 17:55 |
@HeikoS | and then checks the type, potentially casts it and then calls the CSGObject::put | 17:55 |
wuwei[m] | I think users may get confused with two factories, they have to use keyward argument machine=..., instead of positional one, if that is not a pipeline | 17:56 |
@HeikoS | yep | 17:56 |
@HeikoS | agree | 17:56 |
@HeikoS | so then dispatch within put | 17:56 |
@HeikoS | note that if you do that, the c++ meta example will complain | 17:56 |
@HeikoS | and if you put it into libshogun, then viktor will complain | 17:57 |
@HeikoS | which reminds me | 17:57 |
wuwei[m] | haha | 17:57 |
@HeikoS | wiking maybe we should drop the cpp meta examples | 17:57 |
@HeikoS | they dictate a lot of shitty stuff to libshogun arising from the "unified API" concept | 17:57 |
@HeikoS | see discussion above | 17:58 |
@HeikoS | shogun.i overloading of put for example | 17:58 |
@HeikoS | would be fine with putting another dispatcher for put into the interface code, but it shouldnt really be in libshogun imo | 17:58 |
@HeikoS | but then meta examples are kinda blocked for pipeline and xvalidation, so maybe the cpp ones should be just removed | 17:59 |
@HeikoS | in fact the API *is* different between libshogun and swig | 17:59 |
@HeikoS | so maybe not show them as the same but have a second set of libshognu examples, or even no examples instead | 17:59 |
@HeikoS | thoughts? | 17:59 |
@HeikoS | lisitsyn ^ | 17:59 |
@HeikoS | wuwei[m] I am signing off, maybe discuss this with the guys so we can move forward with the issue | 18:02 |
@HeikoS | gf712 see you later | 18:02 |
wuwei[m] | see you later | 18:03 |
gf712 | see you later | 18:05 |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 18:07 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 18:08 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 18:08 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 18:08 | |
-!- mode/#shogun [+o wiking] by ChanServ | 18:08 | |
-!- HeikoS [5aae0475@gateway/web/cgi-irc/kiwiirc.com/ip.90.174.4.117] has quit [Ping timeout: 240 seconds] | 18:12 | |
-!- gf712 [8028b333@gateway/web/freenode/ip.128.40.179.51] has quit [Quit: Page closed] | 18:15 | |
abhinav_7 | @wiking I have already sent a mail to shogun-list-subscribe@shogun-toolbox.org with the subject "Subscribe". But I haven't got any reply till now. | 18:27 |
@wiking | mmm | 18:27 |
@wiking | lemme check | 18:27 |
-!- abhinav_7 [76b9ec98@gateway/web/freenode/ip.118.185.236.152] has quit [Ping timeout: 256 seconds] | 19:39 | |
-!- gf712 [560fc4e5@gateway/web/freenode/ip.86.15.196.229] has joined #shogun | 21:42 | |
-!- gf712 [560fc4e5@gateway/web/freenode/ip.86.15.196.229] has quit [Ping timeout: 256 seconds] | 21:48 | |
-!- Trixis [~Trixis@unaffiliated/trixis] has quit [Ping timeout: 240 seconds] | 21:58 | |
-!- Trixis [~Trixis@unaffiliated/trixis] has joined #shogun | 22:00 | |
--- Log closed Thu Jan 24 00:00:41 2019 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!