Hello, Hector. Glad you're here. I'm just waiting on YouTube to start. Hello, everyone. Welcome to Options with Doug, streaming live daily on Bookmap Discord and the Bookmap YouTube channel at 1.30pm Eastern Time. Before I get started, I need to go through their disclosures. General disclosure, all Bookmap limited materials, information, and presentations are for educational purposes only and should not be considered specific investment advice nor recommendations. Excuse me, still have a cold. Risk disclosure, trading futures, equities, and options involves substantial risk of loss and is not suitable for all investors. Past performance is not necessarily indicative of future results. The focus of my presentation and the focus of the Options-Doug chat channel in Discord is options, order flow, the impact of options markets on stocks and futures, and the influence of market-maker hedging flow on price action. I have a two-step process for trading in the first is positional analysis, and I look at how traders and market-makers are positioned in the options market and how those positions change from day to day to develop a thesis regarding the expected trading range and volatility for the day, as well as a directional bias. And the second step in my process is execution, and I look at real-time order flow in Bookmap and real-time market-maker hedging flow in SpotGamma Hero to confirm my thesis and for setups for entries and exits. And just to be clear, I will be talking about setups today and those setups can be taken either with shares, options, or futures. That's up to you, but the basis of my analysis is options, order flow and hedging flow, and again, whatever you trade, that's up to you and how you like to trade. And questions and comments are welcome, and I will be watching the options-dog chat channel in Discord and then the chat and YouTube as well for your questions and comments. So Grasshopper pointed out, had a great discussion this morning regarding a potential divergence in the S&P 500, and I will talk about that today. So my agenda for today, what I want to talk about, quickly go over news items, wrap up the week, and then talk about just a couple of things coming up next week, and then I'll go through my positional analysis, and then I'm just going to highlight a few setups, and then we'll go to the current market. All right, so first of all, news items to wrap up the week. Consumer sentiment came out at 10 a.m. Eastern time, and that was right around here, and this is the S&P 500 futures, ES futures, and this is the 10 a.m. date of the consumer sentiment. Came in lower than expected, I believe. The site that I use for financial news data was down today, but I believe it was lower than expected. And anyway, it appears to the market whatever it was, the market had a negative reaction to that, and price moved lower pretty sharply. It was already slightly lower, and then it continued lower after that. All right, next week, upcoming items, VIX expiration on Wednesday the 17th, and then monthly options expiration on Friday the 19th. All right, let's talk about positional analysis now, and I will get back to this chart in just a moment. I'm going to start with an S&P 500 SPX chart. So this is SPX, and this is starting with the month of April, beginning at the month of April, when market makers' gamma position shifted to positive. So SPX has been trading in a pretty tight range since then, from about 40.50 up to 41.86. So pretty narrow range for SPX since then, since the beginning of April, when market makers' position on the gamma curves shifted to positive. All right, this chart is showing several levels from different sources. First of all, this purple line, dash purple line, is showing the lower and upper edge of the expected move for the week. That's based on the options market, and that is updated once a week. I update that once a week, and then the dash blue line is showing the upper and lower edge of the expected move for the day. And that, so far, we'll see in just a minute at a smaller time frame chart that the lower edge of the expected move for the day did hold pretty well today. And it held yesterday as well. And that is for SPX. And then also, this chart is showing key spot gamma levels. These are provided to spot gamma subscribers for a variety of platforms. And again, this is thinkorswim showing the put wall at 4,000. That's the strike with the largest net negative gamma that can be expected to act as support. And that is also the absolute gamma strike, the strike with the largest absolute gamma. Here's the volatility trigger at 4,110. And that is spot gamma's proprietary gamma flip level. Below that level, market makers position on the gamma curve is negative. In a negative gamma environment, they have to trade with price to hedge their delta exposure. And we'll see that more closely when we look at the Vana model in just a couple of minutes. And then above that level, market makers position on the gamma curve is positive. In a positive gamma environment, they have to trade against price to hedge their delta exposure. So that tends to subdue volatility in a positive gamma environment and enhance or increase volatility in a negative gamma environment. And then finally, here's the call wall at 4,200. That's the strike with the largest net positive gamma. And that can be expected to act as resistance. All right, so that is SPX in a about a one month chart. Now let's take a look at just today, just SPX for today. So this is showing the levels that are in play for today. First of all, here's the lower edge of the expected move for the day. And this is based on the closing price yesterday as well as the information, the expected range at the close yesterday. And other levels that are in play. Here's the volatility trigger, the zero gamma level, and then the SPX 4,100 level that was noted as support in the SPOT gamma AM founders note. All right, let's take a look at the book map chart now. So the levels in play, I'm showing two columns of levels here. And the first, these are SPOT gamma cloud notes provided to SPOT gamma subscribers again for a variety of platforms. And these are provided in the form of cloud notes. And it looks like SPOT gamma is showing there is a difference between the price of ES and the price of SPX. So these numbers are in terms of SPX. SPX numbers converted to an equivalent ES number. It looks like SPOT gamma was using 13 points today. And I calculated this morning my think script was showing it was 13.5 points. So there is my 4,100 level. Right there. And then Razor asked, do you calculate the lower and upper edge, the expected move for the day? And yes, I do. So what I do is, let's go take a look. I'll show you in just a minute. Let me finish up with this chart and then I'll show you how I calculate that. It's very easy. These are levels shown on my cloud notes. And again, I calculated a slight difference in the ES to SPX difference than SPOT gamma. 13.5 points versus 13. All right, so there's the 4,100 level, the zero gamma level, and also the 4,110 volatility trigger. And as Razor points out, there's the lower edge, the expected move for the day. And then I'm also showing key SPI levels. So here is the SPI 412 absolute gamma strike. And note that level did act as support briefly this morning and then acted as resistance. Let me just make an adjustment to this chart. Make it a little bit easier to see. I'm going to tone down the heat map and bump up the volume dots just a little bit. So there is the, again, the SPI 412 absolute gamma strike acting as support briefly and as resistance. So all of these levels are in play for today. So I have SPI levels, SPX levels, as well as the lower and upper edge, the expected move for the day. And this is for SPX converted to an equivalent ES number. And it was pretty close to the lower and upper edge, the expected move for ES as well. All right, so those are the levels that are in play for the S&P 500. And let's go answer Razor's question. So this is an option chain for SPX. And this may be difficult to see what I look at. So we know that SPX has options that expire every day. So right now this 12th May, that's expiring today. And then at the end of the day today, I will take a look at 15 May. That's the Monday expiration. And look at this number right here. And right now that is showing a range of plus or minus 35.27 points. And there are other ways to calculate this as well, but this is the quick and easy way just to use this information in an options chain. And I think most options chains should provide this information. So at the close, I'll take the closing price today of SPX and look at this number and add it and subtract it to SPX, the closing price to get the upper and lower edge of the expected move for the day on Monday. All right, so Hector, I ask, are you familiar with Ludwig levels? I don't think they are shown on Spot Gamma. Are those the levels that Scott Posina uses? At any rate, I don't even look at them or think about them. I've shown you all the levels that I look at. And the levels that I look at are all based on either round number levels or the options market. And that is what I have found gives me the greatest clarity and I think these levels are important and they have a factual basis that is well known. I know exactly what these levels are. I can go into Spot Gamma and we'll do that in just a minute and see exactly where these levels are. Spot Gamma levels are based on gamma weighted open interest and there's no secret there, no secret sauce, no one person generating these levels. These are obvious factual levels. Not to criticize Ludwig levels, but this is something that makes sense to me. Okay, let's move on now. So that is the S&P 500. And let's take a look at NASDAQ now. So NASDAQ, the levels that are in play for today. Again, the same thing here. And before I dig into this chart, I'm going to take a look at QQQ. Let me find the right chart. All right, so this is QQQ, showing just price and Spot Gamma levels. And this is a one-day, one-minute chart showing the levels that are in play for today. And note this 327 and also this Combo L5 level acted as resistance this morning as well as VWAP. Price chopped around the 325, large gamma 2 level for a while and now is trading below the volatility trigger. And the levels on my NASDAQ chart, first of all the Spot Gamma levels, provided for NDX and also these are Combo levels combining QQQ and NDX. Now what Spot Gamma is doing is using the same point difference for NQ minus NDX that they are using for the ES minus SPX and that's not right. The point difference that I calculated today for the difference between NQ and NDX is about 57 points versus 13.5 for ES minus SPX. So anyway, this is the NASDAQ 100 futures, NQ futures. And here I'm showing levels closer to the correct price on my cloud notes. So I've got the Combo levels, QQQ levels. There's the 327 that acted as resistance this morning. And here's the lower edge, the expected move. This is for NQ. Alright, so the levels in play and then there's the chop around the 325 level that finally acted as resistance. Alright, so that's NASDAQ and S&P 500 levels that are in play. There were a few shifts in levels and while we're talking about those shifts in levels I'm going to go take a look at the absolute gamma levels. We'll start with SPX. So for SPX, the only shifts in levels was the shift lower and the volatility triggered slightly from 4115 to 4110. Otherwise all levels remain the same. There's the 4000 put wall and also the absolute gamma strike. What this chart is showing, the orange bars are showing positive gamma or a call gamma above the zero line. Those are the orange bars and the blue bars are showing put gamma or negative gamma below the zero line. These are the market makers positions at those strikes. So there's the 4000 absolute gamma strike as well as the put wall. Note the large amount of gamma at the 4100 level and the 4150. There was a question in the Spot Gamma Discord earlier today about how options are trading, SPX options are trading specifically the volume today and volume today was the highest at the 4150 call that expires today and also at the 4100 put that expires today. So that's how options traders were trading. Puts at the 4100 level that expire today and calls at the 4150 level that expire today. And then here's the 4200 call wall that's the strike with the largest net positive gamma and that can be expected to act as resistance. Let's take a look at SPI I'm going to zoom in on this chart. So for SPI, there was only one minor shift in levels as well. The volatility trigger shifted lower from 413 yesterday to 411 today. Otherwise, 400 remains the put wall and the absolute gamma strike remains at 412 and that's pretty obvious the strike with the largest absolute gamma and then the call wall remains at 420. So there's the ceiling for SPI and the floor, 400 the floor, 420 the ceiling. I'm going to do a refresh. I'm going to take a look at NDX just quickly and really this chart is not it's different than it has been in the last few days. The call wall and the absolute gamma strike are at 12975 not shown on this chart and then the volatility trigger for NDX did move higher to 12,890 and that is also not shown on this chart. And then finally, we'll take a look at QQQ zoom in a bit here. So for QQQ there was only one shift and the put wall shifted lower from 315 yesterday to 310 today. So there's the put wall the strike with the largest net negative gamma at 310 and then the absolute gamma strike remains at 320 and then there's the call wall the strike with the largest net positive gamma remains at 330. So there's the ceiling and the floor for QQQ. Alright, let's take a look at one other thing on this chart. Let me just do a refresh here. Hello, JEC. Glad you're here. Good to see you in the live session. This is the Vana model and this is showing how market makers delta notional shown on the vertical axis changes with changes in price shown on the horizontal axis. There are two curves on this chart. The first is showing how market makers delta notional changes with changes in price only. So what this is showing is as price increases market makers delta notional will increase and they will have to sell futures to hedge their delta exposure and that's typical of a positive gamma environment and that's what I was talking about before. Alright, then on the other hand if price decreases market makers delta notional will increase and they will have to sell futures as price decreases. That's typical of a negative gamma environment and that tends to enhance volatility. Now the second curve on this chart the pink curve adds implied volatility to the equation and this is really what you want to look at. So this is showing as price increases market makers will have less delta notional to hedge and then on the other hand if price decreases they will have more delta notional to hedge. So let's see where SBX is trading right now and I see it at about $4102 right there where I'm where this vertical line where I'm holding my cursor. So what this is showing is if price increases from that level market makers can actually buy back short hedges so that may be a tailwind to price may help boost price. On the other hand if price decreases and implied volatility increases they will have to sell futures to hedge their delta exposure. Alright, that's the Venom model that gives us an idea of how market makers were positioned at the beginning of the day and how they may react with changes in price and changes in implied volatility. Alright, let's take a look at one other piece of data and this is the what I want to take a look at is the spot gamma index and this is for SBX, SPI, NDX and QQQ and this number is a proprietary measurement of the total amount of market gamma market makers gamma and what this is showing is for SPX gamma notional is positive so positive gamma market makers trading against price to hedge their delta exposure tends to subdue volatility and SPI is slightly negative and then for the NASDAQ these numbers are slightly positive. Alright, so that's how market makers were positioned at the beginning of the day Alright, so let's talk about some setups, so I'm going to highlight setups from the morning for just a couple of minutes and then we'll take a look at the current market. Alright, so first of all let's take a look at spot gamma hero and this is for the S&P 500 and this is a combined signal for SPX, SPI, XSP which is not significant and ES futures and notice it is definitely bearish today so this, I'm looking at this total number here that's minus 2.5 actually 2.85 billion so that's a pretty significant number definitely negative traders are taking negative delta positions what this chart is showing if you have not seen this before this is minus price and this is in terms of SPX the spot price and then this is showing options trades for all these instruments and then the market maker hedging activity and let's zoom in on this just a little bit so one thing that one thing that Grasshopper saw this morning was what appeared to be a divergence and he asked about that discord and I told him, well first of all let's look at ES futures and confirm with order flow before you take any position as well as a potential reversal level but I think the key to this was to separate out puts and calls and let's zoom that up I can't, let's see one that so this is about when I posted a screen shot this is about 1130 and this is showing traders are buying calls shown by this rising orange line they're also buying puts and this chart is showing notional value minus 1.5 billion versus positive 843 million put buyers a winning this notional value is still negative and even when we look at the total signal it's still negative even though it is rising there so what appeared to be a potential divergence if you take a closer look at it was not in fact a divergence signal and then this also and I posted this as well appeared to be a divergence as SPX ES approached the lower edge the expected move for the day as well as the 4100 level but that did not play out either this is definitely a bearish day alright so let's go take a look at just take a look at the individual components of this so SPX and that's negative minus 845 million so that's SPX the next is SPI minus 109 billion and then S&P 500 futures minus 1.17 billion so this was recently added to the total signal and you can see here it's adding a significant component to this total so traders are taking negative delta positions in SPX, SPI and ES futures so let's go back to the total signal now zoom in on this chart just go to the cash open here so the cash open is right on the left edge there at 9.30 let's separate outputs and calls and again this is clearly showing that clearly showing that put buyers are winning and Hector asks is it possible to scan for hero divergences or do we have to be looking at the chart and you have to be looking at the chart so the hero chart takes some time and experience to interpret and I'm not looking at this in a vacuum I'm looking at order flow book map as well and sometimes with this SP500 especially there are a lot of ways of looking at this looking at the individual components looking at zero expiration versus all trades I'm looking at and changing the time frame as well the rolling window so this is the default all trades so this is all expirations and also looking at the one day rolling window period and all I've done to this to change from the default is separate outputs and calls and you can just look at the lines and clearly see that put buyers are in charge prices responding very well to puts and also just check these numbers so call buyers 344 million versus minus 3.5 billion for put buyers put buyers are definitely winning alright so let's go take a look at ES now go back to ES so clearly trading from the short side today was the way to go any you know just taking any opportunity for a short any pullback as traders continue to buy wrong tool as traders options traders continue to buy puts and just watch the order flow see all the aggressive sellers there aggressive sellers aggressive sellers I'm looking at the pink volume dots and there was a bit of a head fake here is price approach the lower edge the expected move for the day that dash blue line as well as the 4100 level both potential support levels and larger traders were coming in with iceberg orders note the rising light blue line showing that traders were trying to buy this move as price moved lower and it did not work out notice now this large as price moved up this large trader comes in with large iceberg order notice the vertical drop and the light blue line there and JEC points out yeah there's a confluence there so far the bearish trade is just too strong but there is a cluster of levels there from the 4100 SPX 4100 lower edge the expected move that I have at around I think around 4111 13 something like that and then also there's the wrong tool there's the zero gamma level the spy 410 level as well as the 4110 volatility trigger and this may definitely slow down price but so far order flow remains bearish so this what appeared to be what appeared to be support here initially this lower edge of the expected move for the day what appeared to be support notice the shift in order flow all the green volume dots market buy orders aggressive buyers did not last long and this large iceberg order executes 2,785 contracts executed and then the aggressive sellers start to come in so this turned out to be just a another pullback in a downtrend alright so Hector asked what is the size of an iceberg order you consider relevant I don't have a threshold it depends on the context some day when volume is light a smaller number can move the market and other days like today a larger number can move the market so at any time 2,785 is significant that is a large iceberg order I would say in general anything over 500 is certainly significant but I don't have any set threshold I think it depends again on the context on the day and the volume alright so that is the S&P 500 and so far I don't see any reason at all to go long alright let's take a look at NASDAQ and then I do want to point out a couple of stock setups this morning that were based on a call gamma unwind and that's what I look at for stocks every Friday alright so let's take a look at the NASDAQ now again short setups it's working pretty similar chart to the S&P 500 one thing to note is the falling yellow line and you can look at the numbers here that sell stop orders were helping to fuel this move lower all the way down that show by the falling yellow line and the sub chart and red dots these are sell stop orders and these are pretty big numbers for NASDAQ and that is most likely because I am zoomed way out alright let's take a look at HERO let's see what options traders were doing for NASDAQ let's go back to HERO and we're going to take a look at the NASDAQ total signal and just to point out this is combining it will combine let's go take a look at the chart so we'll take a look at NASDAQ and this is clearly clearly bearish throughout the day clearly trending down and this is combining NDX and QQQ and the one again combined signal and you can just see the numbers there and QQQ is index NDX is pretty small compared to QQQ but it does have a contribution so for S&P 500 I typically look at the combined signal and the same for NASDAQ so let's zoom in on this let's separate outputs and calls and here's the same story even more more significant traders are buying puts and that number is minus 934 936 million versus the call buyers at 2.39 million so that's why the total line is just sloping straight down and clearly put buyers are in control here let's go back and take a look at book map so I certainly played NASDAQ from the short side today there were plenty of opportunities for entries again just looking for pull backs shift in order flow from bullish to bearish just watch for the pink dots there's the move lower at the 325 strike and another head fake at the lower edge the expected move as larger traders attempted to buy this with iceberg orders notice the rising light blue line also rising CVD that didn't last long that turned out to be just another another pullback for a short giving you a good opportunity for a short as traders continued to buy NASDAQ puts alright let's take a look for just a moment at some stocks and then we'll get back to the S&P 500 and NASDAQ so I want to take a look at a couple stocks first of all let me set the stage for what I want to take a look at and this is something that for those of you subscribed to spot gamma may want to take a look at every Friday so this is my watch list and I have sorted this by next expiry gamma percent and then I will look at the top gamma expiry so this is showing and I'm going to ignore VIX and then I'm going to look at stocks that typically have greater than 30% gamma expiring or close to that now this is a weekly expiration we'll take a look at this again next Friday this is a monthly expiration but we know that large cap tech stocks have been very strong this week traders have been buying calls and those calls they're buying expire today and when traders buy calls market makers sell the calls and they have to buy stock to hedge their delta exposure and then as expiration approaches those calls start to lose value due to time decay and they can sell delta with a change in time as time passes and so those calls start to lose value market makers delta notional decreases and they can sell their long stock edges and that is a great pretty consistent setup you just have to watch price action and also watch hero to confirm that if traders are aggressively buying calls today then that won't work but today it led to some good setups and I'm going to highlight a few so the first is Nvidia so we see that next gamma expiry is over 30% and that is today and then also there's some call domination above the 2.90 strike so we know that traders are long calls market makers are short calls they're long stock to hedge these calls are expiring so now let's take a look at hero and we'll take a look at Nvidia so there's Nvidia bearish hedging flow note the put wall at 285 in play and that's also the hedge wall so let's go take a look at book map now take a look at Nvidia so we know 282 is the put wall and the hedge wall and that was the first target first short this morning Nvidia was great short and you could have planned that in advance just you know that you know understanding that call gamma unwind that can happen every Friday especially in a strong market where traders have been buying calls all week and we know that those calls are expiring today a good amount of them so there's the setup in Nvidia nice short setup and a well you know I guess a well understood well defined strategy alright the next is netflix I don't have that on book map here so we'll just take a look at the hero chart for netflix so let's go back and we'll take a look at our watch list in equity hub for netflix and this is showing again over 30% gamma expiring today 31.61% call domination above the three let's see what strike that is 45 strike so let's take a look at hero and we'll see what netflix is doing so they're buying puts and selling calls alright thank you JC JC posted a book map chart of netflix showing a down trend in netflix and heroes showing that traders are selling calls and buying puts definitely bearish hedging flow and we have the kicker of those calls expiring and market makers are selling their stock edges alright so that's netflix and then let's take a look at the next stock on the list AMD that was not so much that when I looked earlier not so much of a setup you know not every stock works and let's go back and take a look at tesla continue on take a look at tesla so tesla and here just below the 30% threshold 26.85% and also there was I think some news this morning about tesla that he Elon musk had appointed a new CEO for twitter and I think initially pre-market that was uh taken as bullish traders were initially like that news let's go take a look at tesla and hero and that did not last long so note the levels that are in play for tesla here 175 call wall also notice this note about a where was that oh here these are alerts in the spy gamma dashboard there's the tesla call wall breached at 701 am so before the market opened traders were buying tesla shares breached the call wall now let's go take a look at book map so here is the call wall breach at around 7 am the party didn't last long as options traders started fading that move taking negative delta positions and price moved lower again as those call started to lose value and market makers could sell their stock edges and then price dropped below that 175 call wall and made it almost to the 167 liquidity and now it looks like prices dropping around the 168 level alright so those are the stock those are the setups that I wanted to highlight and let's go back and take a look at the index s&p 500 and nasdaq now so the s&p 500 now may have found support at the 4100 level let's go take a look at hero and see what options traders are doing alright so hector asked on stocks what kind of options do you enter hector I did not trade options today I typically trade shares or futures now if I had known that the s&p 500 or nasdaq were going to drop this much and I did not know that I would have bought puts and I'm more inclined to buy a put than buying call so because of the the increase in implied volatility but that's just me I was trained as an options seller a premium seller and it's just hard for me to buy a call so I was trading trading shares and futures today alright so RJ asked Doug you used yesterday's closed for the low expected move today and is there a reason that you did that versus the open or do you track both and I just did it because I was getting I had time yesterday well really didn't have time but I just wanted to get it done so I was as prepared as possible and for the morning so there's only there's certain things that I have to do in the morning the information that spot gamma provides is based on a lot of it based on open interest which is only available at overnight so the I know the expected move was available at the close yesterday so I just calculated that number added it to my charts and that was it and I think I'm just going to continue to do that and Hector asked what scenarios you go for zero DTE so again I am my reaction is to trade shares or futures I'm just not in the frame of mind to trade options yet I mean that's something that I would like I just you know again today would have been a good day to trade options and I think JEC may be doing more that maybe he's in the frame of mind I mean there are advantages of it to that of you define their defined risk you don't have to worry about a stop order you just buy a put today and let it play out for the day and you be willing to take a loss or an asymmetrical gain that you would would gain today so it's something that I'm working on again if I'd known this move would have was going to be this large I would have certainly bought a put today I just didn't know and especially today was starting today market makers position was positive so in that case I'm thinking more range day lower volatility and that's actually what spot gamma was calling for today let's go to the this is the spot gamma am founders note so they're saying today so for today we anticipate volatility to remain muted and price action looks similar to that of the last several sessions so yesterday I believe was a range day so I'm not with that in mind I'm not thinking buy I'm not thinking buy options and so RJ says so spot gamma is wrong I mean everybody can has their days so you know maybe somebody had a better read on it than I did but I was again using that just using the numbers as my basis I was not thinking this is more typical this larger trading range more typical of a negative gamma environment but you know watching I did trade from the short side today and had a good day I just did not trade zero DTE options that's just typically not my frame of mind and keep in mind that generally buying an option is a low probability trade you have less than 50% chance of of making money and I again I don't know if there was any tell that today was a trend day I gonna be a trend down like this maybe it was the reaction to the consumer sentiment I don't know and I also managed some long term trades today I bought back some short calls so overall good day today again I traded NASDAQ from the short side and then bought back short calls in the S&P 500 let's take one last look at the at the indices then we'll call it a day so first of all here's the S&P 500 let's zoom in on so so far according to the options market really no reason to go long so uncle asks if you zoom in on book map they flip the book around 225 alright so let's go take a look at book map so this may be what what uncle is talking about and typically I don't look this close so I'm looking more at levels and price action and this may be something that Bruce has much more expertise on than me I'm looking at and talking about a much larger time frame then zoomed in zooming in on on action like that so that's something for Bruce so it looks like well traders were trying to try and get long immediately greeted by sellers so I again I see no reason to get long here and I had a good day from the short side and RJ comments on IV has it has not expanded that much let's just take a look at VIX if I can find my VIX chart so it looks like VIX is up just 0.67 maybe just a little bit less than 4% we'll zoom in on today so JEC comments on VIX one day let's take a look at that and I would expect much more so that makes a lot more sense of course the VIX is primarily looking at 30 day options 30 days out and we know that the bulk of the volume I mentioned earlier in SBX puts and calls was today the 12th May and note this is up and this is I'm sure you can't read this VIX one day is up about over 13% today so Brinn at Spot Gamma has talked about this for some time that traders are focused in the short term they're focused on 0 DTE they're putting off any concerns about debt ceiling or anything else that may be coming out and that's tomorrow that doesn't matter they're trading today and what they're trading today is reflected in this VIX one day so for day trading this really does make more make more sense so when you look at it in this terms yes there is a pretty significant expansion in volatility for the day thank you JEC for pointing that out let's take a look at Nasdaq so S&P 500 order flows still bearish iceberg stops CBD all bearish price chopping around this potential support levels let's take a look at Nasdaq so it looks like larger traders are trying to get long with iceberg orders but the sell stop orders are still dominating shown by the following yellow line as well as the numbers over here these accumulative numbers for the session alright let me take a final look at questions so YouTube has been quiet today great discussion and discord today I want to thank you thanks to Hector RJ JEC uncle thank you for your chat here and JEC I agree from an options perspective all is your most important indicator so we can confirm that let's go to Nasdaq now go to Nasdaq look at hero we see that traders continue to buy puts far dominating call buyers so 1.03 billion negative versus 19.1 million put buyers are definitely winning today and let's see what they're doing go to the total signal add in next expiration zoom this out so it is some next expiration but it's also the total signal really dominating this is all expirations turn that off and JEC again glad you're here it's your commentary really adds a lot to the presentation alright folks I need to wrap it up great discussion again and discord uncle or RJ JEC Hector thanks again and I'm going to go ahead and wrap it up I see no reason to go long now it's been a great day from the short side everyone thanks again for your comments questions and comments thanks for watching and I will see you next week have a great weekend everyone bye


OpenRefine is a useful open source software which can be used to work with different spreadsheets. It is also used as a tool for uploading data from spreadsheets directly onto Wikidata. Today I'm going to run a tutorial showing how to reconcile data and add it onto Wikidata. You can download OpenRefine online for free following the link shown here. You can then open OpenRefine using Google Chrome or Internet Explorer. Once OpenRefine is opened, a spreadsheet can then be uploaded. This can be done either by uploading directly from your computer, using a web address, a clipboard feature, uploading a database or using a link from Google Data. I've decided for this example to work with data from Google Sheets and the example that I'm using is from the Scottish Witchcraft database where I will be looking at the ethnicity of different witches recorded in the database. So I will copy the link and then paste it directly into the text box. From there I am then given a preview of the OpenRefine data and I'm able to then give the project a name. Then on OpenRefine you're then able to see all of the columns that you have used on your original database. And for this I then have the most important information that I'm going to look at and that is the name of the accused witch and the ethnic origin. I also then have the reference which is added at the end which will be a reference for each point that I then upload onto Wikidata. If you follow the reference it will then take you onto a page on the Survey of Scottish Witchcraft Database where you will be able to see more information about each witch, not only their ethnicity. Firstly the spreadsheet on OpenRefine can be neaten up so that there are not columns featured in the spreadsheet which are not needed. This can be done by clicking on the arrow at the top of the column and then going on Edit column and then clicking on Remove this column. This will then remove this column from the spreadsheet. This can be done for any columns that are not needed within the spreadsheet. Once this is done you are then ready to reconcile the data. To reconcile your data you must click on the arrow at the header of the column and scroll down to reconcile and click on Start Reconciling. From there you want to pick the Wikidata service and be ready to start reconciling. OpenRefine gives you suggestions of different items that you can reconcile your data against to have a more accurate result. You can either pick from this list or you are able to search your own. So for ethnicity, ethnic group seems like a better queue number to reconcile against. From there OpenRefine can then reconcile all of the data that you need. Once OpenRefine has finished reconciling your data it will then have a green bar at the top of the header column which then indicates the amount of your data which has then been correctly reconciled. As you can see from the 17 rows within this spreadsheet there are 15 matched and 2 not matched and OpenRefine splits these into two separate groups to make it easier to look at them. So we then know that for Irish we are wanting to go with the Irish people rather than Irish Americans and OpenRefine is doing this by giving us different Wikidata suggestions. If I click on the single tick it will match this one item to this cell. However if I click on the double tick it will then match all of the cells with the same information to the same Wikidata point. Once all of your points have been matched we then have a full dataset for ethnic origin and as a result there is a 100% match rate with a full green bar. Next we can then reconcile other items within the spreadsheet which will be used along with this already reconciled column to upload data onto Wikidata. We can then reconcile other parts of the dataset which would be useful to use in connection with the ethnic origin in order to upload this data onto Wikidata. And so the next step is to reconcile the name of the witches in a similar way to what we've done for the ethnic data. For the name of the witches we can then relate this to Q5 which is for humans and this time Wikidata and OpenRefine have given us the correct list. As names are more difficult to be able to find a connection with we can then also reconcile it against another column within the spreadsheet and for this example a Q's reference would be the most useful as each witch has a Q's reference which is also uploaded onto Wikidata. A Q's witch ID. And then we're ready to also start reconciling for this dataset. You can then reconcile as many different columns as you wish. However in this example two columns is enough. The next step in order to upload data from OpenRefine onto Wikidata is to build a schema which can then be uploaded onto Wikidata. This is used using the Wikidata extension and clicking on edit Wikidata schema. From there you're then able to build a schema which is made up of different items and properties. By clicking on add item we are then able to drag a different reconciled column into this box and as I want to add data about each ethnic origin directly onto the name of each witch I then want to have my main item as the witch which is then called full name in this instance. I then want to add a statement about the witch and by doing this I will click on add statement. I can find the property that I want to add about each Q's witch by searching in this search bar here where I can type to get suggestions about the different properties. I can then drag another reconciled item about the witch and so I'm going to drag in ethnic origin. I'm then going to drag in telling us the ethnic group for each Q's witch that is mentioned in this spreadsheet. The next step is then to add a reference and this can be done by clicking on the add reference box here. There can either be one reference for every single item which is going to be uploaded onto WikiData or each can have a singular reference. This can be done by typing in URL reference and either you can put in one URL directly into this box if every single statement has the same reference or else in this instance I'm going to put in one of the columns taken from the spreadsheet directly into this box by dragging it and this is because each one of these points that I want to add to WikiData has a different reference. Once I have a reference I'm then able to go into the next column to see if there are any issues with my edits. OpenRefine tends to flag up any issues that it sees in your edits so that they are as accurate as possible as you can see in this example there are no issues and so the next tab then shows you the preview of how it will look for each one. For example we can see that John Neal is part of the ethnic group of English people and we have a reference below which will then take us on to more information about each witch issues. Once you're happy with each one of the points and are confident that the data that you're going to upload into WikiData is correct, you're then able to export the data. This can be done either using upload edits to WikiData which will upload your edits directly onto WikiData and is the best approach for smaller data sets under a thousand points or else if you have a very large data set you can then also export to quick statements and this then makes your data into the correct format to be uploaded directly into quick statements which is another program which can be used to upload data directly into WikiData. In this example I'm going to upload the data directly into WikiData and it already tells me that there are no issues with my edits and I'm ready to upload. I then type in an edit summary and can click on upload edits and through open refine I'm then able to upload my edits directly onto WikiData. Once this is complete I'm then able to go on the name of one of the Q's witches which will then take me directly to their WikiData page and if I go down the page I'm then able to see that there are


Can I barbecue? During a fire danger period, I can't. Unless I make sure it's not a windy day and there's a clear area around and above the barbecue. There must be a person in attendance at all times and the barbecue should be turned off when finished.  I must also have access to water. I can't use barbecues with wood or heat beads or similar. To learn more about how to conduct a barbecue lawfully, go to cfa.thick.gov.au.


My name is Gabor Sarnas. I'm a PhD candidate from Budapest, Hungary and today I'm here to talk about the topic of graph analytics and in the context of using matrix operations and running analytics on investigative journalism datasets. So if you're here, you have probably heard about the Paradise Papers. This is a data set that was leaked to a set of investigative journalists. This is somewhat similar to the Panama Papers, but it's a bit more complex and it's a bit bigger. If you think in terms of big data, it's not a huge data set. It has two million nodes and three million edges, but even so, it has been used with success to uncover various interesting and shady offshore deals. So this is actually one of those use cases where graphs are used for the greater good. This is something that can help us to understand how the world works, reduce corruption. So this is really one of the coolest use cases of graph technology. The schema of the graph is rather simple. So you have some of these entities. They are connected to officers. They have intermediaries to do their business deals with and many of these objects can be registered to a certain address. So this is graph schema that you have probably seen or you have probably seen something similar to. There are node labels and there are edge types in this graph schema. So when we talk about graph data models, I think it's important to get the terminology right. If you open a textbook, it's often a graph like this. So this is some social graph. There are five people here from Bob to Fred, and these people have some acquaintance relationship. Each node is a person, and each edge is relationship. This is called a single graph, or sometimes it's called a textbook graph, which is a bit derogatory, and it has many other names. So if you review the literature, it's called an untyped graph, homogeneous network, or a monoplex graph. So these are all the same term. Of course, reality is a bit more sophisticated than that. So if we could just reduce the abstraction a bit, we could say that we only have persons in the graph, but let's see whether they have different relationships. So in this figure, the green lines correspond for business relationships, and the blue lines correspond for friendships. And this makes it a lot more interesting, because we can see that Carol is more oriented towards the friendship side, and then is more like the business center of this little set of persons. If you read the literature, you will find that this is called a multiplex graph, or an edge labeled, or an edge typed graph, and there are other names in network science called heterogeneous network, or multi-dimensional network. Interestingly, the expressive power of this graph is a lot stronger than that of the untyped graph, but it still miles away from the property graph that is served by graph databases, because we don't assign any properties to any of the nodes or the edges. So what do we mean by graph analysis and multiplex graph analysis in particular? When we do graph analysis, we often define a set of metrics, like the so-called local clustering coefficient metric. The idea here is that we study the graph in each node, so we start from each node V, and we look for the instances of wedges, which is like this shape, and this means that there is a node, and it has two neighbors that might or might not be connected to each other. If they are connected to each other, then they form a triangle, which is on the right side, so wedge can be closed into a triangle. This is an age-old idea dating back, I guess, to the 1960s, and it has been published in textbooks in the 1990s. This is a very popular tool in social network analysis. To determine this metric, the clustering coefficient, the idea is only to calculate the ratio of the triangles, the wedges that close into a triangle, and the number of wedges in total, and they have found that this is a very efficient way to characterize social networks. However, there is more to this story than that, because we can actually apply the ideas of multiplex networks to this clustering coefficient metric. We named it the type clustering coefficient metric. We have taken this from a paper that was published five years ago at the physics journal, and the idea is actually pretty simple. We say that we are looking for wedges that have two edges of the same type, and the third edge might be a different type, and if they close to a triangle, that third edge must be a different type. When we calculate the TCC metric, the type clustering coefficient, we do the ratio of typed triangles to the number of typed wedges. Why is this useful? If we take a look at the example and we just calculate the simple LCC metric, we can see that it's actually two-thirds for all of the nodes. It doesn't really tell any insight into the story. All people are equal according to this metric. However, if we take the type information into account, we can see that some people have more influence or are more prominent in certain aspects of clusterness, and we can see that D has 0.5, which is a reasonable value for someone at that position, and interestingly C has an even higher value. This is something that can help us start with our analysis. So previously, back in 2016, I published a paper with my advisor and my peers about the characterization of engineering models. When I say engineering models, you should really just think graphs that describe a software hardware component or a building or something that has been designed by an engineer. These models are about 100,000 or at most a million nodes and edges. Back then, we implemented the Java application that uses edge sets to calculate metrics, including the type coefficient and the local castering coefficient. We were very confident, so we thought we can just run these analyzer components on the Paradise Papers dataset and it will work out of the box. Then it turned out that it didn't. It actually took multiple days and it still didn't finish the calculations, and this got us thinking, what's going on? Why doesn't it work for a dataset of the size of the Paradise Papers dataset, which isn't really big? It turned out that there are many implementation issues, systems aspects that we need to get right, and there are also algorithmic aspects that needs to be studied. Just to take one step back, which part of the graph processing landscape are we at. I'm going to use the terminology of the linked data benchmark console, abbreviated as LDBC, which releases benchmarks for all sorts of graph-specific workloads. According to them, there is two axes, the amount of data accessed and the expected execution time of a given query or a given analytical workload. We started the bottom right with OLTP simple reads and simple lookups, then go up for all app queries, which are more analytical, use more aggregation, do global filtering and multiple joins, and we are at the top graph analytics, which is a graph analytical workload that is the classical network science approach for graph analysis. If you have studied graph algorithms you have probably heard about page rank or connected components or shortest path algorithms, these graph analytics do just that. This is basically a structure-only analysis of a given graph. There are many tools to do this, so you have a lot of patchy tools like Giraffe, Spark, Flink Jelly, the Neo4j graph algorithms library, and so on. So this is pretty well covered. The bottom half is also pretty well covered, because if you perform graph queries that use the structure of the graph, the type of the graph nodes, and the properties of those nodes, you can always use languages like Cypher and Sparkle, and there are many tools for this, including Neo4j, Virtuoso, Stardog, etc. But interestingly, our work fits somewhere in between, so it uses the structure of the graph and some type information, but it doesn't use any of the properties, and it's sort of in between all these workloads, and it seems to me that there are no off-the-shelf solutions to tackle these sort of computations. If you're familiar with the Apache tools, you might think that some of them might work for this, and this is indeed a good question. So there are four popular Apache frameworks for graph analysis, Hamagraph, Giraffe that runs on top of Hadoop, Spark's GraphX, and Flink's Jelly. Interestingly though, I found that these libraries are getting more and more abundant, so I did a little bit of analysis, and I counted the commits for the last two years and for the two years before that period. It turned out that it's pretty much a downward strength, so Hamag essentially is that technology. Giraffe has been abandoned by most of his developers. GraphX is losing momentum, and the only one that is more or less active is Flink's Jelly, but overall it's pretty much a downward strength, unfortunately. A couple of years ago, there was another technology here, which is called the Arabesque Distributed Graph Mining Framework. According to his definition, it does open source graph analytics over the Hadoop system, and its frequent subgraph mining is essentially very similar to our workloads. So this could have been a very good fit, but unfortunately this is also getting abandoned. So even though there are papers and repositories and presentations on it, it doesn't seem to be actively developed. And at this point, we were thinking, well, hang on a minute, what's so difficult about graph computations? And a bit of reading reveals that graph computation is inherently a lot more difficult than any of the relational queries and relational analytics that are performed by these popular data processing framework like Spark DataFrames, because graphs suffer from what's called the curse of connectedness. This means that everything is so densely connected that it's very difficult to parallelize the algorithms, very difficult to do efficient caching, and in general very difficult to extract a high computational value from the computer. The reason behind might be that contemporary computer architectures are more suited towards hierarchical data, think trees, lists, stacks, and this works pretty well for relational databases, but it's not very well suited for graph algorithms. One approach that tries to overcome this is to define programming models. The vertex-centric programming model, or also known as the think-like-vertex programming model, is a popular approach to try to describe graph algorithms in a higher level of abstraction and then translate them to an underlying engine. And the majority of distributed engines use this, but we were thinking that for such a small dataset, we should be able to do this on a single machine with preferably a couple of lines of code, so we investigated a bit further. And this is how we encountered the linear algebra-based definition of graph computations. So the idea, I think, is well known to most of you here. If you have a graph, you can trivially transform it to an adjacency matrix between two edges. So you take a matrix that's a square matrix of n, where n is the number of nodes, and if there is an edge between two nodes, you put a one in that cell, and if there isn't an edge, you put a zero. So this is a trivial idea, and it's also very simple to adapt this to typed graphs, because you only have to slice the matrix and get sub-matrices for each edge type. The key idea here is that if you take a matrix such as this, you can do matrix multiplications, and those will enumerate the various length paths. So if you do one matrix multiplication, you will get the two-hop path. If you do two multiplications, you will get the three-hop path, and so on. So this is one of the first optimizations that we realized. We tried to adapt this to the untyped case, which turned out to be fairly simple. We just took A times A times A, took the diagonal elements of the third matrix, because essentially, if you have three-hop paths that close into their beginning node, you have a triangle. So this is how we enumerated the triangles, and it turned out to be fairly straightforward to adapt this idea to the typed case. So we just did a multiplication between one type and the other, and the first type again, took the diagonal elements, and we got the number of triangles in each node. The number of edges part is easy, so this took care of the more difficult parts. Unfortunately, it isn't that easy, because it turns out that matrices get very dense. So if you start enumerating all the paths in a matrix, it gets very dense very soon. So one of the three real optimizations that we could apply is to stop when at enumerating two-length paths, and then try to close them into a triangle without actually enumerating all of the three-length paths in the matrix. So the idea here is that instead of just doing A times A, we used A times A, the element-wise multiplication A, and then we summed the rows. This can be actually adapted with a bit of tinkering to the typed case, and this turns out to be still much of a challenge, because for the typed case, we had to calculate these expressions for all typed pairs. I had a master's student who worked on this during last year, and in her master's thesis, we have a detailed description of all the derivation rules, and we defined these two optimization steps. The first is the element-wise multiplication, and the second one is the notion that even though we have to do a quadratic number of matrix multiplications, this is an embarrassingly parallel problem, because we can just run these on a different CPU course, and there is no need to use a shared and mutable representation. So this is pretty easy to parallelize. In practice, it's quite straightforward to sort of represent. We do A times A, element-wise multiplication by the other matrix, and now it's pretty easy to see that this is a more sparse matrix. There are only a few non-zero elements in this matrix, and then we multiply it with a vector of ones, which is a shorthand for doing the rule-wise summarization of the matrix, and then we're done with it. So this much for the theory part. We don't thought that implementing this in Java will be trivial. We just go online, grab one of the Java libraries, and it will implement it in a few hours. It turned out that it's not that simple, because most Java libraries are geared towards dense matrices and dense linear algebra, and very few actually support sparse matrices. So I went on the software recommendations stack exchange, and this is my question that started its life in early August, and then it got a number of edits, some upvotes, and then I ended answering it for myself. And basically the answer is that the only Java library that can be used for sparse linear algebra is called EJML, which is an apt name, because it's the efficient Java matrix library. This is still actively maintained, and we found that this is the one that can actually do the computations for our relatively slow 2 million node graph. These are some of the benchmark results that we have obtained. The red one is our original edge list representation. As you can see, it starts promising for smaller scale. These are samples of the Paradise Papers dataset, so we scaled it down to 5,000, 10,000 nodes, and so on. And for the small scale, it was all fine, but if we started to go a bit larger, then all tools kept breaking with the exception of EJML. So this was the only one that worked for the whole 2 million node Paradise Papers dataset, and it actually provided decent performance, so it was less than a minute to load and calculate these type clustering coefficients. Now remember, this was a calculation that didn't complete in multiple days when we started this work, so this was actually four or five orders of magnitudes in improvements. We have released the so-called graph analyzer library, which is our linear algebra based implementations of a number of multiplex graph metrics. It uses EJML with a compressed representation for storing the sparse matrices. Unfortunately, it's single threaded for most metrics, but it uses some parallelism if there are multiple types. And you can just plug it in, and it can work on top of a Neo4j instance, or it can work on top of the Eclipse modeling framework that defines engineering models, and it also works for regular CSV files. The unique feature of this library is not its performance, but that it supports for a number of multiplex graph metrics. There are metrics that are defined for certain nodes, for certain types, node pairs, node type pairs, type pairs, and so on. So this is quite good coverage of metrics that we could get from the last 10 years of literature in network science. Okay, so obviously we had troubles with the Java implementation, and while looking for the library that could work in Java for sparse matrices, we stumbled upon a new language called Julia. So this is actually a very recent development. The version 1.0 stable was released last August, and version 1.1 is just out this year. The idea of Julia is to solve the two language problems. So traditionally, in high-performance computing, people started implementing algorithms in a productivity language, like Python or R. And then once they get the algorithm right, they rewrote it in C or C++ or some low-level code. And the promise of Julia is to be a single language that provides both high performance and a high level of abstraction. And it's also a dynamic language, so it's sort of similar to MATLAB or even Fortranesque if you have used those sorts of languages. And we managed to write an implementation for our TCC problem in a few days, which included learning the Julia language and all its scaffoldings. And it was actually 25 lines in total, and it's pretty easy to comprehend and easy to update. So this is something that we found really interesting. We could just rewrite in MATLAB slash octave syntax the code, and its performance was comparable to the best Java implementations, but it was easier to read, easier to write, and probably easier to extend. Okay, and the third implementation is something called GraphBless. Now, GraphBless isn't actually an implementation. GraphBless is an effort to define standard building blocks for graph algorithms in the language of linear algebra. So the idea comes from the BLAST system, which is about 40 years old, and it's the abbreviation of basic linear algebra sub-programs. The idea there was that we have a lot of different hardware, and BLAST acts upon like an interface between those hardware components and the system components. So it acts as a separation of concerns between the numerical applications that need to do some heavy number crunching and the hardware that will perform the evaluation. And basically GraphBless is the same idea rehashed for graphs. So we have graph analytical applications, those implement graph algorithms that use this common API, and you can have all the hardware vendors try to optimize their stuff to suit this API as well as possible. And, you know, things have changed since 1979. So now we have various Xeon files, we have GPUs, we have FPGAs. So this is a very interesting initiative to try to reconcile all those heterogeneous hardware components under a single API and then use those to perform high performance graph analytics. One of the key ideas of GraphBless is to extend the notion of a semi-ring. So it has been observed that if you take a semi-ring with a multiplication and an addition operation, and you redefine those operations, it's very easy to capture a couple of graph algorithms. This is actually another old idea, so it has been described by the Aho Hopcroft-Urman book from 1974, and it was also described in the algorithm books that most of you have probably read in the introduction to algorithms CLR book. Interestingly, it's only in the first edition because they decided to remove it, but the idea is very simple. The idea is that we take adjacency matrices and we redefine these operators over the semi-ring, and it turns out that it's very easy to translate one algorithm from each family of algorithms to this sort of notion. So if you think like Floyd Warsaw algorithm that's somewhere here along these lines, or if you think of single-source shortest path or BFS, those all can be adapted to this notion. The problem is that even though the idea is old, very few libraries support this. So there is no library in Java that I am aware of that actually allows the users to redefine these operators, and even in other languages C or C++, if you just take a BLAS implementation, it will not support this idea, and it will only work for real numbers, the sort of classical semi-ring that won't cut it for paths and traversals. If you're looking for implementation that does work, there is a suit called Suitsparse GraphBLAS. This offers a C API and a single-threaded implementation. It was developed by Timothy Davis in Texas, and it was used in the Redis Graph systems. So this is actually the implementation that underlines the Redis Graph system. The trouble with this is that even though it's very well designed and it has deep theoretical roots, it has a rather steep learning curve. So as of today, I cannot show you any benchmark results that are reasonably well written and reasonably well benchmarked. We will publish those results once we get the results correct and get a few runs. Okay, so even though I couldn't show you benchmark results for GraphBLAS, I can show you the results on the Paradise Papers. We actually calculated multiple type coefficient metrics. This is TCC1 and TCC2 that look for different wedges and different triangles. It shows that there are some outliers. So there are some nodes in this offshore leak dataset that actually are very clustered according to some types. This is something that is worth investigating. The trouble is that we don't have the domain-specific expertise. So if you do, just please talk to us and reach out because it would be really cool to discover these outliers further. Okay, and I said that there isn't just a systems problem here. There is an algorithmic or theoretical problem when doing graph analytics and one of these problems is skew. Now, this has been recognized in relational databases about five years ago in a Sigma Dracors 2013 paper that says that if you use binary joins for evaluating a number of queries, those queries can be inevitably suboptimal. This is true for cyclic queries and unfortunately, if you're looking for a triangle, that's a cyclic query. So here is an interesting example. We have three sets of nodes and we have one designated node in each group. The groups don't have any edges, but the designated node is connected to all the nodes in the other groups and the other nodes, so the black ones, are only connected to the designated node. So this is like a weird graph and it turns out that if you try to formulate r join s join t, so the join of these three edges in any order, it will always be suboptimal and it will always require quadratic time. The reason for this is that you have to enumerate all of these wedges that we have talked about. So you enumerate a number of wedges here that will not close into a triangle, another number of wedges there and the third number of wedges there and none of these will close into a triangle. So this is actually a pretty deep computer science problem as it turns out. And initially, I thought that maybe matrices can resolve this problem without much thinking, but it doesn't turns out to be the case. So the case is that if we map these two matrices and we do a matrix multiplication, what happens is that we will get this very dense sub matrix. So if we do r times s, which is the same as a binary join, we will get a quadratic number of wedges and it will obvious to take quadratic time. If we apply t, so if we continue with the multiplications, this will eventually cancel out the invalid wedges that do not close into a triangle, but this is already too late. So we already enumerated a lot of wedges and we have burned the number of CPU cycles. So one of the optimizations that could be used here is use t, the green matrix as a mask for the multiplication. And it turns out that scientists in database research have found a solution to this problem as well. It's called the worst case optimal join algorithm family. This can calculate these multivay joints, which are like ternary or even higher order joints in n over 1.5. So there is hope and there are algorithms, but they are very difficult to adapt to practical applications. Of course, you might be wondering whether this occurs in practice. Well, not to this extreme as in the example, but due to the power load distribution of scale-free real networks, it's actually more common than one would imagine. And GraphBlast offers mask multiplication operators, but I don't think there are any other libraries that do. So even in the more advanced libraries like Julia, there is just no way to do mask multiplication, but you have to write your own custom matrix multiplication operation. Okay, so a couple of benchmark results for the regular graph analytics. This is LDBC's Grapholitics benchmark, and it works on a synthetic social network graph, which is similar to what Facebook have published about their distributions. It's sort of a large midsize graph, four million nodes, and it's pretty dense. And the interesting thing that we have found is that basically, SCC is one of the more difficult graph metrics. So this is a paper that was published before I joined the Grapholitics Working Group. And in this paper, they realized that SCC is actually two or three orders of magnitude slower than metrics such as page rank or single source shortest path, which is really interesting because those are the ones that should be more difficult. And if you observe for systems that have a higher baseline, so for Giraffe and GraphX, which are already pretty slow for page rank and single source shortest path, they actually just fail to finish and time out. Okay, so I wrap up soon. A couple of takeaways is that graph processing is hard. So you need to use sparse matrices, you need to use edge types. It's desirable if you can override the multiplication and addition operators. Of course, we would like to run it in parallel and we would like if it wouldn't crash on skewed distributions. I don't think there are off-the-shelf solutions, but I've gathered a couple of building blocks that you could use for C, C++, Java, and Julia. And it turns out that for Python, there is already a wrapper for GraphPlus. So this is all food for thought and tools for experimentation. There are a number of papers. It turns out that last year, people started to do some distributed and linear algebra-based graph analytical framework. So this is, I think, a good step into creating scalable graph analytics. And basically, based on our experiments, if you use Java, just use EJML. If you have the time to learn GraphPlus, then that's a very good investment of your time. And Julia is promising, but has no specific graph support yet. And one confession to the end is that I believe that some Java libraries could have actually worked for Paradise Papers, but we got too carried away with the linear algebraic wizardry. I think the Arabesque library and Flink Jelly and GPS, the graph processing system, could work for a dataset with the scale of the Paradise Papers. As you can see, none of those were included in this benchmark. So they could probably work for something like the Paradise Papers dataset. It would be very interesting to see how they perform in practice. Thank you for your attention. And if you have any questions, we have like four minutes for them. Yes. Okay, go ahead. To me, yes, thank you. Thank you very much for the talk. I would just be provocative because it's easier, sorry for that. Okay. I was just, I'm an engineer and for me, when you say sparse metrics, what I think is just behind is just about dealing with the list of nodes and the list of edges. Okay. If you do math, which I do not so much, your formalism, you're right in terms of matrices, which is fine. But then actually thinking that matrices that are a good idea for computation is kind of weird. It's like taking me very seriously a very different practice, which is the theoretical practice. Yep. How the computer works, which is not like that. And considering that the most efficient that I know algorithm to count triangles, the accumulation of what is actually expressed in terms of the links and edges, not alone in terms of matrices, what is the method to do that even? Well, it's sort of, yeah. So, the question was whether or not matrices are a good idea because there are specialized algorithms for problems such as triangle counting. It's sort of like the common idea of an intermediate language in computer science. So, it's more optimal than someone would write in from scratch. So, let's take our use case. If you only have a couple of days to implement the metric and you don't want to do detailed algorithm design, just use those building blocks and invoke a couple of graphblast API calls or some matrix multiplication creations in, say, Julia, then I think this is a good balance. So, this tries to strike a balance between expressivity and performance. And I think it's a good step because of the hardware area is getting so heterogeneous. Because even if you have a very good edge list implementation, you will not be able to deploy it to a GPU or an FPGA or something that's a specialized piece of hardware. Okay, one more question? Yeah, a geograph organization. Okay. And this can see the implementation of graphs and not the operations themselves. And this is what I think when we do it first, we consider the interface of what the graph is for most people. And then the implementation is up to them or we have some basic ones. If you always use graphblast, for example, you're always going to have the same structure of sparse matrices. So, have you planned to make an interface which would be common to both sparse matrices implementation and dense and or a distance? I have a quote from Sam Halliday who implemented one of the sparse and dense matrix libraries. And Sam said there is actually no such thing as a sparse matrix because the number of matrices that you find in the wide are so big, the number of different types, that it's always going to be a custom solution for a given sparse matrix. So I have a quote to say that you are right. It's probably if you have a power low graph or you have a mesh graph, you will need the different algorithms, this different algorithm if you want to extract the last ounce of performance from your hardware. And I think this is an open problem. So probably what we should do is create various sparse matrix representations and optimize various operators according to the distributions. And that's probably closer to the optimum than the current approach. Okay, thank you again.