[sage-combinat-devel] Does something exist if you are not looking at it? .... Searching through a massive chunk of a vector space without storing the whole thing in memory ...
Hi everyone following on from the great help I got at https://groups.google.com/forum/#!topic/sage-support/GFJdjFvKCvo and https://groups.google.com/forum/#!topic/sage-combinat-devel/Oj40TFshcYA, I have finally boiled the remaining sluggishness in my search problem down to this. Note that my code is very quick for small cases (eg q100, d5 in notation below) but horrendously slow, in fact pretty much stationary, for larger q,d. Fix F = GF(q) = a finite field of char p; d = an integer=2; N integer =d; S = a subset of F of size q+1. My search space (it is a subset of the vector space F^N but not a subspace) consists of the cartesian product N_1 = S^d x F^(N-d). Let B be a set of size d consisting of vectors/tuples in N_1 which are orthonormal in the sense that for v,w in B: v.v=w.w=1 and v.w=0 for v!=w; where the . denotes the dot product of vectors. Given such a set B, I want to find similar orthonormal sets C, D etc which are again subsets of N_1 and which further satisfy: *(*) for any b in B and any c in C and any d in D etc etc: **b.c and b.d and c.d and ... all lie in S.* Note that S does not contain 0 or 1 so in particular all of these sets B,C,D,... are pairwise disjoint and none of the vectors are isotropic. Ultimately the aim is to find the cardinality of the largest such collection {B,C,D,...} - we do not need to store any other information along the way. Naive searching in low dimensions/characteristics is very fast, particularly when randomized: but my search machine grinds to a halt whenever |N_1|.d exceeds around 1 million, since it has to store the entire space N_1 in memory. I know this is not surprising - only I cannot think of a better way of achieving the sifting process I need. I am relying heavily on the inbuilt python functions like all() and any() etc. Imagine that N_1 is a dark dormant forest whose trees are my vectors. I can randomize the position of the trees; then what I do is to shine a spotlight on a patch of the forest and see whether a suitable initial set B is in there; then I cut out all of the trees which do not satisfy (*) with respect to B, and then re-shine the spotlight and see whether my next set C can be taken from there, and so on. This is effectively what my current algorithm does. *So my question is: is there a way in which I can achieve this same algorithm without having to instantiate the vectors in N_1 initially in memory?* That is, as in the title to this post, is there a way of only making the set of vectors picked out by my spotlight exist in memory once my spotlight is shined upon them, with the remaining part of the forest remaining somehow dark and not in memory? I should mention that I have tried the obvious thing of not storing N_1 and just creating small patches of random trees, and it is hopeless. In other words, relying on Python's randoms and all() any() etc functions seems to be infinitely better than trying to do them myself in some way. But I am wondering whether the combinatorial algorithms you guys have written might do this in some way I don't yet understand? I tried some (naive) backtracking stuff but I was unable to do it in any way which didn't require an equivalent amount of up-front or along-the-way storage ... Thanks a lot for your ongoing help. Gary. -- You received this message because you are subscribed to the Google Groups sage-combinat-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-combinat-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-combinat-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-combinat-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Re: new M4RI(E) SPKGs need review
Any volunteers for reviewing this? On Saturday 23 Mar 2013, Martin Albrecht wrote: Hi, I've released new versions of M4RI and M4RIE and I'd appreciate if someone could take the time to review the relevant tickets to get these updates into Sage: M4RI:http://trac.sagemath.org/sage_trac/ticket/14335 M4RIE: http://trac.sagemath.org/sage_trac/ticket/14336 # What's new? # ## M4RI ## It's faster! For example. here's matrix multiplication on my computer: n 5.8 vanilla 5.8 + #14335Magma 4096 0.09s 0.07s 0.10s 8192 0.67s 0.62s More data here: https://martinralbrecht.wordpress.com/2012/12/21/m4ri-20121224/ (20121224 never made it into Sage) ## M4RIE ## ### Performance ### It extends to degree 16 which means GF(2^e) for 10 e = 16 is now *a lot* faster in Sage (i.e., not embarrassingly slow) Here's multiplication for 4096 x 4096 matrices over GF(2^e) extension vanilla with patch magma 2.15-10 e: 1,0.09s 0.07s 0.10s e: 2,0.30s 0.22s 0.68s e: 3,0.64s 0.46s 1.89s e: 4,0.89s 0.70s 6.35s e: 5,1.34s 1.05s 92.43s e: 6,1.77s 1.39s e: 7,2.22s 1.74s e: 8,2.72s 2.14s e: 9,31.21s 5.74s e: 10,41.42s 7.94s e: 11,long9.31s e: 12,long10.56s e: 13,long56.39s e: 14,long100.64s e: 15,long141.88s e: 16,long199.78s 464.14s I didn't run those marked long because I ran out of RAM, check this though (without patch): sage: A = random_matrix(GF(2^11,'a'),500,500) # ~1/10 of above size sage: B = random_matrix(GF(2^11,'a'),500,500) sage: %time A*B CPU times: user 48.05 s, sys: 0.21 s, total: 48.26 s Wall time: 48.43 s Note that e8 is not optimised yet. More information here: https://martinralbrecht.wordpress.com/2012/08/23/m4rie- support-for-finite-fields-up-to-degree-16-added/ ### Compilation ### I've split up conversion.c which means I can now do this: $ ulimit -v 196608 make in the M4RIE directory and M4RIE successfully built with 192MB of virtual memory. Cheers, Martin -- name: Martin Albrecht _pgp: http://pgp.mit.edu:11371/pks/lookup?op=getsearch=0x8EF0DC99 _otr: 47F43D1A 5D68C36F 468BAEBA 640E8856 D7951CCF _www: http://martinralbrecht.wordpress.com/ _jab: martinralbre...@jabber.ccc.de Cheers, Martin -- name: Martin Albrecht _pgp: http://pgp.mit.edu:11371/pks/lookup?op=getsearch=0x8EF0DC99 _otr: 47F43D1A 5D68C36F 468BAEBA 640E8856 D7951CCF _www: http://martinralbrecht.wordpress.com/ _jab: martinralbre...@jabber.ccc.de -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] deinstallation of spkg
Is there a way to undo sage -i somepackage, i.e. deinstall a package? Ralf -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [sage-devel] deinstallation of spkg
On 04/08/2013 10:17 AM, Ralf Hemmecke wrote: Is there a way to undo sage -i somepackage, i.e. deinstall a package? No. -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] When a module is removed, the .pyc file still exists after sage -b
Hello everybody !! I am having a small problem with patch 14355 which supposedly removes a module that was never used. Indeed, all tests used to pass when the module was removed, but it looks like it is mostly due to the fact that removing the module does not remove the corresponding .pyc file, so that the module is still available in Sage... ^^; Well, is there any way out ? :-P Thnks ! Nathann -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [sage-devel] When a module is removed, the .pyc file still exists after sage -b
Le 08/04/2013 12:48, Nathann Cohen a écrit : Well, is there any way out ? :-P Yes. Test patches in a clean install. Snark on #sagemath -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [sage-devel] When a module is removed, the .pyc file still exists after sage -b
You can also delete the relevant files in $SAGE_ROOT/devel/sage/build (search through all three subfolders). David On Mon, Apr 8, 2013 at 4:48 AM, Nathann Cohen nathann.co...@gmail.comwrote: Hello everybody !! I am having a small problem with patch 14355 which supposedly removes a module that was never used. Indeed, all tests used to pass when the module was removed, but it looks like it is mostly due to the fact that removing the module does not remove the corresponding .pyc file, so that the module is still available in Sage... ^^; Well, is there any way out ? :-P Thnks ! Nathann -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [sage-devel] deinstallation of spkg
There are various people working on making this possible, but it requires a lot of changes to Sage's packaging system. As Jeroen says, this is not currently possible. David On Mon, Apr 8, 2013 at 2:25 AM, Jeroen Demeyer jdeme...@cage.ugent.bewrote: On 04/08/2013 10:17 AM, Ralf Hemmecke wrote: Is there a way to undo sage -i somepackage, i.e. deinstall a package? No. -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscribe@**googlegroups.comsage-devel%2bunsubscr...@googlegroups.com . To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/**group/sage-devel?hl=enhttp://groups.google.com/group/sage-devel?hl=en . For more options, visit https://groups.google.com/**groups/opt_outhttps://groups.google.com/groups/opt_out . -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [sage-devel] deinstallation of spkg
On 04/08/2013 01:39 PM, David Roe wrote: There are various people working on making this possible, but it requires a lot of changes to Sage's packaging system. As Jeroen says, this is not currently possible. Thanks, but then another question. We have Sage installed centrally and would like to give people a chance to say something like sage -i some-spkg. Does Sage allow to install packages locally in $HOME while a (read-only) vanilla Sage is in /opt/sage? Has such a scenario already be considered? Ralf -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [sage-devel] deinstallation of spkg
On 8 April 2013 12:50, Ralf Hemmecke hemme...@gmail.com wrote: On 04/08/2013 01:39 PM, David Roe wrote: There are various people working on making this possible, but it requires a lot of changes to Sage's packaging system. As Jeroen says, this is not currently possible. Thanks, but then another question. We have Sage installed centrally and would like to give people a chance to say something like sage -i some-spkg. Does Sage allow to install packages locally in $HOME while a (read-only) vanilla Sage is in /opt/sage? They could take a local copy of the whole build in their own directory and then use that, if they have plenty of space (a vanilla build of 5.9.beta4 takes up 3.5GB). John Has such a scenario already be considered? Ralf -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: [sage-devel] deinstallation of spkg
Le 08/04/2013 13:57, John Cremona a écrit : On 8 April 2013 12:50, Ralf Hemmeckehemme...@gmail.com wrote: On 04/08/2013 01:39 PM, David Roe wrote: There are various people working on making this possible, but it requires a lot of changes to Sage's packaging system. As Jeroen says, this is not currently possible. Thanks, but then another question. We have Sage installed centrally and would like to give people a chance to say something like sage -i some-spkg. Does Sage allow to install packages locally in $HOME while a (read-only) vanilla Sage is in /opt/sage? They could take a local copy of the whole build in their own directory and then use that, if they have plenty of space (a vanilla build of 5.9.beta4 takes up 3.5GB). Or instead of a real local copy, only have the same directory structure and symlinks for the files. That's basically what I do to test how good debian packages are for the sage packaging effort. The functions I use look like: def create_directory(name): try: os.makedirs(name) if verbose: print (u'create_directory(%s)' % name) except: pass def symlink_file(source, target): try: os.symlink(source, target) if verbose: print (u'symlink(%s, %s)' % (source, target)) except: pass def symlink_directory(source, target): create_directory(target) for name in os.listdir(source): next_source=os.path.join(source, name) next_target=os.path.join(target, name) if os.path.isdir(next_source): symlink_directory(next_source, next_target) else: symlink_file(next_source, next_target) I hope that helps, Snark on #sagemath -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Re: When a module is removed, the .pyc file still exists after sage -b
sage -sync-build should do that. -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] symbolic copy of installed sage into HOME
On 04/08/2013 02:26 PM, Julien Puydt wrote: Or instead of a real local copy, only have the same directory structure and symlinks for the files. Suppose that $S is a shell variable that points to the installed Sage. What do the people say who have more knowledge of the Sage-internals. A) Is the following giving me a full functional Sage version in my HOME (with only about 300 MB)? Or did I mis anything in my commands below? B) Is sage -i some-package supposed to work in this local copy? (It might be necessary to remove some links, I guess.) Ralf S=/opt/sage T=$HOME/mysage mkdir -p $T cd $S find . -type d -exec mkdir -p $T/{} \;# directories find . -type f -exec ln -s $S/{} $T/{} \; # files find . -type l -exec cp -d $S/{} $T/{} \; # links cd $T find . -name '*.pyc' -delete find . -name '*.la' -delete find . -name '*.pc' -delete /bin/rm $T/local/default.qepcadrc /bin/rm $T/local/lib/sage-current-location.txt cp $S/local/lib/sage-current-location.txt $T/local/lib/sage-current-location.txt /bin/rm $T/spkg/bin/sage cp $S/spkg/bin/sage $T/spkg/bin/sage # Set SAGE_ROOT to point to $T emacs $T/spkg/bin/sage # do the relocation ./sage -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] [no-re...@google-melange.appspotmail.com: [Sage] Your organization application has been accepted.]
We've been accepted to this year's GSOC! - Forwarded message from no-re...@google-melange.appspotmail.com - Date: Mon, 08 Apr 2013 18:43:19 + From: no-re...@google-melange.appspotmail.com To: dr.dan.dr...@gmail.com Subject: [Sage] Your organization application has been accepted. Congratulations! Your Organization Application for Sage in Google Summer of Code 2013 has been accepted. Please click http://www.google-melange.com/gsoc/profile/organization/google/gsoc2013?org_id=sage to fill in the necessary information and create your Organization profile. [...] - End forwarded message - Dan -- --- Dan Drake - http://math.pugetsound.edu/~ddrake --- signature.asc Description: Digital signature
Re: [sage-devel] sage-5.8 do not compile on lubuntu 12.10 --- does not find blas!
For what it is worth, I now tested sage/5.9.beta4. The exact same problem as reported in this thread occured there! Kjetil On Sat, Apr 6, 2013 at 2:12 AM, Kjetil brinchmann Halvorsen kjetil1...@gmail.com wrote: Thanks! Here comes the config.log, as attachment. Kjetil On Fri, Apr 5, 2013 at 12:07 AM, François Bissey francois.bis...@canterbury.ac.nz wrote: On Fri, 05 Apr 2013 00:04:30 Kjetil brinchmann Halvorsen wrote: Thanks! See inline below. On Thu, Apr 4, 2013 at 11:47 PM, François Bissey francois.bis...@canterbury.ac.nz wrote: On Thu, 04 Apr 2013 23:41:06 Kjetil brinchmann Halvorsen wrote: see inline below. Not pretty. There is a bit of a mystery as to why -latlas doesn't give you the right libraries. libcblas should be linked with libatlas, it is technically correct as is but should be handled better. I hope that Volker did a better job with the next ATLAS spkg. Try to resume building sage with the following: LINBOX_BLAS=-L/home/kjetil/sage/sage-5.8/local/lib -lcblas -latlas make Didnt work. Starts like this: Hum can you send me the corresponding config.log please. Francois -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out. -- If you want a picture of the future - imagine a boot stamping on the human face - forever. George Orwell (1984) -- If you want a picture of the future - imagine a boot stamping on the human face - forever. George Orwell (1984) -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Sage part of Google's Summer of Code 2013
Good News, like last year Sage is once again part of Google's Summer of Code. This means, until April 22 at 19:00 UTC students can submit their applications and mentors will review them and do the matching. Please share this with prospective students or think about being a mentor this year! gsoc page: http://www.google-melange.com/gsoc/org/google/gsoc2013/sage ideas: http://goo.gl/l0CRl (check back for updates) Harald -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Re: When a module is removed, the .pyc file still exists after sage -b
Thank you for your answers ! I fixed the patch and a new version is now available for review :-) Nathann -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Re: Sage part of Google's Summer of Code 2013
That's great news. Volker, are you still interested in mentoring the windows gui? -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Re: Sage part of Google's Summer of Code 2013
Yes, I can mentor an Android app project and/or a cross-platform (including Windows ;-) GUI On Monday, April 8, 2013 11:52:23 PM UTC+1, mmarco wrote: Volker, are you still interested in mentoring the windows gui? -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Re: Sage part of Google's Summer of Code 2013
Ok, in that case i step out of it. I considered mentoring it with pyqt if nobody else did so, but i am sure you are a much better fit for that than me. I will try to spread the word among possibly interested students. On 9 abr, 00:54, Volker Braun vbraun.n...@gmail.com wrote: Yes, I can mentor an Android app project and/or a cross-platform (including Windows ;-) GUI On Monday, April 8, 2013 11:52:23 PM UTC+1, mmarco wrote: Volker, are you still interested in mentoring the windows gui? -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
[sage-devel] Re: Sage part of Google's Summer of Code 2013
Please consider participating, its not a zero-sum game. At the very least we need a backup mentor. And the choice of GUI toolkit really doesn't matter that much in the bigger picture. Really, the question is how to present functionality in an intuitive way and how to organize the code (e.g. MVC pattern). On Tuesday, April 9, 2013 12:01:41 AM UTC+1, mmarco wrote: Ok, in that case i step out of it. I considered mentoring it with pyqt if nobody else did so, but i am sure you are a much better fit for that than me. -- You received this message because you are subscribed to the Google Groups sage-devel group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.