Exploring Wolfram Language V13

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
okay hello everyone well welcome to version 13's release so it's exciting to be here again talking about a new version of language and mathematica it's been just a bit over six months since the last minor version 12.3 except it isn't so minor came out now we're talking about version 13.0 it's been a couple of years since version 12 came out over the course of that time we've added a huge amount of new material essentially what we try to do is that the 0.1 releases a couple per year are intended to pick up all of the r d that we do during that period of time and then the the big integer releases are ones where we get to finish stories on lots of kinds of things now it's it's uh it's kind of interesting to see the um the progression over the years that we've been able to add in each major release progressively more new functionality uh in the current release of version 13 relative to version 12 we were added about 600 let's see what is it 635 new functions and to give a sense of scale in version 1 of mathematical morphing language back in 1988 um the total number of functions was 554. so between version 12 and version 13 we've added more new functions than the total number of functions that were in version one of the system and the thing that those new functions that we add today are much bigger stronger things than a single new function was a third of a century ago when we first released version one what we get to do as we build a new function today is build on top of all the things that we've created so far and that means that the kinds of things that represent one new function today tend to be bigger stronger more powerful things than they ever were in the past and also one of the things that we've done a lot of work to achieve is maintain coherence and unity to our whole system which means when we add a new function today it has to be knitted together with everything else that already existed now today we're releasing version 13 there's a whole bunch of 1-3s going on here it happens to be the 13th of the month that was largely coincidental it's also been one-third of a century it was uh about um a month ago it was one third of a century since the first release of of mathematical morphing language back in june of 1988. so it's been very satisfying and impressive to see what's happened over the last third of a century it's so we went from uh the the uh the computer industry is probably two-thirds of a century old the first uh uh commercial computers came into existence about two-thirds of a century ago we have existed with our system for half of that time and during that time the kind of vision that we've had for what wolfram language and mathematica should be has well it started in a in a good place and it's continued evolving from there and we've been able we were able to start from this foundation of our computational language our symbolic programming environment and we're able to build more and more on top of that in fact the thing that has been impressive to me and which i've been understanding recently particularly in the context of a bunch of new basic science that that i've been doing is just how remarkably successful and in a sense uh um how much it was sort of a good core choice to base our whole system on this idea of symbolic expressions and transformations of symbolic expressions and then over the years to understand how much we could put sort of all the computational knowledge of the world into this the system and build out this whole idea of computational language all right so what i want to do here is show you a bit of what's new in in version 13.0 and i'm mostly going to concentrate on what's new in 13.0 relative to uh 12.3 um there's if i were to talk about the whole version 12 to version 13 transition that's even more to talk about and i will say that uh i just posted today just now um a uh a piece about um uh what is in version 13 here so um you can find this piece and i'll be more or less going through what is uh what i've discussed in this piece um as we uh as we go forward here so let me um uh let me without further ado concentrate on the um on what we can do here so let me uh just okay so this this word cloud kind of gives us some indication of some of the new features in version 13. um i'll be talking about this long you can see the thumb the thumb is very small there i'll be talking about this long post of all these different kinds of things that are in version 13 showing them and then there'll be an opportunity for q a afterwards um please uh feel free to ask things on the on the live stream and i'll try and address them um and uh that's what we're gonna look at so this is kind of an interesting summary plot here of how much was new in successive versions of uh our system and you can see that version 13 has more that is new relative to version 12 than we've ever had new in a version before and um you can also see this kind of very steady drum beat of innovation and delivery of technology that uh we've had now for many many versions and that we expect to continue into the future and that is made possible by the whole platform and set of capabilities that we've built all right well let's uh let's get started here and let's actually look at some some of what's new so there are many different areas that we can um uh talk about i i should say by the way that everything i'm showing here is available right now um it is available to download for desktop versions it is also available in the uh in the world from cloud and in fact the um the cloud version has been was updated a few days ago you can if you go to the cloud you can be running all the same things i'm talking about i'll probably post um the notebook that i'm making um in uh in the cloud so you can you can play with it um as as you wish all right so let's talk about um uh what's new and we're gonna go over lots and lots of different areas let's start off with an area that was was big a third of a century ago when we released mathematica from its very name it was clear that this sort of the killer application area was mathematics uh clearly that as we've expanded far beyond that mathematics was a great place to start but the core structure of the wolfram language was always intended to support the kind of whole spectrum of computational x fields not specifically mathematics but we continue to advance in terms of what can be done mathematically and one of the things that was uh a neat feature back in version one was we can do integrals symbolically so here for example uh we're getting this is a particular integral and um this is something that we couldn't do before and now hopefully we can do it um and uh it's it's remarkable that even after all these years there are advances to be made in the art of symbolic integration um not only in into which integrals can be done but sort of the big challenge is um when you do an integral can you recognize can you get the result of the integral in some form that humans like and that's something again that we've been uh we've been able to achieve here so another thing that um uh we've we've done has to do with mathematical functions um back back when when dead integrals by hand one of the things i always like used to like is you know you do an integral and um uh when you do it by hand then it's like oh i want to show you before before i before i do anything else i want to show you a new feature which we're not going to get to see as i go further because the notifier that comes up won't come up again after the first first time in a session okay so this is one of the things we're always trying to kind of smooth and polish the ways that people can make use of our system and make use of our notebook technology so let me show you one that's a new thing so i type f and i type open bracket and look it typed a close bracket at the same time oh you know what i'm too late here there's a notifier that comes up the very first time in a session that uh you typed this but i was going to show you the notifier but i already told the notifier to go away so it's not going to show me that again in this session and you can tell it to go away for all sessions once you've once you've seen it once um you don't need to see it again but it is explaining how you deal with this idea of you've typed an open bracket now i can type a g here type an open bracket it'll type a closed bracket i type a brace it'll type it close brace but how do i get out of here and the whole idea is you can you can type an arrow if you want to but you can also just type through the bracket so in other words when when the bracket is there and it was automatically added if you just type if you just respond to what the computer already added for you and you typed the same thing again but i type h i type the open bracket and now it's typed it goes bracket and i'm now going to press the close bracket key again and it's going to type through the closed bracket so this is kind of the idea it's like things are generically matched brackets that's really useful but the way that you kind of move through that is you type the things you would have typed before but even if you didn't want to bother to type it you can just click outside and you will have uh matching brackets okay coming back to what i was talking about before um one of the things that um uh was always uh exciting when when back in those days when i used to do things like integrals by hand was when you would do some integral and you would realize that that integral came out in terms of some mathematical function that um uh one hadn't heard of before and so on and that was kind of always a uh always always an interesting thing and in a sense these mathematical special functions are kind of a way of packaging different kinds of mathematical knowledge so to know that this is a tri-logarithm function is to know that along with this idea of the trilogy you get this whole sort of package of mathematical knowledge about the way that um that that about what that means so in any case one of the things that um uh was uh there's a kind of a zoo of these mathematical special functions this sort of packaging of mathematical knowledge hundreds of these things and it was always the case that uh there were a couple of well-known handbooks about mathematical functions um one of them here to show you it um one of them was this book a brahmos and stegen um it's a a book about mathematical functions and it has a combination of um of formulas and uh and actual numerical tables of those functions well when we were first building uh wolfram language and mathematica the thing that um was kind of this was one of the books that we used as sort of the benchmark reference for mathematical functions and um so one of the questions is do we have everything now are we there yet did we finish putting all the mathematical functions um from abraham lincoln stegen into the system and the answer is as of version 13 we are done now we have every uh every function that um uh is in the stage and book is now in wolfram language and that that's a plot that you could find on a page of uh abroads and staging i don't know quite why that plot range is is given explicitly there but um if i why is it coming up with this this notifier this should not be there this is a mistake in something um but anyway um but what we can see is that's the plot in the in the handbook and of course now we can go and uh do a larger range of that plot and see more i guess it gets more difficult to compute the further you go that gets to be a very big function um maybe we could just do a um a log plot just for fun just see what it does um oh that's exciting um oh yeah it went negative there um and so i guess we could do just just for fun i'm i'm um let's just do um a plot of the log of these things and let's do a um uh let's do a just for fun let's do a re-implode of that just to show the real imaginary parts re-m was re-implod was a feature of um oh it's taking it oh there we go that's kind of cool okay so there are the imaginary parts of which are in this case rather trivial but that's that's kind of a fun thing to see all right so mathematical functions we've tied a little bow there that's uh that's exciting to see um now uh um let's see um boy there are any questions on our live stream uh questions about uh optimizations for max with the m1 chimps chip set uh there are some things there's more things being worked on there it's a very new technology um the first step is to get everything to actually work correctly which we believe it does and the next step is to start optimizing things so question from peter do brackets auto-complete at all levels um the answer is yes but it is complicated what the heuristics are for when brackets will auto-complete because there are cases where you don't want them to automatically complete and that has to be handled um as a question i suspect from a um a uh oh boy people are asking for the font to be even bigger all right let's go even bigger here um and uh maybe we go should we go even bigger still i think if we go even bigger still there'll be very little that can be seen on the screen at one time um although maybe i should just make this window bigger and let's go ahead and set uh let's see we are 200 yeah okay this is good um jr is asking does our software support customizability or enhanceability it's a computational language it's a language for specifying anything computationally so the answer is very dramatically yes and actually also it's a system which for the very beginning a third of a century ago we kind of make the decision that the user can modify anything um and you could you can it gives you various protections against doing things but if you really want to you can make two plus two be five although it will try and persuade you not to do that i will say there's one new feature that's coming in this version which is uh in our so-called paclet system um the ability to customize the the lots and lots of different things is is coming okay let's uh let's launch further all right next new thing i want to talk about is about numbers how could there be something new to discuss with numbers um ah this this if i have to figure out how to get this not to come up okay um let's uh let's say we want to compute pi squared to 50 digits okay great we've got that that that this is an approximate real number that is represented to that amount of precision so when we do a computation on it let's say we say what is the um uh i don't know the the nearest integer to that will get an exact number but this is an approximate number represented to a certain precision with the idea that some true real number is this number to this number of digits plus fuzz um to to additional digits now one of the things that we did um in uh in version 12 was to add this concept of around so around uh just a minute um okay so around uh has this idea so you can type in a number like 4.5 um and you can say 4.5 with an error of 1.2 so that's 4.5 plus or minus 1 1.2 and if i work out what's the square of that number it will correctly keep track of the error in that number and here this was a slightly trickier case to format because the the arrow was in that uh very uh n digits okay so with approximate numbers um you've um uh um you've got something where we're keeping track of the precision um and we're trying to make sure that we give you as many digits as we think can be justified within a round number that's being thought about as kind of like an experimental measurement where there's a certain precision and we're saying it's roughly that number and there's kind of roughly some sort of calculus of errors distribution around that but sometimes you need to use approximate numbers to prove things and so a way that that comes up is let's say we want a function and we want to say that we we say that there's going to be an interval let's say we say something like this um and we say uh um here we go so this this will now represent a centered interval number so this thing on its own is a centered interval and that centered interval represents a number centered on on 9.87 with a an error interval of 10 to the minus 10. and the point is that now we support many functions which guarantee when you give it a centered interval the thing that's going to give us the result is also guaranteed that the result will lie within that interval so if you want to prove that something does or doesn't happen a particular way then you can use centered intervals to do that so it's sort of a way of um um of it's a way of kind of making a proof of something um that uh i'm afraid i'm going to um it's a way of making a proof of something um oh just a minute um i'm going to do something to get rid of this crazy notifier thing that we're seeing um hold on one second here i think i have to go let's see if i can do better with this um all right so here here we've got for example a plot of this function gamma of x minus sine x you can kind of see that this function is um is is between let's say three and four you can say well it looks like that function is positive but let's say we actually make a centered interval um of of we say with x is that centred interval what's the value of gamma x minus sine x and the answer is we now get a centered interval centered on 9.2 with error 8.76 so this proves that that is always greater than zero and we if we say is that greater than zero it will say yes true it's greater than zero so this is kind of a new kind of number a number that is has a provable interval associated with it that can be used in all kinds of numerical computations so that's another um uh it's kind of a remarkable that there's a um uh that there are these kind of new types of numbers that we're introducing just like when it comes to mathematical formulas we have things like exact formulas we have series we have asymptotic series etc okay other kinds of math uh we've also got um well we something that we introduced a couple of versions ago was some complex plots there's a nice function with some poles that got chopped off here we can now ask what are the poles of that function this is something new in version 13.0 is the function function poles which goes and finds the poles of that function and you can see it's given it in terms of algebraic numbers these are exact algebraic numbers that we've got here um and we can go ahead and uh if we wanted to just evaluate that numerically to 50 precision or something and we'll see the results okay uh other things that are just practical pieces that are very useful um one of them is the ability to do um uh deal with vector variables in differential equations this is just um uh we're saying that x of t is a is a vector of length two and now this is dealing with that as something which has a matrix in it and that's a that's a convenient thing another thing in the kind of differential equations area is the notion of so-called complete integrals so partial differential equations it's often just very difficult to solve them but sometimes there are particular solutions that you can get so-called complete integral solutions that don't have arbitrary functions in them they have arbitrary constants but not arbitrary functions um the um um the uh let's see by the way all these things they're all very efficient things that uh the way that around works is now very efficient all these things are kind of down at the um we've been progressively improving the uh uh kind of optimizing with the latest um uh optimization for the latest hardware and so on all of the various um uh arithmetic operations and so on so i think we can say that that's very much uh a leading um thing that uh that we've been able to do all right so so now um this is a more specialized function maybe i shouldn't even talk about it um let's not go through this one here let's talk about partial differential equations just uh for um uh to go through more mathematical kinds of things so let's assume we define these variables here and now we're going to do a computation in which we well a big thing that we've added is the ability to specify pdes in a in a very kind of a symbolic modeling environment kind of way so let's take a look at this so we're going to specify the parameters um and we're going to because we have all sorts of knowledge within our system of of things in the real world we can just say the material of something we're going to be talking about a spoon here the material of our spoon is silver and that's something that our knowledge system knows about the properties of silver okay so what are we seeing here what we're seeing here is the specification of a collection of pdes that represent solid mechanics and so what what's new in version 13.0 is the um the ability to specify we've we've added a variety of things that go beyond the raw partial differential equation this is an example of kind of a raw partial differential equation we've added the ability to do things like uh heat transfer mass transport acoustics with sort of special functions that represent symbolically those kinds of problem domains so here we've also got solid mechanics and what you see here is a solid boundary load value and this is specifying features of the load with 100 newtons and so on force with some fixed condition where you're holding the spoon and now let's see if we can compute this so this is now under the hood it's doing a bunch of computational geometry it's building finite elements it's solving the finite element system and eventually it should compute for us uh the result for that and let's see whether we can it'll it's crunching and crunching and crunching okay now the result is represented in terms of these interpolating functions these are very useful things i mean i could pick one up if i wanted to it's just a function i know i could just pick up that function and i could apply it to let's say you know some values 0.6.7.8 or something and if that's within the range of the spoon it'll just give me a okay um uh it'll it'll just give me the the um uh that wasn't in the range of the spoon so it couldn't tell me the answer but it would usually just be able to compute the um uh the the value of that interpolating function now what i'm doing is i'm saying and it's kind of it's kind of remarkable one can do this i'm saying this is a new function vector displacement plot this is the displacement function given in terms of those interpolating functions and now i'm saying plot the displacement over a region that corresponds the shape of the spoon um the um so this is now now should be doing that so it's evaluating those interpolating functions that we got as the result of the solving the partial differential equation and then there's the result that shows the displacement of the spoon as we push it with 100 newtons of force given that the spoon is made of silver here so uh this is this is powerful stuff and for example we could we could say um we could we could actually compute the strain and the spoon because we've got the the displacement represented as computable interpolating functions we can compute the strain here and so for example one thing we could do is we could find for example once it's computed this this is this is usually um okay so now we could say uh find the maximum of the of the strain in that direction the maximum over the domain corresponding to the spoon and it's kind of it's kind of remarkable it's been like a 15-year or more project to build all the pieces we need to be able to do the geometry and underlying solving of all these differential equations and having them fit in the system to in this case work with optimization and so on so that we can do things like this um so for instance we could also say uh what let's let's pick a random point in the spoon so this will give us so that's three random points um in our spoon and now we could do something like for example we could say huh i wonder why it's set up this way this isn't quite right i should change this this is um i should have said uh uh well anyway apply that to um uh we'll work it's just a little bit more obscure than it needs to be um what this is going to do is it's going to randomly sample 10 000 points in the spoon and it's going to say what are the what is the 3-3 component of strain at those points in the spoon and this will now give us a histogram showing us that there's some kind of pinch point somewhere or something where there's a stress point or something actually strain point where there's lots more strain on the spoon than most other places so uh we have done a lot to kind of support um what we've done in solid mechanics this is just a a big monograph that came out along with um along with version 13 this is a monograph about validation of solid mechanics computations in our system you can see it's a long description of of uh how you validate um the uh uh the computations here and these are test objects with uh success things and so on we can keep going and lots of detail here for doing kind of um i would say sort of not to make too much of a pun on this topic area industrial strength um kind of uh solid mechanics analysis okay next topic um the so one thing we did one thing we've been doing in uh recent versions is adding the capability for dealing with video so one thing that's new in this version is that we have full support for being able to play a video um directly in a notebook here so this is some kind of test video and we could take that test video and we could say for example um uh um we could say here something like um i hope we can say here come on wake up um we could say something like video frame list of that video and let's say 10 frames from that and now it'll go ahead and extract 10 frames from that video but now we can treat this video thing as just a sort of first class object in our system that we do computations on here we just got images out of it okay so another thing that we've done is um we can take this video and i could make an animated gif just by writing wrapping animated image around it or actually probably just wrap animated image around these um and probably would make these into an animated gif that i could pick up and put somewhere else okay there we go um that's a an animated gif running around here um and um but we can we can just export that and put it on a web page or whatever else now in version 12.3 we added uh the ability to make a slideshow video for example um from uh from slides or to make a video where you're you're uh making changing a parameter in something and creating a video from that um in version 13 we've added a number of other ways to basically create videos from things so for example one is what we call a tour video so i could take that image for example and i could say i'm i think it's a huge image here um and i could say if this wakes up here come on um um oh this is a very big image this is what um because we wanted to show different pieces of the image so this is a giant image all right i'm not going to leave this image in this notebook because otherwise when i save it to the web you'll also have a giant image there okay so let's um uh okay so here now we have that image and we have um uh this we're making a tour video so what we're doing is we're saying show a tour of that image in which we show this position and then that position so now we can go and we can essentially we just created something that will pan around um in that image based on these two positions that we told it to operate with um and uh so that's so that's an ability to take take an image and create from it a um a video okay so let's now um okay we can also do the same thing with um uh with zooming let's see how that works um we can take that same image and um instead of i know what's happening here this has to do with the fix that i made for um uh that silly notifier i'm i'm using a different term source for these things and that's causing trouble here um okay so now this is the same kind of thing but now we're going to generate frames and now this will get not only panning around in the image but also zooming in the image i hope um let's see what that does oh it didn't paste a different thing oh that's not good whoops i pasted the same thing wrong wrong wrong one let me paste the thing i wanted here oh no um uh ah it's what happens when you deal with these very huge images okay let's try this one this is showing a position and width so that's those are two positions and those are two widths there and now we're going to show how those vary how how to make a tour that varies between between those things so let's see here so now we're zooming and then we're panning and this is a way that you can you can take any any image and kind of specify these this different uh programmatic action okay here's another thing so just for fun let's take this is a image from the history of physics of a conference from 1920s and we can go ahead and um let's try and find the faces of people in that image so we can do that using facial recognition and this should give us uh um well let's see what it found for the faces there um and it should give us those are the positions of faces in that image and now we can say make a tour of those faces okay so let's take the um take this and we're going to make a shortest tour of those faces and now let's take that original image and let's try and do a make a tour video that is based on visiting one face and then the next so there's old albert and we're now walking around as specified by in the tour stopping on each face and visiting each face in turn in kind of a a um uh a traveling physicist tour of um of that conference okay other kinds of um things we can do with videos there's another kind of new um uh new type of video new type of video generator um this is a uh this is a grid video and so here hopefully okay there it's downloading videos from from the cloud and now what should be happening is this is now creating from four videos it's now creating a video from a collection of videos okay so here we go so now we've got those four videos and now we can play them all on a grid there and this is all under programmatic control so i could specify uh any any configuration of these videos and so on um another thing that we can do is uh to make a um uh what we call a snippets video where you can take a video and then uh just show uh sort of the the the highlight reel the trailer of the video so here we're taking a video and we're creating snippets at particular locations in the video and so now when we've created that snippets video what should happen is that we'll see kind of a few moments of the video this is just summarizing a much longer video by just picking out regions of the video around um uh um around the those those points in the video um okay other thing other things we can do another new thing is overlay videos so we can take a video and we can create an overlay so for example let's say we let's just do this um let's uh have a video here i really don't think that should be called v um we'll say a video here and now we'll have a video that pastes another video in its corner so let's go and see what this did okay so now we have that video and that's that little video and now it's been overlaid on top of the video of the of the lemons and so on okay another uh piece so that was a little bit on video let's talk about images one thing we added in version uh 13 is the ability to do image stitching so here we've got a bunch of images that were taken around a scene from different angles and now what we're going to do is try and stitch those images together so this requires a bunch of different algorithmic kinds of ideas um but the result should be that we get a um a combined image it might take a little bit of time and work to do that but let's see what we get here see if we can get a um uh a combined image from this um let's try that again uh go ahead and so what it's doing is it's both lining up the edges of these images and doing some kinds of machine learning based sort of interpolation between edges of images and so on to try to deliver to us uh a stitched version of this image at least i hope that's what it's going to do um did that for me before hmm i don't know what that's doing uh okay um oh there we go finally came through okay so it successfully took these different images changed their projections changed their perspective and then stitched them together into a rather giant image here so that's a new feature in version 13. okay onward we go another thing that we added in uh version 12 was the notion of trees we now have well this is in in i think it was in 12 12 3 trees as a basic construct so we can say you know random tree 10 and that will give us a a random size 10 tree and this tree thing is a new sort of data structure which if we look at what is its input form it is a tree of tree of tree of tree of tree thing this is a very convenient way of representing trees um that can immediately sort of flow between expressions and trees and so on and graphs so we can say something like a tree graph of this and that will be a graph version of the same tree um that can be used in terms of graph theory a tree is not is has a lot more structure than a graph because for example one knows what the order of the of the branches coming out of particular noda okay so in version 13 we've added uh a bunch of new things with trees um here's one radial embedding of a tree um the generic tree would look um uh would look like that but we added the ability to radially embed the tree um also a bunch of capabilities for labeling and illustrating tree elements so here for example we added tree element label it's saying the one one one element of the tree should be blue and all the other ones should be red and that's the result you get there um another thing that is a big and complicated story is tree traversal order pre-traversal order turns out to be a thing that's actually a very fundamental issue that has to do with in the end one could think about it in terms of reference frames and physics and all sorts of other things but the question is you've got that tree if you scan that tree and echo which pieces you're you're visiting what order will you visit the tree so this is visiting the tree five six seven two eight so this is a depth first traversal of the tree okay so for example we could we could go ahead and write a function here that will explicitly number the elements show the elements of the tree numbered according to in which order they were visited so this is the standard depth first traversal of a tree but there are other traversal orders that we can use now and we have an option to the functions that that scan through trees like tree map this is tree traversal order breadth first and so that's then going first top element and then it's going in slices like this this is kind of like the um an approximation to some kind of rest frame or cosmological rest frame or something in physics that you're kind of looking at all the different elements of space time you're looking across space at a fixed time and then going down depth first order is something that doesn't get to happen in physics except in very weird situations near near black holes and so on where you're kind of exploring one part of space first and then going back at subsequent times and exploring other parts of space but from um from an algorithmic point of view we are providing a variety of uh tree traversal order uh concepts like leaves first top down so that's um and there are other kind of named tree traversal orders um and this is this is part of a much bigger story of a thing that i call multi-computation which is a set of ideas that have really arisen from our physics project but they're turning out to be very powerful and general ideas that relate to distributed computing and a bunch of kinds of modeling okay talking about graphs another new thing we've added is uh graph coloring so this is um find let's say you want to color the graph with no adjacent vertices are the same color um what colors can you assign to the vertices there's the result so we can go ahead and um and say highlight the graph with those colors and so here we here we get that graph highlighted in such a way that there is a coloring of the graph where no adjacent elements are the same color and that's something that's important for a bunch of algorithmic problems uh whether it's register allocation and compilers or other kinds of things this notion of graph coloring is more general than than just actually putting colors on a graph here's an example where okay we're going to make a relation graph of the bordering relation for states in the us so this every node here is going to be a state in the u.s and it's going to be joined by a um uh by at least in the continental u.s and i don't know the people who know us geography better than i can probably say what that um oh i'm just curious now i gotta i gotta go figure this out graph um vertex labels to automatic i wanna know who's that who's that outlier state at the end there let's see who is that i should know this oh maine maine is the i guess maine is the only state that has only one neighboring state new hampshire here okay let's go back and say we want to take that graph and now we want to um uh find um uh let's see we want to do an actual coloring of states in the us based on this so we need to take the graph that we got here and find its coloring um find vertex coloring of that and now we want to show that as a geo region value plot where each region of the us is colored according to the graph coloring from the adjacency of the of the um of the states so this is now a four coloring of the of the us um showing that in many parts of the us three colors are actually enough but you need four in a few places here okay let's look at another um okay another application of graph coloring is for things like tournaments let's say you have a complete graph there it is and let's say we um we can work out what the we can think of this as a tournament where people are playing uh uh tournaments against other people here and we can say there are all the tournaments that have to be played but now we can ask the question if we find an edge coloring of this graph that will tell us if we're scheduling tournaments that will tell us a way to schedule these things so that two people playing in the same tournament aren't playing in different tournaments that two people are not playing in the in different tournaments at the same time this uh this graph coloring can answer that question as well and we can ask how many tournaments do you have to have and um the answer here will be seven i'm now curious whether i don't know is this is this obvious that the number n does it increase how does it increase with n let's see let's go from three up to uh 15 let's say let's see what that does oh that's interesting okay all right okay so i guess it's even odd numbers probably uh correspond to the um the number of um a number of elements one needs i have to say i'm i have a great urge to try one thing which is to try and i wonder if we can do this okay let's see we now have a thing called the taurus and if we say um uh let's see um let's see um what is it called i want to make a mesh out of this taurus um i think it's a mesh region um right of the taurus uh and then let's let me just um uh what i'm trying to get is the um is the graph uh let's see um i think i need to look at the documentation always a good thing to do mesh based geometric regions so i think what i need to do is to find um uh okay so i want to um discretize a region and then i want to find the um okay so let's say i say discretize region for my taurus okay so there i've got a taurus and now what i wanted to do i'm living very dangerously here because i i i am i wanted to um see whether i can do a a coloring of the graph that is on this taurus and see whether and so now what i want to do is i want to actually get the um uh the mesh out of here so what i want to do is to find the um ah gosh what is it called i want to actually find the um the mesh graph our mesh components here we go um i want to find um the graph that corresponds to this particular thing so i think i want to find um mesh let's see do i want this or do i want some ah oh where do i where do i want here i'm trying to work out maybe somebody can help me here um i'm trying to get the um uh the graph of let me just see whether we can actually just search for this and see it um oh that's what i want the mesh connectivity graph that's what i need mesh connectivity graph let's see whether this is possible so what this should be doing let's see if this works is for that tourist there we go there we go this is a pure graph and that graph we can count the number of vertices um and if we wanted to we could probably just to prove it really as a graph we could say something like um uh well let's just try saying lay out the graph in um let's say spring electrical embedding um and let's see whether that graph now now it will give a different layout probably from that oh actually ended up looking more or less the same um well if we did um let's say radial embedding i guarantee it will look very different um it doesn't because oh because we should have told it we it has its coordinates burnt in i should have i should have told it um okay i just just to prove that this isn't a um this isn't a fake let's let's go and use the spring electrical embedding here um again and let's see whether we can so now i'm there we go so now there's a there's our fake torus that was made just from the graph elements just from uh from figuring out what the shape should be just from the connectivity of the graph but now what i can do is i can say for this thing here for that graph well either one of these graphs doesn't really matter which one i could pick that graph and i could say uh i could ask it to give us the um um and i have the um the edge chromatic number of that graph um and that will tell us okay nine if we say what's the vertex chromatic number i think that would tell us the um uh was the graph two before um this should yeah there we go that's that's telling us essentially the number of colors that we would have to use on this taurus and it's different from the number that we would have to use our sphere and so on so just a little bit of fun with with them with those capabilities okay another thing about graphs that we've done is um to uh do things with planar graphs so we can have a planar graph um here's a planar graph um and now we could for example we can label the vertices on this planar graph so let's go ahead and do that um and there they're now labeled and now we can say give me a planar faceless lift planar face list of that graph so that's going to tell us now not thinking about this as a just free floating graph but it's something embedded in the plane it's going to tell us what are the actual faces in terms of the numbers of the in terms of the names of the of the nodes here and we can also do things like we could compute the dual to the planar graph where we take every face and turn it into a the center of the face and we uh every every um every face becomes a point every edge becomes a face and there's there's the result okay another thing that is new in graph theory is some subgraph isomorphism um being able to see in that graph where are all the subgraphs that correspond to just a square and we'll see those graphs being extracted and that might be something you would say who would ever care about that but um in our physics project the whole evolution of the universe works by updating hypergraphs and by doing essentially graph isomorphism or hypograph isomorphism to find where are the possible updates that can be made on those graphs and so similarly here if i wanted to um we could go ahead actually i'm now very curious if we make okay let's make a plane a graph let's make a random plane a graph let's say we make a voronoi mesh of a rectangle that should make us i think a um what did i do wrong there let me see um oh that's a points silly me telling me silly me so let's just make a um uh let's go ahead and make a i just relearned here the mesh connectivity graph of the mesh region of a rectangle okay so let's say mesh connectivity graph of mesh region of that rectangle and so the um ah silly silly okay let's save a disk because that will be i think filled in um what is this doing so i want to do something where i'm getting here let me um uh let's see discretized region of that and that will give me that and then i say mesh connectivity graph of that okay so now i'm going to get the mesh connectivity graph of that and that will give me my um a collection of things oh they're all triangles no fun i was i was thinking i would get something that wouldn't be all triangles and so then i would be able to say find subgraph isomorphism on a well actually i could do that now that i think about it i could find where is there a little um let's let's figure out whether i can get a is there let's say a grid graph a let's say a two by two grid graph that would be a square let's say a three by a two by three grid graph is there something like that that is embedded in this graph here so i can say find subgraph isomorphism and i could say that that's on line 43. so actually i could just say find subgraph isomorphism i could take that thing and put it in there and now i could say um well let's just try finding a square like that um let's find one of those okay so there i found the first square in there but let's just see if i make a grid graph let us just make a grid graph a three by three grid graph and oops three by three grid graph and let's see whether that graph as a sub graph is available in that big graph let's see where there's one of those ah there isn't one of those so maybe if i take a smaller grid like this we will be able to find one of those maybe not maybe it's not possible maybe maybe if it's um maybe by having triangular um maybe by uh having triangular pieces oh no there we go there is one okay so that's the sub graph from that big graph that has the has the form of those two squares and i could go ahead and i could probably say show me and how many there are but show me let's say let's just get 10 of these things here um and this is going to now find oh there weren't 10 of those so let's say i bet but it'll work if i say up to 10 here um uh oh that should work um well it refused to do that so i i bet guess that if i say here let's say three um ah there weren't that many either so there's only one of these um and uh maybe maybe it has to do with the exterior of the thing um at least i think that's what this is yes here we go uh okay anyway that was that was um an example of using subgraph isomorphism here's an example let's let's get a piece of chemical data let's say we have caffeine and um we uh there we go there's our structure graph for caffeine and now for example this was a good example actually now we can find within that caffeine molecule we can find a six-membered ring a cycle graph with six elements and there is our six-membered ring in that and uh just to prove that um that it works for um let's just do this caffeine molecule and see if we can get that five-membered ring there it is okay another another new thing in graph theory is something relevant for analysis of of the graphs of programs so this is a very simple program this is something studied in our physics project a multi-way system that notice that i'm using a resource function from the uh function repository here but i'm mostly doing that to just get this graph okay the notion is what's called a dominator tree graph and a dominator tree graph is telling one what are the elements that are kind of below that thing if this was a flowchart what are the things that live below that element that are affected by that element so here for example uh a affects this thing here which affects this thing here if you get to bbb it affects all these things here so this is kind of a graph of the sort of trickle-down effect of one thing on another and that's relevant if you're studying kind of um processes um both human and um uh and things and programs okay turning to a different area one thing that we added in version um uh uh well we've added in version 12.3 with spatial statistics we've continued to fill that out this is a spatial point data would be an example of of uh it's a bunch of points that could be on the surface of us of the earth or it could be somewhere else in space and now we can do things with that as uh spatial data so for example we might make a spatial estimate that will give us a spatial estimator function and at every point here this spatial estimator function if we say at value 1 1 or something it will now give us an estimate of the value of the function that is implicitly specified by these particular things so imagine you're trying to find out i don't know how much oil there is under a particular place on the earth and you bore a bunch of holes and you find out the answer for each of those holes and you assume that there's some continuity to the amount of oil in different places then what this is doing is it's giving you you're taking spatial point data and this is now giving you a spatial estimator that can estimate were you to bore a hole at some other place what would be kind of this spatially interpolated value that you would expect at that place and so we could take that estimator there that we got and we could like plot that estimator and now we're showing us for this given the values that we have concluded here um what would the um uh what would the estimates be actually what we should have done here is to color this according to the colors that are used there and we would be able to see the points in those blue areas and so on okay so there's a lot of detailed stuff about how we deal with spatial data there are different kinds of models you can assume we put in all the kind of standard models that people use for spatial data and you're able to take those models and use them to compute to do different kinds of computations and that's very strange um okay moving along well we're about um uh i think i should speed up a little bit and conveniently our next subject is time um so one of the things that we've done in version 13 is to be more precise in our handling of time and in particular it's like when you have a point on the earth that um uh you might have a um a particular point let's say the um uh the position of the eiffel tower and if we say what's the geo position of that oops we'll get a particular position but that position will actually have uh various those are long coordinates but to know what that position is in xyz space you need this datum that specifies how that maps onto the actual uh shape of the earth and so on the same kind of thing happens for time systems and what we are what we're doing now is to introduce this concept of a time system which gives us kind of this way of um of indicating how we're specifying time um this is all a bit complicated but it all has to do with the difference between time as specified by the rotation of the earth by when the uh when let's say a particular point in the sky is above you as the earth rotates and what time you would get with an atomic clock that is just measuring time independent of the rotation speed of the earth and so there's uh this is these are the times associated with the atomic clock and the rotation of the earth and if we take those two times and subtract them um we will find out that there's a 37 second difference between the time deduced from the rotation of the earth and the time deduced from an atomic clock and this is a a whole subtle issue and if we wanted to we could actually look at the um the difference between the times um from uh associated with the atomic clock and um um on the rotation of the earth this shows this shows variations of the rotation speed of the earth over the course of time in the last 10 years or so um the uh um there's just a lot of subtlety here when you specify a date range you can specify a range of dates in um this is now in the atomic time system this is showing the very beginning of the year just a few seconds after the beginning of the year and what we're about to see is um that uh uh there's a leap second that was added to represent the uh the appearance of um uh so so this no these are the times for the atomic times versus the times the rotation of the earth and we can see that they're a little bit off um and so the year began at a different time um uh and um um a bunch of subtleties here in any case the main point is that we've now got time uh really nailed down and we can really accurately represent precise times that's important for particularly things like astronomy and space purposes and so on so that's that's another thing added in in version 13.0 okay another area is in geographics so here um what we've done is we've we've had geographic images for for a long time what we've now done is to make them so that by default the uh the labeling is done in vector fonts so so that by default it's um it's possible to get kind of crisp labeling on everything uh the default thing so far is to have the background be done as a bitmap so you know the edge of the of the wood of the forest here is done that way but you can request by using a different geo background you can request that everything be done with absolutely crisp vector rendering of the of the graph of the of the um of the map and that's something over the next few versions we expect we will be progressively optimizing this so that we're we're just using our own kind of graphics primitives to render everything at that point you'll be able to see every detail um in an arbitrary resolution so that's another another thing that's coming by the way one advantage of being able to do uh things like um separate vector um labeling is that you can do labeling on any projection of the earth so that's not been possible before um and the labeling all just works um you can also mix background layers you can say this is a a case where we have taken it's going to be a map of italy where we are taking a street map we're taking a relief map with a certain opacity and we're putting vector labels on top of that and so now we've got the three things you can see the terrain you can see the streets and you can see the vector labels all combined together so this allows one to make very beautiful looking maps okay next area we're going to talk about geometry and we're going to talk about um some things there so imagine that we have a bunch of points that were randomly selected around a circle question is can we find the circle that those points represent which was in this case the circle center at the origin new function region fit that finds fits of different shaped things to two collections of points so for example here's a collection of points in 3d that correspond roughly to a cylinder and we could go ahead and say make an actual fit fit a cylinder to those points and then superimpose these things and then we get the result and so now we have fit that cylinder to that collection of points and um okay another another thing related to this is what we call concave hull mesh so for example here we've got a bunch of points and as you can see they arguably look a little bit like a rabbit if you take that and you make a convex hull you're basically shrink wrapping the rabbit and you barely see its ears that's a convex hull there is a new technique that we have which is a concave howl where we are looking not where we're trying to wrap the thing more closely and there we have the concave hull of that set of points um another type of way to do that it's not a unique thing to find what when you're when you're trying to uh sort of wrap a surface around these points it's not unique we have another method gradient fitted mesh which is another method where some of the ears got um got separated here but that's a different kind of mesh with different characteristics again fitting points to a mesh okay another new area for geometry for us is computational solid geometry csg and constructive solid geometry rather um this is now taking constructive solid geometry and taking the intersection of a ball and a cuboid and we can go ahead and ask let's say something like what's the volume of that and now it's going to do a bunch of integrals and maybe it'll give us the results here um tell us the okay so it tells us the answer for that is pi over 6. and it did that by just working out the integrals that correspond to those precise regions well now we can use the csg method methodology to make much more complicated regions here's a more complicated region and again we can say what's the volume of that region um and uh should still be able to do all the integrals that are needed and might be they might be rather difficult integrals um and just imagine trying to write down by hand all of the different conditions for all these different integrals and changing variables and all those horrifying things i i it's been a many decades since i uh last did that by hand but um uh it's still you'd have to before this technology you would still have to go and try and uh set up all these coordinates and things and do the computation i think it's going to finish in the end here so let's let it keep running for a while and see if it can actually compute uh analytically that the um the volume of that uh that strange-shaped object let's see is it going to do it is it going to do it i think we just let let's let it keep running for a little while i think it's going to succeed um and uh although as i said it's quite difficult it's very difficult for humans and it's already it's even difficult for the machine um i think it's going to succeed but um while it's thinking about that let's talk about some other kinds of things we have this notion of a a csg tree so for example one of these objects we can think of it as formed from a unions and intersections this is an actual tree we could if we wanted to we could look at the input form we can't look at the input form yet um when this thing is computed we can look at the input form um and up there we go we finally got it okay let's see what that is numerically um 1.93 okay it would have been easy to compute the numerical results what's hard is to get an analytical result for a shape like that so this is a tree one of our tree objects but it's a tree that has um uh a collection of of um of these geometrical forms in it and now we can actually say evaluate that csg tree like put all the pieces together with with uh and what we get is that part and that's like what you would have in a computer design system you can do all kinds of useful things with it okay another thing in version 13 congruent regions we can ask the question are two regions let's say we rotate this rectangle is it the same as that polygon yes it is okay and we can find uh transformations try find transformation functions between let's say that rectangle and that polygon so now we're finding a region transform and so that's going to find us what we could see in this particular case is just a rotation matrix that transforms one object to another object okay let's change topics completely let's talk about uh chemistry in the last few years we've been adding a lot of sophisticated chemistry to orphan language so uh something we've done in this version a variety of sort of cleanup pieces of chemistry as we as we start working on some major new chemistry areas this is the ability to label a diagram of chirality we could label all sorts of labeling of of molecular diagrams so this is a 3d molecule plot with atom labels on c and n showing their oxidation states um okay a new construct for us in chemistry is the notion of a chemical formula so we've had the notion of a a chemical diagram but this is a chemical formula where we're not really saying where are the um um uh these are just 12 carbons 16 hydrogens etc it's just a formula we could ask for example what's the molecular mass associated with that formula it'll give us the result more interestingly we could say show us find us for this for this thing let's say find isomers um and that will try and find us actual specific chemical species that have that chemical formula um and so now it'll go and try and find in a variety of sources you can tell it which sources you want to look at there we go so these are actual molecules that have that chemical formula so let's pick a random such molecule let's pick one of the ones at the end here and let's say something like molecule plot 3d of that and hopefully this particular molecule there it is um is that's that particular molecule with that with that chemical formula okay another thing we can now do is to take uh molecules and make a feature space plot use machine learning we have a feature detector for molecules so that was on line 97 and we could say something like make a feature space plot uh of the of the molecules on line 97 so now it's going to give us um a uh it's going to try and take each of those molecules turn them into something that a neural net can understand and then uh show us where in feature space those different molecules lie and there's the result so we see there are a few molecules over here and then most of them those are the particular molecules most of them are arranged over in this section here there's a good way to to understand something about about molecules okay another big new structure which is coming is a structure called chemical reaction and you'll see this built out over the next um few versions um you'll see this built out in all sorts of different purposes but here for example but we can say show us the reaction rule this is showing how much of each um substance was involved in this nominal reaction here we could say reaction balance um i think we could just say reaction balance of this um and oh why can't we do that oh because we have to tell it's a chemical reaction i see that we just gave it the rule there so i can just say chemical reaction of uh this thing on line 101 and there we got the balanced chemical reaction with 19 oxygens and things like that if i wanted to i could go ahead and ask for the reaction rule again and then go on computing things from there so you can do very elaborate uh chemical reactions you could here's here's one that has some um where you basically are solving the phantom equations equations with integers and this one has a one three nine nine in it which is sort of a more exotic kind of chemical balancing but so this is the beginning of a lot of work that we're going to be doing on chemical reactions and chemical synthesis and so on in the system okay another thing we've added in the last few versions is biosequences so this is a typical dna sequence and we now have biosequence plot which is sort of a standardized way of plotting uh genetic sequences um and we can do this is now a a plot that shows a an rna molecule in which we have added certain bonds certain secondary bonds here between um between these things and this biosequence plot will now show us what that looks like and there's a there's a standard notation in for example the rna world for specifying how things are sort of arranged the dot bracket notation we support that and you can make images from that we also support all kinds of elaborate things like hybrid strands with different uh different kinds of um this seems to be a hybrid dna rna strand here um right no that cannot be um well that's a uh not sure what that is that that that is probably assumed to be rna not sure um anyway we can we support that uh oh okay here we here we've got an actual molecule plot where we take that biosequence that we have there and we actually figure out at the atomic level what are the actual atoms that would be in this and if i knew my biochemistry better i would know what all those different pieces were and what was the correct story here uh so let's see this is showing us cross-linking structure between two peptides two amino acid chains um and there's the result uh and this is this is again making use of our biosequence bonds and biosequences and so on okay lots of kinds of data in the world another type of data that we have uh now in version 13 is flight data unfortunately only for the us so far we hope to get it for other places in due course so that's showing us that there were two flights from logan airport in boston to san diego yesterday those are the two flights and if we say what are the properties of that particular one of those particular flights we can say what what can i ask about that flight and there are probably all kinds of things i can ask about that flight so for example i could ask something like um uh let's make a date list plot of the um uh let's take this flight and let's uh look at the um altitude so the altitude actually if i just compute the altitude here of that flight that will be a flight and and this is um uh this is real-time data that we're getting um but this particular flight will be a historical flight here um and so we should have oops uh oh i should have used this um you know there's an argument well anyway um okay there we go so there are 411 data points there and i could show the date list plot of those data points and there i see the plane was was gradually uh going up to higher altitudes as it um as it uh probably burnt our fuel actually we could probably just say plot range arrow all and it will probably show us the whole uh flight going from from ground level to ground level um same flight let's say um uh that we take this looks like it's the same flight okay um we could take that and we could show the flight path of that flight in um uh okay it's got to download a bunch of information here there's that the path of that flight um or for example we could do the following kind of thing we could ask where in the us were did flights depart from boston going to so now it'll it'll download all that data and show us the geoplot of the results of that um or let's do something very ambitious let's try see how long this takes it might take a little while to download all the data and compute everything here um should be should be able to do it see one gets very spoiled because after it becomes easy enough to have to specify to the computer what to do then it's um you know it could have taken a long time to specify this and then then the time it takes to to get the result would have seemed like nothing um but uh uh well let me show you an example here precomputed example of um something else we could do where we could take um the um uh all the flights uh from um logan airport yesterday in boston and we can show what were the paths of all those flights near the airport and so what we're seeing here is a bunch of planes on in various traffic patterns around the airport um showing um uh probably we could probably deduce what the wind was like that day based on uh what the traffic pattern around the airport was like um okay moving along um i think i'm going to kill this off because i think we're not um i think it's taking taking a bit of a while to to look up all of those different flights and so on um okay another very requested if i were to pick the most requested um some of the most requested kind of uh features of all time multi-access plots is one of the most requested features of recent times and so you've got two functions here and you want to plot them and they're on different scales and so here what we're seeing is the blue scale the blue plot is relative to the the the left-hand blue scale and um uh then the the orange plot here is relative to the little orange tinted scale over on the right now that's all well and good but what happens if you have a whole bunch of different axes and scales and so on how does this work that's what that's why it took us so long to implement this is that we wanted to get all those uh kind of general cases right so this is a more much more elaborate case where we've got um five different uh uh plots here and they're all on different scales and we're indicating here the scale for each of those plots and if i wanted to i can specify in great detail i can say i want to put some uh some axes on the left and some on the right and all that kind of thing so here i've got this axis here is the is a combined um red and green axis that's purple and so on and then there's other axes here on the left so this is this is sort of the general case of the multi-axis story another thing that's that's um uh kind of being steadily built out is the idea of plot layout this is going to make four plots and it's going to lay them out in a grid but it's going to optimize that grid so that it doesn't repeat the uh the the tick labels um it only it only shows them once going above and across okay another thing is uh uh okay here's another feature um is the fact that dates can now be coordinates in all kinds of plots so this might be a time series which um that's a time series of the uses of the word plot and we can now just say list line plot i have to remember that one can do this this is it's been so long i've been conditioned to use date list plot but now you can just use list line plot and it knows that those things at the bottom are dates so uh let's and that means also that among the scaling functions that you can specify for plot is a date scaling function so so what this is now doing this is taking um values from a data bin just uh and it's asking the question when and it's making both both the overall date and the time of day here and so it's plotting kind of a diurnal plot of those times of day for that term for the things in that data bin okay here's another weird uh well i say weird this is another unexpected thing that we managed to make work which is plotting with infinite range so what that's doing is it's gradually scrunching up the plot to allow it to get to infinity so to speak and so for example we could say make a make a list of the first thousand primes and plot that in such a way that we've scrunched up both axes to get all the way to infinity so that gives us some indication of how the the sequence of primes is growing assuming nothing too surprising happens towards infinity and we can see if we're making a um a plot of um let's say these three functions it's useful to see that infinite range because we can kind of see that one function always lies uh between these other two functions okay more in visualization uh i showed you earlier uh vector displacement plots in 3d this is a two-dimensional vector displacements plot where you're showing as a function of position in this annulus how the uh how that annulus is deformed same kind of story in 3d this is showing how a sphere uh if if you are specifying the coordinates of pieces of a sphere this shows how that is being deformed under that transformation uh we have a vector version of that we also have a version of uh geo we we introduced geograph plot in the previous version this is geograph value plot where you can show kind of the uh the amount of flow between cities uh for example here um okay let me uh let me talk about another thing in in 3d graphics we have had the idea of lighting 3d graphics from sort of the beginning of from version one 33 years ago we had this idea of of simulated lighting but now so that's with our def default simulated lighting but now we have the idea of making a symbolic specification of lighting where we can go ahead and say take this and make its light lighting we've always been able to specify lights in kind of basic lighting but this is now specifying light symbolically so there's an ambient light the directional light there are the directions and now we've got this kind of green tinge thing that has been lit with these symbolically specified lights and one of the things we can now do is to include lights as something that is local to a scene so we can include them as part of a style so there is different lighting for for the sphere and the cube in that scene and so if we do a more extreme version of that um using that taurus primitive that i showed you an example of earlier this is showing us okay this is showing us for each one of those of those uh um uh tauruses each one of those rings um we get a different appearance based on a different um uh uh different directional light that's been used to light each taurus okay let me show you uh another thing we're going to talk about machine learning now one of the things that we've done in machine learning we've had for a long time these functions like classify and predict that try and learn from examples what some something is but the thing that you're learning from example about what it is is a whole thing like it's a picture of a cat a nothing but a cat or a dog and nothing but a dog what we're doing in version 13 is to add the idea of a content detector function which allows you to uh make find sub-pieces of uh of something so for example um we uh let's say we do something like here i ate cranberries while watching uh tennis okay so this is picking out that was just picking out one one thing here that picked out tennis as a sport now it's a little bit non-trivial that it could pick out tennis as a sport because the training example i gave it only talked about soccer but what it's doing is it's using the large corpus of existing built-in knowledge and existing trained neural networks to be able to generalize from the particular example that i gave here so now another example that i can give this is a um a case of uh training a vis visual um uh content detector um this is a considerably more difficult thing to train and this training takes about five minutes to do on a gpu system but um if i just take that detector and um uh let's see if i can just pick up that detector i'm not sure i will be able to uh if i can uh that's a bad sign that says data not a notebook well were i to be able to pick up that detector i could do something like this and um find from that image where in the image these subparts that i record taught it here occur or i can be more elaborate and i can have a there are different things that the content detector can pick out so it can pick out for example legends and bounding boxes and can indicate what i've seen there okay also in machine learning um we have uh a variety of of new um ways to indicate sort of how machine learning what was important to the machine learning system when it came to a particular conclusion kind of the explainability of machine learning we have a variety of things along those lines all right i'm not sure let's see we have another example here that maybe i'll just uh give you a very quick walk through this one because it's kind of complicated um let me try and find my way to it uh let's see we've had for uh for a while now uh a feature of awesome language is uh the ability to deal with control systems this is now part of the general story of control systems this is for tracking uh being able to make a control system that tracks something you specified so for instance here's a robot there's your toy robot and the goal is to make the robot track a particular path and here we have a model for the robot represented in our systems modeling language um and that model we're now going to take that model which is a sort of physical model for the robot and what we want to do is to ch is to make the parameters of that model be such that when we feed in a particular input here the the uh the drawing pen of the robot will follow a particular curve so we can specify the curve there's a curve we want to specify what we're going to do is to try and build a controller and this is a whole elaborate story of control theory and poll placements and things that is trying to build a control system that we can put in the robot that will make it draw the picture we specify so now we can say let's go ahead and we've we've built this optimal controller we now try to simulate the the device and what we can see is it didn't quite manage to draw the the picture we told it to draw it had a little bit of a glitch but otherwise it was successful and so this is something that's important in uh this is important for robotics and important for uh well other kinds of systems where you want to specify a particular thing to happen and this is trying to say given the actual mechanics of the inertia of the system and the way that it has the force that can be exerted here and there can you achieve that trajectory and what is the best way to achieve that trajectory so we now have the capability of um of dealing with things like that okay so let me move on here um talking about i talked a little bit about the bracket matching uh kinds of things and um uh yeah i wanted i want to mention that one of the features let's let's pick a function here where i can kind of bracket through it okay so here for example let me let me go ahead in this thing and let me add something here let's say um i don't know let's say one arrow list oops one arrow list okay notice it put in the double brackets f of x y et cetera et cetera et cetera now i can always use control space uh sorry um yeah control space to exit that region so i i keep going if you can see my cursor i just went on i went on i went on and now i'll jump to there so control space is a way to move around just like i can multi-click here i can also use control space to progressively move more and more levels of bracketing out and you'll see it turns green there because it's showing me what brackets i am currently in and when i actually press um control space again it will you'll see a little black thing flash up that guides one's eye to the place where the actual next uh next sort of bracket position is okay another thing we've added is uh we are it's a big project to put progress indicators into as many of our functions as possible so for instance here we've got oh gosh this is going to do something horrifying um this is something which is now what's showing us progress here of launching a bunch of parallel machines i have a bunch of machines that will need to get launched here but then once those are launched it will show us uh kind of the the progress of our parallel computation as we as we go ahead and do it and you perhaps saw some of those when i was processing videos earlier and so on and you'll see different kinds of progress monitors some of them very custom progress monitors that show you different details about how some operation is working and there are a variety of ways there's a new a global thing uh dollar progress reporting that was so quick it was so quick i i we could barely see the progress monitor there let me let me just for the heck of it let me just um make this um i don't know make that 50 or something maybe oh no it was too fast for our progress monitor well anyway um things like progress reporting is a global uh thing that allows you to switch on and off progress reporting um that uh that's that's that okay um another topic let's talk about wolfman alpha notebooks uh you may know that there's a new product that we have for wolfmaffer notebook edition which is intended as kind of an interpolation between wolfman alpha and wolfram language and the idea is that you enter natural language but your computations can be done built up in a notebook now you also within a world from one or mathematica you can also get a wolfram alpha node note mode notebook and here it is and in this notebook i can go ahead and say things like what is the integral of sine cubed x and i can use natural language to enter it but then i get the wolfram language echoed back here and i also get the uh the result that i can then go and do computations on um and uh here should um open up that bar i can say um let's do the integral again let's try the integral again of that and i get the result and so this is our kind of natural language interface version of uh access to orphan language some things that have been added uh this is something which actually you've probably seen involved from alpha um this is uh a um just a palette for letting one enter common operations common mathematical operations um you can also that this is a palette used for entering those things into a natural language system um is also uh things where you can directly get from from the system you can say um i don't know plot sign a x varying a let's say let's see we can do that so that will now generate for us a manipulate that um uh was just created oh it actually didn't it figured out decided that was a times x so i might actually have to put parens in there um and uh um now i just hit enter and then it'll get us this and now we can then bury that and this was created from natural language but there is the um uh the wolfram language code which we could then use and um copy and paste somewhere else and use oh that was a paste today and i should have told it to use the there we go there's the wolf there and um we can tell it to paste the wall from language code and use it elsewhere okay another thing we have in wolf and alfa notebook edition is direct access to our demonstrations project and to various kinds of new starting points for for learning this we also have a um uh well a new thing here primarily intended for the wolf and alvin opec edition itself um this is a a interactive quiz um let's see quadratic description plot quiz i don't even know what this is all right so this is a thing where plot the polynomial with y intercept i have no idea how to do that well okay this is a neat thing this is included in wolf and alpha notebook edition um and probably i could learn to sketch curves this way too talking of quizzes a big new thing in inversion uh in version 13.0 is the ability to make quizzes conveniently okay so this is all a bit it's a bit of a long story because um let me show you an example this is a deployed quiz so this is a cloud notebook and this is a quiz where i can type answers in here let's go ahead and make this little bigger i can type an answer in here and it will say if i say submit it will uh submit that answer i'm surprised this is i see i have to probably submit all of these at the same time that's probably been set up that way um oh no no no i didn't i put a check you put a check mark there so if i say here 2010 submit it it'll say no um and then i could resubmit it perhaps here if it's been specified that way and it'll hopefully say yes um and so this is a quiz that was created in wolverine language and deployed to the cloud so how was that created well turns out it was authored in a an authoring notebook and let's pull up that authoring notebook here um here's the authoring notebook so this is you get to this authoring notebook by saying new programmatic notebook and this is where is this coming from this is [Music] is this from form author notebook no that's four more things notebook is something more general um i guess you can say create new notebook of a quiz notebook but i'm surprised you can't get it from that menu um okay but any case this is something that is a form notebook uh that okay maybe i should start a formula book here new programmatic notebook form notebook ah it's a q a form notebook okay i don't know how to get those from the menu i'm surprised they're not in the menu um they should be probably maybe they will be in the future all right so the idea is this is a symbolically specified thing a question object in which i don't know why this is done with a string that seems like the wrong thing to do one could do that with a perfectly well with an integer but any case this was this is something which shows us the code we can make a preview here that shows us what that question will look like if it is previewed why is it done that way i have no idea it should be done with an interpreter um okay so here's another um thing where we look at a preview here match one input with one output so this is a date list and we're matching it with various other dates here and um the so this is this is one of a variety of different kinds of uh elements that you can put into a q a form notebook and then what you do is to say generate the q a form notebook so there's a way of specifying what you want the parameters of the generated notebook to be like like for example where you want to put the answers that people are submitting to it um the uh it's it's now actually generating it but when i tell it to generate it will produce a cloud notebook that is then a deployed version of this q a here um and uh we should um um actually i don't think these should be fixed um uh i think these are we can do better in terms of the questions we're we're asking here um okay so i i just um uh told it i actually told it to generate it twice which was a mistake but um anyway this is this is now generating as it happens twice a version of this directly in the cloud that you can then interact with okay so this is part of of our support for uh kind of quiz-like things and things for education along those lines um all right let's change to a completely different topic uh oh that was the ah okay that was that was the a piece of an authoring notebook that we didn't look at now and uh right okay the main point here is that if you want to make a quiz this is an incredibly efficient way to do it you can also do it programmatically but you can do it using that gui and it has sort of all the power of the ability to for example have people enter pieces of code and be able to um um [Music] uh be able to to um uh compare those pieces of code we did that for my elementary introduction to wolfram language the ability for people to enter code this is taking that technology and making it available to everyone okay let's um uh let's see i can probably show this so this is now a completely different area we're talking about imports of things so this is now um importing an mbox and so this is showing us the thread graph of a mailbox so it's showing us mail messages that were threaded how the mail messages were threaded together something i'd never seen before but it's an interesting um interesting thing to be able to see okay let's take another example here this is another new capability in version 13 um is uh um we had added the ability to import pdfs as sort of faithfully as um page images but now in version 13 this is now a pure vector image pure vector data so for example uh i'm sorry that that's that's it being imported as some um uh the um um as uh as page images here but now what we can do is to say the same thing for let's say we want um page graphics one of those pages not as a as a bitmap image but instead as graphics uh and here it is as graphics and i can kind of prove its graphics but if i wanted to go in and click click click click i could actually edit this and go and and change there we go there's i'm now making the ink smear in this graphic and and even even these individual font characters are all just just vector graphics that i could uh smear if i wanted to um this is uh um so this is really gives us the ability to um uh take pdfs and treat them as data that we can manipulate okay another completely different topic cloud expression so if you want to make something where you're dealing with a bunch of persistent data but you want to access you want to kind of pick and poke at this data you want to just make data that's um and you can do that by making a cloud expression cloud expressions are persistent they're stored in your cloud account and you can take a piece of that expression and it will just come directly from the cloud in here you don't have to import the whole expression if you wanted to you could say get ce and it will get the whole expression but if i wanted to i could say ce of five equals hello and then that will be modified in the cloud and ce of 5 will be pulled from the cloud to be hello um but none of the rest of that expression got modified it's all it's it's kind of like an expression database in the cloud and um this is uh it's a it's a an important thing that we we actually introduced cloud expression a few versions ago but what's happened in version 13 is it's really become a robust place to store data up to the tens of megabytes type range are conveniently stored in a cloud expression in a way where the individual parts of the data don't have to be imported into the um in order to get used okay another area um that um we has advanced a lot in the past since the past version is the function repository we now have in our function repository we now have um about 2300 functions and there are all kinds of interesting things there the function repository is a great place to find kind of specialized or sort of a head of the curve functionality that hasn't yet made it into the main system and might not for years to come but the function repository has versions of that and what's convenient here is i could go let's say i go to something here i know what some of these do let's say i go here to multi-way combinator i can just click this i copy it and i get something which is referring to that resource function now i can compute with it and that's how it works and for example in documents that i write now when they need sort of additional code we're really trying to package that code into the function repository um so that it can be it's readily accessible to people and so in general you can say here's a resource function venn diagram of this xor thing there it's just now using that code from the from the function repository lots of useful things in the function repository lots of things that are a bit specialized like for example let's see what happens if i do this if i say show me graphics for a sports field okay that's tennis let me try i don't know soccer or something here okay well it's cool but clearly something a bit specialized for our main system but something that's very useful if you uh if you need it um something well here here's another one that's kind of fun this is something which will um uh try and use image processing to render a plot using some kind of pseudo handwritten i think it might take a little while to do this actually but kind of to make a kind of pseudo-handwritten version of the plot um okay uh it's probably grinding trying to trying to imitate the actual handwriting of this uh of this plot and um it's taking a certain amount of uh effort doing that okay let's talk about the next next area while it's um thinking about that um let's talk about paclets packlets have been a mechanism for delivering functionality to our system not just functions like in the function repository but all kinds of things whole clusters of functions things in palettes things all sorts of different things that perhaps are binary programs in some external language whatever else all sorts of different things being able to be delivered in a packlet packaged together and we've used paclets for quite a number of years to deliver functionality between major version releases we've been able to field upgrade lots of functionality okay so uh we are introducing an increasing collection of paclet tools um and uh you can use okay i'm going to do this this is kind of a bad idea and i have to remember to clean this out i'm going to create on my desktop a packet and that will show up somewhere on a desktop in my desktop files and i can then uh see that this is kind of like creating a project oh where is it i don't usually go to my desktop well it's there we go my pack lid is on my desktop well fancy that ah let's see how i get to this um and what you'll see in my i don't know how to make this bigger i'm afraid i wonder if there's a magnify window um view maybe vue has it [Music] nope not a thing anybody thought about how to make the finder bigger but anyway you probably can't see this but it has a documentation folder a kernel folder and a paclet info.wl file and the idea here is that we can create a packet that has um we can specify components from the paclip once we've created it we can then just drop files into our layout and they will automatically become part of the packet um and uh then you can deliver that paclet uh and set it up so that it can be installed um and uh uh that and so it can make use of the whole pack lit mechanism another thing that has been introduced is the notion of paclet symbol so if you have a paclet that's been deployed and it has some symbol that's mentioned in it just like you can say resource function to kind of deep reach into the function repository to get a name function out of it so paclet symbol allows you to kind of deep reach into a particular specified backlit and kind of pull a symbol out of that paclet to be able to use be used elsewhere in the system so it's kind of a instead of installing the paclet and then being able to use the symbol as a generic welcome language symbol paclet symbol allows you to kind of deep reach into the backlit to be able to get that term uh to get that symbol now another thing that's been increasingly found but been built is um the uh is documentation tools this is our mechanism for uh allowing people to write documentation using the same technology that we've used for many years um to uh so i could create a new function page and it's probably going to insist that um yeah it's probably going to tell me i have to put it in some directory et cetera et cetera et cetera but it's then going to create actually if i do that and i say ignore that it'll probably create a new function page this is now what i need to do to create a page that will be built into documentation just like the documentation that um we have why is this saying new end this oh it must know i'm me because this that's a header for built-in system functions that that shouldn't be part of this um uh this system here okay but anyway so you can just build a given that you've created a bunch of documentation as notebooks there are functions now to build that documentation into something which can be deployed with the paclet once you have paclets there's a mechanism that is useful and important which is what we call context aliases so for example if we were to explicitly do something like needs computer arithmetic we could then refer to the symbols in computer arithmetic by their names but if we didn't if we uh if we didn't do that we could we could do something where we say this is a new thing of context aliases needs computer arithmetic but we're aliasing the context uh computer arithmetic to ca so now a function that uh is in the computer arithmetic context like a function like alp we can now reference by using this context alias if we did it with needs the whole computer arithmetic context will be the context of that particular symbol but here we're saying reference that symbol uh using this alias for the context okay my i think perhaps the uh yeah one of the last things i want to mention here something that we are doing working increasingly towards is symbolic web pages construction so being able to specify directly in wolfram language a web page that you want built so here i'm publishing a webpage that has a web column and it has first second third column and it has various items and now i just published this to this web page and here it is and it'll behave just like a web page here but i specified these things directly as a symbolic uh web page specification now an important feature of this is a new function called interface switched interface switch to something which will build a web page but then as part of in its deployment it will in the css of the web page be able to switch certain parameters depending on the width of that you have made the page in a browser so for instance let's do this let's say i make a web page in which i just interface switch on the width of the page and between 0 and 480 i show a little tiny pussycat here between 480 and 768 i show a tiger and from 768 to infinity i show a lion okay so now what will happen is that we'll deploy a page and when i have this page when i have that page wide there's the lion if i make the page narrower the interface switch will kick in and it will go to a tiger if i make it smaller it'll be a little cat um so this is just a you can embed interface switch anywhere in the symbolic specification of your web page and it allows you to do responsive design uh for uh for web pages okay so lots of different things that we have been doing um among many areas that we've been working on are um uh areas around blockchain this is an example of a let's see like so this works this is a we have now all of the ability within wolfram language to mint nfts and this was an nft minted on the cardano blockchain and has probably gone out of circulation now it probably hasn't been stored for long enough on ipfs um and uh but it was um uh had it been there and it's this is one feature of storing uh the blockchain stays forever but things like ipfs don't apparently this is the this is the image that you would have got was that image were that image still to be there um on on this blockchain but the the um the transaction data associated with um let's see the blockchain block transaction data uh yeah here we go um should be that that transaction should have its data there we go so this is this is for all time stored on this blockchain the cardano laser eyes on the cardano blockchain and it's has certain features stored and then it has a pointer to this ipfs uh thing that ipfs is one of the storage systems along with s3 and some others that we can access directly from our external storage um uh uh function so um that's uh that's a bit of a summary of things that are new in version 13. um i will say and let me actually uh just publish this notebook to the cloud it may be a very big notebook i'm not sure um let's publish this notebook to the cloud so that um uh you should be able to get access to it and play around with the things i was showing here um and uh the but now one thing i want to mention in terms of uploading and downloading and so on one of the things that we've done in in version 13 is to make a sleeker version of downloading our system so you're downloading mathematica will from one whatever there is now the possibility of to download it without documentation so our documentation has been getting ever bigger as we say more things and and have more detail and so on and it's about um it's um let's see i think it's gotten to uh maybe five megabytes five gigabytes or something including all documentation but um what we're doing is to slim that down and get it to the point where it is a less than two gigabyte download um for the um uh for the actual um uh uh for the actual executable and then you can set it up so that you just download that sleeker executable and then the documentation is all accessible on the web or you can always say okay now i want to download the documentation which is another five gigabytes or something that um uh so that you can have it locally on your machine but so this is just a way of making it more convenient and actually when it comes to wolfram engine and more from engine for incorporation and other systems we are getting sleeker and sleeker versions of wall from engine and it's down to uh a couple hundred megabytes that is required there so i mean it's the download size of the of the engine is still a gigabyte but there are sort of slimmer versions of that that we are developing all right well i think that was um pretty much all i was going to show here and i don't know how long i've been yakking on but um oh there we go look at this you see for for when there were in-person events this was a very convenient thing you you do this um you put up this uh you publish the notebook and then everybody sitting there can take out their phone and look at the qr code and we got this feature in there just before a pandemic and nobody did anything in person but now we can um uh we can um um actually uh um uh uh send out the link to this um okay well let's see we have some questions here let me see what i can address um there was a question here about uh progress on theorem proving funny you should ask that i was just working on things related to theorem proving just yesterday and trying to understand the relationship between theorem proving and a lot of ideas that we have about multi-computation and so on i might be able to show you a thing that doesn't exist yet let me see whether i can show this to you um and so that i can find uh a version of this let me show you something this says uh if you follow the physics project you might know about things called token event graphs and um the a proof is actually like a token event graph and so here's a proof represented in a in a different form this is showing hypothesis and it's uh there's there's the and what it's showing is every one of these events is combining uh two hypoth two statements by substitution in this case to produce another statement anyway the end result of all of this is that uh we are going to have some very interesting capabilities for representing proofs that's been one of the big challenges is how do you represent a proof we're now getting ways to do that all kinds of ideas about proof to proof transformations and so on so a lot of very leading edge stuff happening there um there's a question here from satiris about integration with biological databases we really have a lot of that stuff um i mean into things like genbank and omim and so on i don't know and our service connections um provide additional kinds of access to additional kinds of apis and so on um let's see um so we may have um some things here that are relevant to that um if not the um uh if not we'll take it as a suggestion um these are all external apis that are um that are services that you can these are connected services we also have integrated services where the things are directly integrated so for example if i say geo image that's an external service if i say geo image of a geodes around i don't know the uh washington monument and let's say um great um that's interesting park okay let's try let's just try a one mile radius around there um to get something from this ah no it didn't give us a oh because it's a class of things oh dear there are multiple washington monuments i think i think i should have actually read what it said anyway never mind we can but but this kind of imagery is coming to us by a a a connected an integrated service and there are other things which are more weakly connected uh the question here is that support for 3d neural nets what is a 3d neural net neural nets are always i mean they're arbitrary tensors so they don't have any particular dimension not sure what that means if that means a 3d convolutional network the answer is will be yes because we have 3d images um and you can have a uh if i take some um [Music] uh so i i think the uh depends what that question means i don't know question from ron development of elliptic curves uh order of elliptic curves and so on we actually do have a bunch of work going on and looked at curves that didn't make it into 13-0 it will be coming soon um and uh i think we added some uh just not really what you're asking but um we added some new kinds of elliptic curves useful for cryptography but actually the further support of electric curves in cryptography drives the um the need to support um more electric curves for mathematical purposes and that is coming um let's see there's a question or comment here about supporting apple silicon does version 13 add support for the apple metal gpu backend for gp neural net computations um the answer is i believe not yet but it is something actively um being worked on um and so uh that um is something that um we can uh uh we can deal with oh i'm being told here that actually we can represent um external uh the those um identifiers for external let's see what is this okay so these are different kinds of external identifiers for things like genes that we support and so for instance um uh well somebody should have helped me out here but i think if i say external identifier entrees entree gene id this is a way of being able to represent an external um if i if i knew what to type here i would be in better shape um but uh the um um uh this this is a way of representing an external um here let me show you an example let's let's pick a chemical let's say tnt or something and let's ask for i wonder whether i can ask for ah let's see how do i ask for external identifiers here um let's see what our properties of this are oh boy so many properties um i could ask for here we go ah no no somewhere here oh look at that that's a problem there um a horrible problem there um the um i might be able to i don't know what any of these external identifiers i don't know what some of these are so um but if i put that in there i might get one of these external identifier objects no i didn't well let's see if i said wikipedia data data um wiki sorry wiki data data and i say uh what can i say something like an ocelot here but i will see oh no i want to get um let me let me get our own ocelot entity and what i should why am i not seeing anything there i um don't i want to get uh oh that's right i need to yeah okay this is what i'm going to show you this is a wiki data external identifier that's the external identifier for the moon in wikidata and if i show what is that this is the kind of external identifier it is but we can now i think probably identify that that is an entity of ours um and let's see what happens if we say um uh if we ask for okay we can we can ingest that as an entity of ours and we can ask for properties of this similarly for these external gene identifiers we can do the same kind of thing so we reference it using an external identifier and then are either able to pull information from that external source or already know that information um okay uh let's see a um from sauron about processing math images uh with math ocr um the answer is that is coming not here in version 13 but coming um actually we worked on math images a very long time ago and almost released them a very very long time ago and then didn't because we didn't think there was enough interest in them and they were not high enough quality and we're now at the point where we think we can do that um question from transplexity when are we getting graph neural networks i believe there were some advances in version 13 along those lines but the big advance is coming in the next version lots of work going on on graph neural networks there um let's see a question here from ali how correct do we think that integrate is after version 13. boy we think it's pretty correct i mean the um uh you know we run zillions of test examples we've we've ingested all of the standard handbooks of integrals and all those kinds of things correctness is not really so much the issue anymore what's the issue is is the form in which the answer is given something which people say oh that's nice an elegant answer or is it a big horrible mess involving functions you've never heard of um so that's really the the challenge there um all right well let's see are there any further questions that we can address here um and uh otherwise please download go to the cloud use uh use version 13 you can uh you know pick up some random thing here and go to the cloud version i could go here and just go in the cloud and i could paste that in and hopefully in the cloud i will get the very same thing except for some reason it is pink there terrific well it should work um it almost works you can see it behind the pink um but uh we should be able to get um um uh by the way i should explain in terms of in terms of all these things i i think i personally have a unique ability to find problems in uh in software systems um uh it's um yeah okay well there are no further questions um then uh please enjoy version 13. uh we are already doing design reviews and live streams associated with um the um uh the upcoming version um and um i think we can [Music] uh wrap it up for now and i look forward to uh seeing you all on other live streams maybe uh other venues um and due course and uh i hope you enjoy our the results of our what we've been able to deliver in the last six months in version 13.0 and in general the um the things that we've developed in the last couple of years going from version 12 to version 13. we are continuing to energetically push forward we are pleased to get suggestions that people of things people would like to see implemented and added to our system um we also will be doing some things talking about bugs and limitations and so on we'll be doing some public discussions of those kinds of things and so if there are particular areas you think should be high priorities for us please let us know but uh for now bye for now
Info
Channel: Wolfram
Views: 3,707
Rating: undefined out of 5
Keywords:
Id: 8qQBWz8Kijc
Channel Id: undefined
Length: 143min 3sec (8583 seconds)
Published: Mon Dec 13 2021
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.