| --- 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!