Re: Documentation on new data model for Leo outlines

2018-05-20 Thread vitalije

On Thursday, May 17, 2018 at 9:20:33 PM UTC+2, Matt Wilkie wrote:
>
> I have just published first two articles about what I have done so far in 
>> this mini-project. Here are the links:
>>
>  [...]
>
>> All comments are welcome.
>>
>  
> Vitalije, I'm working my through your posts on that site from the 
> beginning. It's slow because I understand little because of my shallow 
> coding background. However I want to say that enjoy them and learn things. 
> Top of mind at the moment is your recognition that your initial attempts to 
> communicate an idea didn't work and that a) building a demo might be 
> effective, and b) choosing something that wasn't currently in discussion 
> but had been before would invite deeper inspection and involvement. 
>
> Thanks,
>
> Matt
>

Matt Wilkie, thanks for these kind comments. I am glad you like it.  

I have almost finished small gui that uses new LeoTreeModel as its data 
model. Reading and writing external files works correctly. I have made 
methods for all tree operations that I could think of. Promote/Demote, move 
node up, down, left and right, move node to any given position. Now here 
are some comparisons with the present Leo:

A node with the following body:
import timeit
def f():
c.demote()
c.promote()
def test(fun, num):
t1 = timeit.timeit(fun, number=num)/num*1000
g.es('%s avg:%.1fms'%(fun.__name__, t1))
def f2():
c.moveOutlineDown()
c.moveOutlineUp()

test(f, 10)
test(f2, 10)

Make it last node in outline, then make a clone of it, and insert three 
empty nodes after with heading a,b and c.
Let those five nodes be the last five top-level children of the outline. 
Select second clone (one closer to the end) and execute script.
The results depend on the size of the visible outline. I have tried with 
the LeoPy.leo and at first with all nodes collapsed I've got the following 
results:
f avg:126.6ms
f2 avg:160.9ms

When similar script executed on the same nodes in my gui prototype:
demote/promote average: 3.3ms
up/down average: 3.8ms

Here is the script:
def speedtest(x):
import timeit
pos = ltm.positions[-4]
def f1():
ltm.promote(pos)
draw_tree(tree, ltm)
ltm.promote_children(pos)
draw_tree(tree, ltm)
def f2():
ltm.move_node_down(pos)
draw_tree(tree, ltm)
ltm.move_node_up(pos)
draw_tree(tree, ltm)

t1 = timeit.timeit(f1, number=100)/100*1000
t2 = timeit.timeit(f2, number=100)/100*1000
print('demote/promote average: %.1fms\n'%t1)
print('up/down average: %.1fms\n'%t2)

Just executing once expand-all took too much time (didn't measure but more 
than 20s). After that I have reduced the number of timeit executions to 
just 1 and got the following results (with fully expanded tree of LeoPy.leo)

f avg:4374.2ms
f2 avg:4385.8ms

Performing same in prototype gui, expanding all nodes was instantaneous and 
timing it 100 times gave me the following results:
demote/promote average: 16.4ms
up/down average: 19.3ms

As you can see it is definitely dependent on the number of visible nodes, 
but nevertheless it is much faster than current Leo implementation.

To be fair, I must point out that Leo is performing also undo/redo logic 
which my prototype still doesn't. But taking a full snapshot of the tree in 
the new model was measured before and it used to take about 20ms, for the 
outline of about 8300 nodes (LeoPyRef.leo).

With that snapshot time added new model is still at least 100 times faster 
than Leo in the worst case (for Leo) and about 6 times faster in the 
easiest case for Leo (with all nodes collapsed).

Even if the changing Leo tree is O(1) operation, it seems that overall 
operation is much worse. Increasing number of visible nodes from 28 to 8349 
(about 300 times more), caused time to grow from 0.1s to 4s or about 40 
times. This of course is not real proof, but for practical purposes will 
do. New model OTOH slows down by factor of 6 when increasing number of 
visible nodes 300 times.

What still remains to be done in my prototype is importing files, reading 
at-auto files which is wide area considering how many different languages 
Leo supports. I will try to make python, markdown and rest importers next 
because they are used in Leo, Leo's installation folder have files that I 
can use for the testing and comparing with the Leo importers.

For the javascript importer I have an idea to use node modules for parsing 
numerous javascript dialects. Existing node modules like babel have already 
solved the problem of different dialects and can produce necessary data for 
Leo to create well shaped outline. And those node modules work very fast. 
They analyze hundreds of js files in less than 10s.

And it is most likely that every user who wants to use Leo for editing 
javascript, has already installed node.

Vitalije.


-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this 

dd3ceaf39 deprecates @bool auto_tab_complete

2018-05-20 Thread Edward K. Ream
When True, this setting automagically completes the selection to the 
greatest common prefix of all possible completions.  In particular, when 
only one completion remains there is nothing left to do.

Rev dd3ceaf39 deprecates this setting by changing the default value to 
True.  If you prefer False as the value you will now have to add @bool 
auto_tab_complete = False to your myLeoSettings.leo.

Imo, autocompletion doesn't make a lot of sense unless the value of the 
setting is True. Somehow yesterday I set this setting to False by mistake 
and it appeared that autocompletion was broken.

I surmise that somebody wanted the effect of @bool auto_tab_complete = 
False, but this is just a guess.  Does anyone actually set this setting to 
False?

Edward

-- 
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to leo-editor+unsubscr...@googlegroups.com.
To post to this group, send email to leo-editor@googlegroups.com.
Visit this group at https://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.