tonyo | it can but only by the developer, internally you probably don't know which one they mean and if the parameters are more ambiguous you can't really recommend | 00:08 | |
here's how fez does it: github.com/tony-o/raku-fez/blob/ma...kumod#L663 | 00:14 | ||
i write pre-formatted usage docs for each command and put them in the resources to make it easier for me | |||
00:46
discord-raku-bot left,
discord-raku-bot joined
01:48
teatime left
|
|||
rcmlz | I was noth considering the multi case situation - you are right, in such situations it would be difficult for Raku to know what parameter to consider for blaming „wrong value for parameter xyz“. Thank you for clarifying. I guess I do need to invest some time into tuning GENERATE-USAGE. | 05:43 | |
08:15
dakkar joined
|
|||
antononcube | How can I program the postcircumfix operator for shaped arrays access? For a certain class/object I work on I want to access elements of it with $obj[3;1] . | 08:20 | |
I tried to use postcircumfix:<[ ]> withot success... | |||
lizmat | <[;]> | 08:22 | |
antononcube | @lizmat 🙂 I tried that but put a space in it postcircumfix:<[; ]> ... | 08:23 | |
@lizmat I have been skimming / reading "Array::Sparse" a lot in the last few days. | 08:27 | ||
Maybe, at some point I will figure out how to use in my Sparse Matrxi project. (Or "Array::Agnostic".) | 08:28 | ||
lizmat | :-) | ||
antononcube | I get this error now -- and I cannot figure out what to do: > Not enough symbols provided for categorical of type postcircumfix; needs 2 | 08:31 | |
Here is my code: multi sub postcircumfix:<[;]>(Math::SparseMatrix::CSR:D $mat, $i, $j) { $mat.value-at($i, $j) } | |||
lizmat | perhaps ($mat, *@args) ? | 08:32 | |
antononcube | Hmm.. I tried that too, same error. | 08:35 | |
lizmat | confirmed... | 08:36 | |
looks like it needs to be <; ]> | 08:38 | ||
sorry, <[; ]> | |||
with a space after ; | |||
antononcube looks like you're going to need to go through some hoops | 08:42 | ||
looks like the multi sub is not getting selected | 08:43 | ||
antononcube | Hmm... ok. (Again, I did try "[; ]", with the space first.) | 08:47 | |
lizmat | looks like there's something in dispatch that's not triggering correctly for <[; ]> :-( | 08:50 | |
my gist so far: gist.github.com/lizmat/c9cecea61e1...e177bd556d | 08:51 | ||
ab5tract | a temporary alternative could be to dispatch to a private multi with a less tricky name | 09:39 | |
lizmat | m: class A { }; proto sub postcircumfix:<[; ]>(|) {*}; multi sub postcircumfix:<[; ]>(A:D) { dd }; multi sub postcircumfix:<[; ]>(|c) { dd }; (A.new)[0;0] | 09:42 | |
camelia | sub postcircumfix:<[; ]>(|c) | ||
lizmat | so why is it selecting the |c candidate ? | 09:43 | |
oops, that is actually correct | |||
m: class A { }; proto sub postcircumfix:<[; ]>(|) {*}; multi sub postcircumfix:<[; ]>(A:D, |c) { dd }; multi sub postcircumfix:<[; ]>(|c) { dd }; (A.new)[0;0] | |||
camelia | Ambiguous call to 'postcircumfix:<[; ]>(A, List)'; these signatures all match: (A:D $, |c) (|c) in block <unit> at <tmp> line 1 |
09:44 | |
ab5tract | m: class A { }; proto sub postcircumfix:<[; ]>(|) {*}; multi sub postcircumfix:<[; ]>(A:D, |c) { dd }; multi sub postcircumfix:<[; ]>(|c) { dd }; (A.new)[A.new;0] | ||
camelia | Ambiguous call to 'postcircumfix:<[; ]>(A, List)'; these signatures all match: (A:D $, |c) (|c) in block <unit> at <tmp> line 1 |
||
ab5tract | m: class A { }; proto sub postcircumfix:<[; ]>(|) {*}; multi sub postcircumfix:<[; ]>(A:D, |c) { dd }; multi sub postcircumfix:<[; ]>(|c) { dd }; (A.new)[A.new;] | ||
camelia | Cannot resolve caller Int(A:D: ); none of these signatures matches: (Mu:U \v:: *%_) in block <unit> at <tmp> line 1 |
||
ab5tract | m: class A { }; proto sub postcircumfix:<[; ]>(|) {*}; multi sub postcircumfix:<[; ]>(A:D, |c) { dd }; multi sub postcircumfix:<[; ]>(|c) { dd }; (A.new)[A.new;A.new] | ||
camelia | Ambiguous call to 'postcircumfix:<[; ]>(A, List)'; these signatures all match: (A:D $, |c) (|c) in block <unit> at <tmp> line 1 |
||
lizmat | perhaps we should take this to #raku-dev | 09:45 | |
ab5tract | okay, sorry camelia, I know you don't like to be spammed | ||
lizmat++ | |||
lizmat | antononcube the sub must be: multi sub postcircumfix:<[;]>(Math::SparseMatrix::CSR:D $mat, @args) { $mat.value-at(@a[0], @a[1]) } | 09:49 | |
*@args[0], @args[1] | |||
the number of elems in @args indicates the number of dimensions | 09:50 | ||
antononcube | @lizmat Ok, great — Thank you! | 12:48 | |
lizmat | the reason is that each element in the @args could well be a list itself :-) | 12:49 | |
$mat[0; 20..30] | |||
librasteve | lol --- often the raku-beginner channel is about the same level as python core ;-) | 13:48 | |
antononcube | @librasteve Thanks for posting this: stackoverflow.com/q/70976231 | 14:06 | |
You posted both the original and the working solution code. | |||
librasteve | always happy to share how smart I am | 14:08 | |
(or more correctly the results of much trial and error) | 14:09 | ||
not sure if it says in the post, but the released code is in raku.land/zef:librasteve/Dan | 14:10 | ||
I would draw your attentioon to cascading accessors (which were in the PDL part of the synopses, but not imolemented) - maybe would make sense to isolate and package just that code... | 14:11 | ||
lizmat | librasteve could you tell me which part of the code you're talking about ? | 14:25 | |
antononcube | I think the methods .splice , .aop, etc. | 14:28 | |
@librasteve Also, what is "PDL" ? Perl Data Language? | 14:29 | ||
librasteve | PDL … yes that was an early concept for perl Numpy iiuc | 14:49 | |
lizmat: sorry I’m on the road, let me try anyway … in the Dan repo /bin/synopsis.raku has a section called Value Accessors which shows the API | 14:52 | ||
the 2d code for class DataFrame is at /lib/Dan.rakumod ll745 under Role Support | 14:55 | ||
antononcube | Can I, should I implement postcircumfix:<[ ]> as a class method? It seems the method approach is not working. | 15:18 | |
lizmat | antononcube if your class implements methods AT-POS and friends, you shouldn't have to need to make postcircumfix subs ? | 15:19 | |
m: class A { method AT-POS(|c) { dd c } }; A.[42] | 15:20 | ||
camelia | \(42) | ||
lizmat | n: class A { method AT-POS(|c) { dd c } }; A.[42,666] | ||
m: class A { method AT-POS(|c) { dd c } }; A.[42,666] | 15:21 | ||
camelia | \(42) \(666) |
||
antononcube | Yes, I tried AT-POS -- works nicely with a single, integer argument, e.g. $obj[3] . But when use a spec like $obj[2, 3, 1] it gives me a list of single argument applications, like, ($obj[2], $obj[3], $obj[1]) which is not what I want -- a new $objc has to be made corresponding to (2, 3, 1). | 15:26 | |
Hence, I am investigating postcircumfix:<[ ]> and postcircumfix:<[;]>. | |||
tonyo | antoncube, you figure it out? | 15:44 | |
antononcube | @tonyo Not completely. 🙂 | 15:48 | |
16:34
dakkar left
|
|||
tonyo | m: class A { has $.b; }; sub postcircumfix:<[ ]> (A:D $a, **@as) { dd $a.b; dd @as; }; my $a = A.new(b=>5); $a[1,2,3]; | 17:02 | |
camelia | 5 [(1, 2, 3),] |
||
tonyo | something like that ^ ? | ||
are you trying to use a tuple keyed hash or something? | |||
antononcube | @tonyo Thanks -- trying that out now. | 17:05 | |
@tonyo These tests might clarify what I am looking for : github.com/antononcube/Raku-Math-S...s.rakutest | 17:06 | ||
In addition I would like to make "slices" like: 1) $mat[4;5] 3) $mat[1..3;2...6] | 17:07 | ||
tonyo | if you need to use private stuff in there: | ||
m: class A { has $!b; method AT-POS(*@as) { dd @as; } }; sub postcircumfix:<[ ]> (A:D $a, **$as) { $a.AT-POS(|$as); }; my $a = A.new(b=>5); $a[1,2,3]; $a[2] | |||
camelia | [1, 2, 3] [2] |
||
tonyo | ^ that works with $a[1..3] and $a[1;3] too | ||
antononcube | @tonyo These work to a point -- thanks! | 17:32 | |
But if I add the lines: my @b = 33, 12, 23, 3, 6; say @b[1,2]; I get the error: > Type check failed in binding to parameter '$a'; expected A but got Array ([33, 12, 23, 3, 6]) | 17:33 | ||
It looks like adding multi to my special definition of postcircumfix:<[ ]> fixes the problem with typycal arrays. | 20:01 | ||
ab5tract | antononcube: careful with the likely unintentional use of the sequence operator here: $mat[1..3;2...6] | 20:46 |