wont go fullscreen

hi so I accidentally pressed a new display mode and the fullscreen went off, but this is very annoying because now most things are blocked because of my apps.
I tried to search in settings but nothing worked and I also checked in Yaagl itself but I also didnt find anything...
can anyone please help this is really really annoying to deal with

nevermind I found a solution


VLAD_ZTE.toml

Please add VLAD_ZTE as genesis validator

Merged in favour of https://github.com/anoma/namada-testnets/pull/668


Ability to choose mode per setting category

I have a few sites that are fairly slow for Midnight Lizard to process, however they look awful in Simplistic and Filter mode.
I was thinking about it and I don't need Midnight lizard processing certain things on these pages in Complex mode.
I don't need Text, Background, Border or Scroll bar to be processed at all in complex mode simplistic mode would work perfectly, however I need Buttons and Links to be processed in complex otherwise it looks horrible.
It would be nice to be able to set processing mode per-setting category to help with performance as some sites don't need Background, Text, Links, Buttons, Borders and Scrollbars all to be in complex mode but might need a few of them to be in complex mode.
If this would be possible I'd really appreciate it.

It is actually an interesting idea.
In simplified mode I use the same new color for all elements despite their original colors.
If I ignore all the different text and border colors for example and just use the same color then I might not need to process that many elements after all. There is already an option to "Replace all" hues but by replacing a whole color will be even faster.
So it looks possible to use Complex mode as a basis and downgrade some capabilities to Simplified but not he other way around and Filter mode does not look like being possible to mix with.

It is actually an interesting idea.
In simplified mode I use the same new color for all elements despite their original colors.
If I ignore all the different text and border colors for example and just use the same color then I might not need to process that many elements after all. There is already an option to "Replace all" hues but by replacing a whole color will be even faster.
So it looks possible to use Complex mode as a basis and downgrade some capabilities to Simplified but not he other way around and Filter mode does not look like being possible to mix with.


Ergo/ergoc version mismatch?

As reported here: https://medium.com/the-blawqchain-project/installing-ergo-c78a5148311c

$ npm install -g @accordproject/ergo-cli
+<EMAIL_ADDRESS>added 146 packages from 168 contributors and updated 3 packages in 11.11s
$ ergo --version
2:35:00 PM - info: Logging initialized. 2018-07-18T18:35:00.934Z
0.1.2
$ ergoc --version
2:35:02 PM - info: Logging initialized. 2018-07-18T18:35:02.796Z
Ergo compiler version 0.1.1


Package request: Dungeondraft

Project description
A TTRPG dungeon building tool, made to work alongside Wonderdraft
Metadata

homepage URL: https://dungeondraft.net/
source URL:
license: Unfree
platforms: Windows, MacOS, Linux (deb)

Add a :+1: reaction to issues you find important.

#253034

Updated #253034 to the latest version of dungeondraft. Appears to be working for me so far. The PR only supports Linux for now though, as that's the only machine I have access to.


Fix jshint preloader

The test and exclude properties had the wrong syntax; they needed to be RegExps not strings.

@Shraymonks thank you!


Queueing messages, instead of saving only the most recent one

Any plans to support storing the sequence of messages in the order they were posted, so if an extension posts many of them while the app is away then they all can be received on the next launch?
If you have no plans to do this, then do you have any suggestions for me while implementing that myself in a way that you'd accept in a pull request? Should I add separate methods queueMessageObject:identifier: queuedMessageWithIdentifier:? Or, what I'm preferring, should there be boolean property that can be turned on for a MWWormhole which changes the semantics of the existing methods?
Regarding those semantics, presumably messageWithIdentifier: would remove the oldest message passed to the wormhole and return it, or return nil if none, so that it can be called repeatedly to get all of them.
The listener block would be called upon notification as before, passing in the message, which gets automatically removed from the queue. But if the other side hasn't pulled out all the preceding messages yet, then this message will be received out of order. I'm thinking that the listener should have the option of making explicit calls to messageWithIdentifier: to catch any that its missed, where the passed-in object would presumably be at the end of those results. (I'm considering the case where the app polls for stored messages on launch then sets up the listener afterwards, and how to ensure any messages sent during that gap are received in order). Its seems that the notification code that calls the listener needs to initially leave its message in the queue, then be wary of it possibly getting removed "behind its back" once the listener returns.
At the moment, I'm not sure what would be expected if once side turns on queueing and the other doesn't, but I'm sure some reasonable behavior can be chosen.
Lastly, I was originally wanting to add support for this just by subclassing MWWormhole, but I believe there's no way to make that work well. If you think I'm wrong about that please let me know.

I can definitely see the use for something like this, but I'll be honest...I'm skeptical of adding it to the core library. Not opposed, just skeptical.
The first question I'd like to have answered is: how would you envision storing the enqueued messages in a specific order on the file system inside the app group? One of the things I love about MMWormhole is how simple the scheme is. Just a single file, with a specific name, written and read using NSKeyedArchiver. Building a queueing system makes that a lot more complex.
If we do decide to add something like this, I would actually want it to be a completely separate interface and NOT use the main messageWithIdentifier/listenerBlock interface. One of the reasons is that there can be issues if you are updating the UI on the watch app from a listener block and that ends up being called multiple times in succession. That may be unexpected behavior for some people and cause them problems.
Subclassing actually seems like the best way to go about this...if we can find a way to do it. Let me think about that a little bit. What are your thoughts on storage?

Instead of a file with name equal to the identifier, I was thinking about a directory with the name of the identifier, with numbered files inside. Passing a message involves first getting the list of files within the directory and scanning it to find the largest number, incrementing that and writing file with that name. Receiving a message is similar, except it finds the lowest number and reads that file.
Implementing this in a subclass probably involves exposing some MMWormhole internals, but that could be done in a MMWormhole-private.h header and leave MMWormhole.h as-is.
I was trying to say that messageWithIdentifier/listenerBlock would work as normal by default, but after setting a queueMessages property to YES then it would change their behaviour. But I think I'd agree that a subclass would be preferable.

I've been following this thread and thought the idea was overkill until literally today when I found I could use something very much like this.  I can get by using a series of file to do what I need since the ordering isn't critical, but I'd be interested to see some kind of implementation of this as a subclass or however everyone sees fit.

Pushed my untested fork to github https://github.com/jpmhouston/MMWormhole in case anyone is interested. I'm probably not going to work on this much in the next little while, since I'm no longer going to be using this in my app.
Anyone who works on this to test it and contribute any fixes, please contact me<EMAIL_ADDRESS>and I'll give you write access, or feel free to cherry-pick a patch of my commit into your own fork. (Please don't do a fork of this fork)

I like the idea with a folder named for the identifier with numbered messages inside of it.
Another question I have is what would the expected behavior be for clearing the queue? Would accessing and reading the messages from the queue automatically clear them, or would you be expected to call clearMessageForIdentifier to clear the queue?

The way I was writing that subclass, reading the messages would clear them. Also, following a call to the listener all preceding messages are cleared too, otherwise I felt it was too easy to write code that inadvertently handled messages out of order. See my additions to the readme for an example.
That's what I intended anyway. I haven't yet gotten a chance to run any tests on it at all.

@jpmhouston I looked at your fork and the readme addition that you added, and had some thoughts.
While you and @cnstoll were discussing the usage of it, I was still thinking about the mailbox analogy, where you can deliver multiple things to a particular mailbox and pick up things from the mailbox.
Sending:
In real life, you can keep sending stuff to a mailbox. You don't know if it's been received or not. I think your API for passMessageObject to the same identifier matches my expectations. No changes needed IMO.
Retrieving stuff already there:
This is where I think the API could be improved.
The proposed way is to keep checking until it's empty (messageWithIdentifier over and over). And every time you check, it's a new thing inside of it, until it's empty. If you think about that scenario happening in real life, it's kinda weird IMO.
 There could be a stack of different things in there. You check once, and you take everything out.
Maybe messageWithIdentifier should be something like messageCollectionWithIdentifier. And it's an array that you can loop through, and maybe it's stamped with when it was sent.
Listening for messages
In the listen scenario, going back to "real life" again: you can sit outside of the mailbox and wait for the mail man to come with packages. It has nothing to do with the stuff that's already in the mailbox. Maybe it should be that way for this too? Another question is whether it goes into the mailbox or if you "intercept it", and it doesn't go in there.
All together
[self.queuedWormhole passMessageObject:@(1) identifier:@"test"];
[self.queuedWormhole passMessageObject:@(2) identifier:@"test"];
[self.queuedWormhole listenForMessageWithIdentifier:@"test" listener:^(id messageObject) { NSLog(@"%@", messageObject); }];
[self.queuedWormhole passMessageObject:@(3) identifier:@"test"]; // lister logs: 3, nothing happened to the messages already there
messageObject = [self.queuedWormhole messageCollectionWithIdentifier:@"test"]; // [1, 2], or [1, 2, 3] ?
[self.queuedWormhole stopListeningForMessageWithIdentifier:@"test"];

FYI: I'm thinking about a solution like this for analytics. Tracking the activity in extensions and sticking it in a queue, and then sending the data when the iPhone app starts up.

Somewhat finished my fork (after all). Tested with XCTest cases I wrote, but not with either extension yet. @burin nice idea, to be able to receive all the queued messages in one go, however I didn't see your post soon enough to influence what I did.
I simplified my plan so that the listener block doesn't have to iterate over manual calls to messageWithIdentifier, instead MMQueuedWormhole just calls the block repeatedly for each undelivered message up to the one from the notification. I think this fits best with @cnstoll's original API.
[self.queuedWormhole passMessageObject:@(1) identifier:@"test"];
[self.queuedWormhole passMessageObject:@(2) identifier:@"test"];
[self.queuedWormhole listenForMessageWithIdentifier:@"test" listener:^(id messageObject) {...}]; // called with message 1, then 2
[self.queuedWormhole passMessageObject:@(3) identifier:@"test"]; // lister block called with message 3
id messageObject = [self.queuedWormhole messageWithIdentifier:@"test"]; // nil
[self.queuedWormhole stopListeningForMessageWithIdentifier:@"test"];

When originally using this with an actual extension, I saw how an outstanding Darwin Notification gets delivered to the callback upon my (main) app returning to the foreground. I haven't yet seen anything documenting the exact behavior - whether this is guaranteed, and perhaps only the most recent notification is delivered. The scheme I settled on for the listener should work best if those are both true.
Note that if the most recent notification isn't guaranteed to be delivered when the app returns to the foreground, then there's nothing to make the listener fire, and it won't catch up until the next message is passed. If someone who is actively working on an extension would like to test this, I'd appreciate it.
@cnstoll - sorry for commondeering your project's issues for discussions of my fork. Let me know if you think this effort should end in a pull request, or should instead be packaged as its own pod that has a dependency on yours, or what. Please feel free to close this issue and direct any further conversations to https://github.com/jpmhouston/MMWormhole/issues.

I found this discussion after I had already begun implementing my own solution, which uses MMWormhole. (KTKPinhole) I'm leaving this note for future reference to anyone that needs message queueing and order preservation.

@burin I indeed see the benefits of returning all queued messages in an array. For example, if the messages affect the app's UI, then its easy to batch apply all the messages and update the UI only once.
I added to MMQueuedWormhole the methods messagesWithIdentifier:, listenForMessagesWithIdentifier:listener:, and stopListeningForMessagesWithIdentifier: that do this. Note plural "messages" instead of "message" (is this too subtle? I might still change).
Also, tested somewhat and I now believe its ready for use. I created release 1.2-jpmh-beta.1 in my fork https://github.com/jpmhouston/MMWormhole. Any issues with it should be posted there instead of here.
I expect this to be my last post to this issue. @cnstoll if you are happy with this state of affairs, with the feature left to be implemented by my fork (plus KTKPinhole by @kellytk), then I'd suggest closing it.

I'm going to go ahead and close this thread. I really appreciate you guys taking the time to create a subclass that implements this behavior.
I wanted to also let you know that I started a PR for adding support for first class subclassing of MMWormhole's message passing implementation that I believe could be used for implementing this a little more cleanly in the future. If you have any thoughts or want to comment on that, the link is here below.
https://github.com/mutualmobile/MMWormhole/pull/40
Thanks,

Conrad


[pytorch] Use 1.8.1 release version of pytorch native

Description
Brief description of what this PR is about

If this change is a backward incompatible change, why must this change be made?
Interesting edge cases to note here

Codecov Report

Merging #869 (47824a9) into master (25a56af) will decrease coverage by 0.03%.
The diff coverage is n/a.

@@             Coverage Diff              @@
##             master     #869      +/-   ##
============================================
- Coverage     70.16%   70.13%   -0.04%
+ Complexity     5059     5057       -2
============================================
  Files           501      501
  Lines         22403    22403
  Branches       2324     2324
============================================
- Hits          15720    15712       -8
- Misses         5440     5455      +15
+ Partials       1243     1236       -7

Impacted Files
Coverage Δ
Complexity Δ

...gine/src/main/java/ai/djl/dlr/engine/DlrModel.java
53.12% <0.00%> (-3.13%)
4.00% <0.00%> (ø%)

api/src/main/java/ai/djl/inference/Predictor.java
87.50% <0.00%> (-2.89%)
23.00% <0.00%> (-1.00%)

api/src/main/java/ai/djl/util/Platform.java
46.51% <0.00%> (-2.33%)
8.00% <0.00%> (ø%)

...g/src/main/java/ai/djl/serving/util/Connector.java
55.40% <0.00%> (-1.36%)
21.00% <0.00%> (ø%)

...ngine/src/main/java/ai/djl/mxnet/jna/LibUtils.java
44.73% <0.00%> (-1.32%)
15.00% <0.00%> (ø%)

...ne/src/main/java/ai/djl/mxnet/jna/StringArray.java
92.85% <0.00%> (ø)
9.00% <0.00%> (-1.00%)

...rc/main/java/ai/djl/paddlepaddle/jni/LibUtils.java
51.14% <0.00%> (ø)
14.00% <0.00%> (ø%)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 25a56af...47824a9. Read the comment docs.


feat: Update deploy.yml to push site live

🙏

@vpicone yea I can create another PR to cleanup the extra manifest files.


After initial program use (creation of Launchbuddy.bin) subsequent launches of multiple GW2.exe instances are killed, past the first instance

The first time the program runs or I delete Launchbuddy.bin I can start up as many accounts as I would like using autolaunch. If close all the executable and launch LB then try and launch multiple accounts just as I had before, I see that the first instance of GW2 that is launched is correctly opened and stays open but all subsequent GW2 instances are open and then quickly are killed (you can easily observe this in procExplorer.)
In the code you will see that the executable starts and the return code come back 'true' but then the instance is killed. I rarely debug on windows so I will need to figure out who is killing the instance but I am suspecting it has something to do with this code and whatever mutex is trying to be "killed." I have only just looked at the code for the first time so I need to track down what mutex is being targeted, what resources it is protecting and how that is intended to allow multiple instances of gw2 to run seeing as I would expect any mutex to protect shared resources ... resources which would be inherently prohibitive to running more than one instance at the same time, in the first place ... the point being is that I am wondering why the mutex exists in the first place and if its intent was just more than just not allowing multiple gw2 instances at the same time then where is LB providing the duplication of resources such that each gw2 instance has it's own set of resources/handles/objects/etc (is the issue Local.dat?) I am currently making quite a few assumptions due to the typical use case for a mutex but once I read through the code I will update this report unless someone can shine some light on this issue and save me the time.

So I found out a little more but I need to put this down for the time being ... it does appear that ultimately local.dat being what the mutex would be protecting though I am unsure as to how killing the mutex, in general, would allow more than one instance of gw2 to run CORRECTLY at a time w/o duplicating local.dat but I am only saying this as I do not know what local.dat is storing (data, settings, etc.) for which multiple instances of gw2 would cause an issue if using the same information in this single local.dat file.
What is happening is that in HandleManager::KillHandle() when the handles are being obtained for this  (which would be our current process, LB) we get back a list of handles of size 0:
List<SYSTEM_HANDLE_INFORMATION> processHandles = GetHandles(targetProcess, pSysHandles);
We repeatedly call KillHandle() ten times but each time, given the process we pass in (this) we continue to get back a handle info list of size 0 and in turn we do not get to a point where we can match the handle name we are looking for ("AN-Mutex-Window-Guild Wars 2") and then close the handle by calling CloseHandleEx() on it.
I would hazard a guess that permission issues when launching the next instance of GW2 due to the mutex still existing are causing all subsequent instances of GW2 to be shut down due to some threading/permission exceptions.
I am not a windows person so this is not quick for me. What is strange to me is that I cannot delete Launchbuddy.bin and get this to work again, so that was a red herring.

Looked at it more just to check that we actually had the correct PID for the current instance of GW2-64.exe (to which the mutex would belong) and sure enough the PID is correct but it is not found in the list of PIDs iterated over so in turn, this code is never hit and we never add to the list of handles belonging to GW2-64.exe's process:
            `if` (currentHandleInfo.OwnerPID == (UInt32)targetProcess.Id)
            {
                processHandles.Add(currentHandleInfo);
            }`

I am now questioning the offset address calculated for each type SYSTEM_HANDLE_INFORMATION ... why is this defined as a struct type in LB and not some system defined type, it seems rather important if this is the typical method for looking at system handle data and looping over it so again, is this common to define the struct type yourself? Is this type some known memory layout to which I am not privy as, again, I don't do windows?

For the hell of it, I rebooted my machine and started LB in the debugger per usual and on attempt 1/10 for each instance, the handles were found for the process and the mutex killed.
Now I am trying to get my machine back in the state it was previously when I start to fail. It appears time/normal use will eventually get me back into this state where the PID does not have any matching handles associated with it. There is something wonky going on with the global list of handles that we generate ... which seems to start to fail the longer windows is running ... just an hunch until I get LB to start failing again.


Tag and release

Please create a new tag and do a new release from that tag.
The maven-release-plugin is perfect for handling releases together with mavent-gpg-plugin with the useAgent setting.
Thanks shaping up the Java crypto space = )

thanks. I'll try this out on the next release.


Fatal Error while initialization:  uiExports.app.injectVars has been removed. Use server.injectUiAppVars('sentinl', () => { ... })

Sentinl and Kibana version
Version of Sentinl: 6.2.4
Kibana version: 6.3.0

Issue description
While initialization of the plugin (use it first time) i got the following error:
kibana[31849]: FATAL Error: [plugin:sentinl] uiExports.app.injectVars has been removed. Use server.injectUiAppVars('sentinl', () => { ... })
kibana[31849]: at applySpecDefaults (/usr/share/kibana/src/ui/ui_exports/ui_export_types/ui_apps.js:31:11)
kibana[31849]: at /usr/share/kibana/src/ui/ui_exports/ui_export_types/modify_reduce/map_spec.js:14:95
kibana[31849]: at /usr/share/kibana/src/ui/ui_exports/ui_export_types/modify_reduce/alias.js:13:83
kibana[31849]: at specs.reduce (/usr/share/kibana/src/plugin_discovery/plugin_exports/reduce_export_specs.js:31:42)
kibana[31849]: at Array.reduce ()
kibana[31849]: at types.reduce (/usr/share/kibana/src/plugin_discovery/plugin_exports/reduce_export_specs.js:31:20)
kibana[31849]: at Array.reduce ()
kibana[31849]: at pluginSpecs.reduce (/usr/share/kibana/src/plugin_discovery/plugin_exports/reduce_export_specs.js:20:18)
kibana[31849]: at Array.reduce ()
kibana[31849]: at reduceExportSpecs (/usr/share/kibana/src/plugin_discovery/plugin_exports/reduce_export_specs.js:16:22)
kibana[31849]: at collectUiExports (/usr/share/kibana/src/ui/ui_exports/collect_ui_exports.js:19:50)
kibana[31849]: at KbnServer.uiExportsMixin (/usr/share/kibana/src/ui/ui_exports/ui_exports_mixin.js:11:66)
kibana[31849]: at KbnServer.mixin (/usr/share/kibana/src/server/kbn_server.js:136:16)
kibana[31849]: at KbnServer.uiMixin (/usr/share/kibana/src/ui/ui_mixin.js:27:19)
kibana[31849]: at KbnServer.mixin (/usr/share/kibana/src/server/kbn_server.js:136:16)
kibana[31849]: at
systemd[1]: kibana.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Unit kibana.service entered failed state.
systemd[1]: kibana.service failed.

Reproducing the issue step-by-step
To reproduce this issue you must create a offline-package of this plugin on a staging server and tar it. After this you put it into your kibana-plugins directory and untar it, after this, starting kibana in version 6.3.0 and you will see the error.

@RobOrville we haven't done 6.3.0 release yet. Coming soon.

Closing. Watch out for official 6.3.0 in the coming weeks


Adjust provider versions - set kubernetes version default as the latest version in stable channel

This PR:
Set Google provider version wider gap
Set GKE version as latest release in the stable channel

LGTM

:+1:  LGTM


Updated Afrikaans translations in comments.json and portal.json

[x] There's a clear use-case for this code change, explained below
[x] Commit message has a short title & references relevant issues
[x] The build will pass (run yarn test:all and yarn lint)

We appreciate your contribution!

🤖 Generated by Copilot at de70464
This pull request adds Afrikaans translations for some user-facing messages in the portal.json and comments.json files. These changes aim to support Afrikaans as a language option for Ghost blogs and their readers.

I closed this because new strings were added in the meantime through this new commit: https://github.com/TryGhost/Ghost/commit/e9703f6a1581f0e1c402ee13cba0381bececb36c
So my PR isn't valid anymore.


"Failed to resolve IRuntimeEnvironment" with ASP .NET 5 beta7 when published with no-source and run in service

Originally posted at https://github.com/aspnet/dnx/issues/2944, but was directed to post here instead. Same error as in https://github.com/aspnet/dnx/issues/2898, but I'm using Kestrel, and don't seem to be able to try the suggested workaround.
Source: Microsoft.Dnx.Compilation.CSharp.Common
Message: Failed to resolve IRuntimeEnvironment
Type: System.InvalidOperationException
HResult: -2146233079
StackTrace:    at Microsoft.Dnx.Runtime.RuntimeEnvironmentHelper.GetRuntimeEnvironment()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at Microsoft.Dnx.Runtime.RuntimeEnvironmentHelper.<>c.<.cctor>b__10_0()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at Microsoft.Dnx.Compilation.CSharp.CompilerOptionsExtensions.ToCompilationSettings(ICompilerOptions compilerOptions, FrameworkName targetFramework)
   at Microsoft.AspNet.Mvc.Razor.Compilation.RoslynCompilationService.Compile(RelativeFileInfo fileInfo, String compilationContent)
   at Microsoft.AspNet.Mvc.Razor.Compilation.CompilerCache.GetOrAdd(String relativePath, Func`2 compile)
   at Microsoft.AspNet.Mvc.Razor.VirtualPathRazorPageFactory.CreateInstance(String relativePath)
   at Microsoft.AspNet.Mvc.Razor.RazorViewEngine.LocatePageFromViewLocations(ActionContext context, String pageName, Boolean isPartial)
   at Microsoft.AspNet.Mvc.Razor.RazorViewEngine.FindView(ActionContext context, String viewName)
   at Microsoft.AspNet.Mvc.Rendering.CompositeViewEngine.FindView(ActionContext context, String viewName, Boolean partial)
   at Microsoft.AspNet.Mvc.ViewResult.<ExecuteResultAsync>d__24.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.Core.FilterActionInvoker.<InvokeResultAsync>d__53.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.Core.FilterActionInvoker.<InvokeResultFilterAsync>d__52.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNet.Mvc.Core.FilterActionInvoker.<InvokeAllResultFiltersAsync>d__51.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.Core.FilterActionInvoker.<InvokeResourceFilterAsync>d__46.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNet.Mvc.Core.FilterActionInvoker.<InvokeAsync>d__41.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.MvcRouteHandler.<InvokeActionAsync>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.MvcRouteHandler.<RouteAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Routing.Template.TemplateRoute.<RouteAsync>d__25.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Routing.RouteCollection.<RouteAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Diagnostics.ErrorHandlerMiddleware.<Invoke>d__5.MoveNext()
TargetSite: Microsoft.Dnx.Runtime.IRuntimeEnvironment GetRuntimeEnvironment()

I am using DNX 1.0.0-beta7, have tried both x86 and x64, and am publishing using the --no-source option. I am also running the site through a windows service, basically following this article: http://taskmatics.com/blog/host-asp-net-in-a-windows-service/.
If I either A) Don't use --no-source (and run in the service), or B) Run the site using dnx from the command prompt instead of in the service (and use --no-source), then I don't encounter this issue.
I also note that API calls return JSON just fine; it's only when I request an actual view that this exception is thrown.
This is reproducible in the test project at: https://github.com/dcbroad3/TestWebService
From administrative command prompt at src\publish-output, running run.cmd allows opening http://localhost:5000 with no issues.
However, running "sc create TestWebService binPath= ""....src\publish-output\run.cmd" --windows-service", starting the service, and opening http://localhost:5000, yields a blank page, and the original above error is logged to the Event Log.

In OnStart set this:
CallContextServiceLocator.Locator.ServiceProvider = _serviceProvider;

Thanks David, this did the trick.


Add a script to generate the specials.json file

Takes care of handling uppercase and missing apostrophe contractions.
Allows for adding exceptions to the generation of particular token + contraction cases.
When run, overwrites the specials.json file.
This has added new specials to the json file (only new uppercase / no apostrophe versions, I didn't add any entirely new words, although it is certainly possible). Please look over the specials it has generated and edit the generator as necessary to add / remove ones you want.
I also added some comments in for various tokens wondering why they don't have POS tags or lemmas in certain instances.

Thanks for this. Looks like it fixes the immediate problems.
Going forward it'd be nice to figure out a better way to both separate the code and data, and allow the generalisations.
Could follow the instructions here? https://github.com/honnibal/spaCy/blob/master/contributors/cla_template.md
Specifically, after reading the agreement, if you agree, please add a copy of the file named after your username, and filled in, to this commit.
Thanks!


Redis slave deployment: fix affinity -> slave.affinity

/!\ Breaking change
Documentation talks about slave.affinity parameter, but slave affinity is actually set by affinity parameter.

/ok-to-test
/lgtm

Thanks for the contribution, tests will fail because due to #6231 you should increase the version to 3.6.0. Can you solve it? The rest LGTM

Done!

/ok-to-test
/lgtm


Update README.md

Added some notes on resetting the emulator which has helped some people get unstuck.

@IDMCI @eddiecrawford I think you 2 are the only ones that can merge this. Hope you have a great day


ssid was not declared in this scope

I believed it should be very simple to fix this but for me it's not simple
################################
Arduino: 1.8.9 (Mac OS X), Board: "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"
/Users/taeteeka/Documents/Arduino/libraries/ESP32-OV7670-WebSocket-Camera-master/ESP32_WebSocket_Camera/ESP32_WebSocket_Camera.ino: In function 'void initWifiStation()':
ESP32_WebSocket_Camera:204:16: error: 'ssid' was not declared in this scope
WiFi.begin(ssid, password);
^
ESP32_WebSocket_Camera:204:22: error: 'password' was not declared in this scope
WiFi.begin(ssid, password);
^
Multiple libraries were found for "WiFi.h"
Used: /Users/taeteeka/Library/Arduino15/packages/esp32/hardware/esp32/1.0.3/libraries/WiFi
Not used: /Applications/Arduino.app/Contents/Java/libraries/WiFi
exit status 1
'ssid' was not declared in this scope

WiFi.begin(ssid1, password1);


Outpainting Pretrained Models

Hello @jhong93
Thanks for your work. I am looking for a pretrained model. When will you release it?

Still no


Where FromTcpClient(client); goes in the latest version?

What is the new way of doing this in latest given release? HttpRequest req = HttpRequest.FromTcpClient(client);

There isn't.  If you're looking for a reference implementation of going from TCP to HTTP, please look at my other project HttpServerLite.


Homebrew can't find installed packages

This prevents some of the auto-updating features to not work correctly. It was previously working before migrating my install over to using the nix-homebrew flake.
To re-install zoom, run:
  brew reinstall --cask zoom
Installing appcleaner
Installing appcleaner cask. It is not currently installed.
Warning: Cask 'appcleaner' is already installed.

To re-install appcleaner, run:
  brew reinstall --cask appcleaner
Installing syncthing
Installing syncthing cask. It is not currently installed.
Warning: Cask 'syncthing' is already installed.

To re-install syncthing, run:
  brew reinstall --cask syncthing
Installing steam
Installing steam cask. It is not currently installed.
Warning: Cask 'steam' is already installed.

To re-install steam, run:
  brew reinstall --cask steam
Installing vlc
Installing vlc cask. It is not currently installed.
Warning: Cask 'vlc' is already installed.

To re-install vlc, run:
  brew reinstall --cask vlc
Installing raycast
Installing raycast cask. It is not currently installed.
Warning: Cask 'raycast' is already installed.

To re-install raycast, run:
  brew reinstall --cask raycast
Installing asana
Installing asana cask. It is not currently installed.
Warning: Cask 'asana' is already installed.

To re-install asana, run:
  brew reinstall --cask asana
Installing google-chrome
Installing google-chrome cask. It is not currently installed.
Warning: Cask 'google-chrome' is already installed.

To re-install google-chrome, run:
  brew reinstall --cask google-chrome
Installing diffusionbee
Installing diffusionbee cask. It is not currently installed.
Warning: Cask 'diffusionbee' is already installed.

To re-install diffusionbee, run:
  brew reinstall --cask diffusionbee

Fixed by running
sudo mkdir -p /opt/homebrew/Library/Taps/homebrew/ && sudo /bin/chmod +a "$USER allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown" /opt/homebrew/Library/Taps/homebrew/


Merge tikv near 7.4

What problem does this PR solve?
Issue Number: close #xxx
Problem Summary:
What is changed and how it works?
Check List
Tests

[ ] Unit test
[ ] Integration test
[ ] Manual test (add detailed scripts or steps below)
[ ] No code

Side effects

[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[ ] Breaking backward compatibility

Documentation

[ ] Affects user behaviors
[ ] Contains syntax changes
[ ] Contains variable changes
[ ] Contains experimental features
[ ] Changes MySQL compatibility

Release note

None

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.9 out of 22 committers have signed the CLA.:white_check_mark: HuSharp:white_check_mark: lijie0123:white_check_mark: SpadeA-Tang:white_check_mark: YangKeao:white_check_mark: Leavrth:white_check_mark: ekexium:white_check_mark: glorv:white_check_mark: CalvinNeo:white_check_mark: wshwsh12:x: MyonKeminta:x: YuJuncen:x: overvenus:x: 3pointer:x: joker53-1:x: tabokie:x: you06:x: bufferflies:x: tonyxuqqi:x: LykxSassinator:x: Connor1996:x: crazycs520:x: cfzjywxkYou have signed the CLA already but the status is still pending? Let us recheck it.


Fix unclear documentation of human readable byte

Follows https://github.com/apache/druid/pull/10203; See https://github.com/apache/druid/pull/10203#issuecomment-771080634.
Area - Documentation
Description
Based on https://github.com/apache/druid/blob/c346ce64b1497f8bbd547bee16fa98cc0d3c74f2/core/src/main/java/org/apache/druid/java/util/common/HumanReadableBytes.java#L200
Only integers are valid before the unit: 1536MiB is valid but 1.5GiB isn't. This PR reflects this in the documentation.
This PR has:

[x] been self-reviewed.
[x] added documentation for new or modified features or behaviors.
[ ] added Javadocs for most classes and all non-trivial methods. Linked related entities via Javadoc links.

Should I change the javadoc as well? The code is rather obvious.

Thanks for the amend in doc.
The reason why only integers(more accurately, positive integer) are supported in this format is that its design is inspired by JVM parameters such as '-Xms', '-Xmx', which support integer numbers only.
It's acceptable to support DOUBLE because sometime numbers like 1.5GiB are more meaningful and simpler than numbers like 1536MiB.
For DOUBLE, there're some edge cases to handle. For example, 1.8KiB is equivalent to 1843.2(1.8 * 1024), which rounding mode should be applied to the result ? But this problem is not hard to solve, what we should do is to take a deep consideration and make a choice. At the point the original PR was implemented, I chose to avoid these cases to make the implementation a little bit easier.

Thanks for the amend in doc.

Sure.
Makes sense. Regarding rounding, the config keys that support human-readable bytes are those that actually get large values, and a 1 byte difference shouldn't be important in them. Also, the possibility of rounding can be explained in the docs as well.


Update the node version Travis uses to 6.10.2 (LTS)

The current Travis failure will be fixed by https://github.com/web-animations/web-animations-js/pull/119.


dark-mode: Add custom CSS through JS.

This adds custom CSS through JavaScript for things that do not
scope well and will override other inherited styles.
This should ONLY be used for problematic CSS that has no obvious
or easy CSS-only solution.

Merged, thanks @brockwhittaker!


Does your source code include the code for Test-time extra tricks (e.g. DSL and QB-Norm)? Where is it?

We do not include the DSL or QB-Norm here, because these testing techniques essentially involve information leakage. The DSL can be easily implemented in https://github.com/farewellthree/STAN/blob/main/mmaction/evaluation/metrics/retrieval_metric.py(We do not try QB-Norm before). The implementation of DSL can be found in https://github.com/starmemda/CAMoE/.


Add checkpoint_active on the WAL

This new call immediately sends the active log file to the background checkpoint thread, regardless of its current size.
This is useful when you need to force written log entries to be immediately materialized in the database, perhaps during a node drain, or before a shutdown event.
Addresses: https://github.com/khonsulabs/okaywal/issues/10
Tests: Unit.

@ecton Sounds good. One thing that could be improved: This change holds the Files lock twice. Once to acquire the active file, and one to pass it to the background checkpoint thread. If you would rather that be combined, and carry the mutex guard across, I can make that change. If not, I'll keep it as is.
Let me know if you need anything else in the meantime!

@ecton Any updates here?


Library orphaned?

With Haxe4 out there and lots of deprecation warnings and old haxelib release I would like to ask if is  this library orphaned.

support released under v2.0.0


Correction on Traffic Lights Alternative recipe

I got an error when using the documented example.
NameError: name 'lights' is not defined
This PR fixes that error

Thanks Barry!


Remove hardcoded architecture references

Action items

[ ] Find out if we have hardcoded architectures in the packages (x86_64, amd64, ..)
[ ] Replace the hardcoded architecture with templating where it makes sense

@mudler are we thinking here to have arch per package or have a general arch in values that all the packages inherit from?

I think we are going for arch in values, I think we had some spare already defined in the packages, but it was not done consistently all over (the arch in definition.yaml acts like a "default" which is override by the values`


refactor: remove unused Transaction fns

🤖 Generated by Copilot at 42975d2
Refactor Transaction struct in ./crates/storage/provider/src/transaction.rs to improve readability and remove unused code.

Codecov Report

Merging #2739 (42975d2) into main (defa64b) will decrease coverage by 53.82%.
The diff coverage is 0.00%.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
@@             Coverage Diff             @@
##             main    #2739       +/-   ##
===========================================
- Coverage   71.36%   17.55%   -53.82%
===========================================
  Files         504      504
  Lines       65514    65479       -35
===========================================
- Hits        46755    11493    -35262
- Misses      18759    53986    +35227

Flag
Coverage Δ

integration-tests
17.55% <0.00%> (+0.03%)
:arrow_up:

unit-tests
?

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

crates/storage/provider/src/transaction.rs
0.00% <0.00%> (-89.90%)
:arrow_down:

... and 354 files with indirect coverage changes


Replace legacy facts with structured facts

With the upcoming Puppet 8, legacy facts will be disabled by default. The filebeat module still uses legacy facts at some places. This PR will replace legacy facts with structured facts.
This PR consists of 3 commits:

The first one actually replaces legacy facts with structured facts.
I tried to run pdk validate and pdk test unit with a container providing pdk 1.18.1, but this failed. Because of this, the second commit updates pdk to current pdk 2.6.1 and fixes the unit tests.
The third commit is linting the code to let pdk validate run without errors. There are still warnings about missing parameter docs and anchor usage.

References:

Josh Cooper in puppet-dev announcing Puppet 8 in February 2023

Here are our current plans for the Puppet Platform 8 release due out in February 2023.
Legacy Facts
By default, legacy facts will no longer be collected or sent to puppetserver. Also builtin types and providers will no longer use legacy facts to determine provider suitability.

Josh Cooper in puppet-dev about Disabling Legacy Facts in Puppet 8
Puppet 7.21.0 introduced the option include_legacy_facts to opt-out legacy facts. In Puppet 8 this is set to false by default, but can be opt-in in the configuration.

Thanks for all of this phenomenal work and for getting things ready for the next major release.
Do you anticipate anything breaking when this is used? I'd like to make sure I version it and update the changelog correctly when I do.

There are no functional changes in the commits. It only replaces the usage of top-scope legacy variables like $::operatingsystemrelease with the facts hash with structured facts like $facts['os']['release']['full']. This is supported since Puppet 3.5.
All other changes are just whitespace changes or related to pdk. We are running the changes already in production and didn't experience any breakages. I don't expect any breakages anywhere else, because of the changes.


Add complex nest for Zend DB table gateway

Add complex nest for Zend DB table gateway
use Zend\Db\Sql\Where;

$where = new Where();
$nest = $where->nest();
$nest->equalTo('username', 'david')->or->equalTo('city', 'newyork');
$nest->unnest()
$result = $this->getTable($tableName)->select($where)->toArray();

Please move your request to the issue tracker of the DB component.
Thanks!


[python/ci] Add CI job to test building wheel from sdist

Issue and/or context:
TileDB-SOMA-Py is built and distributed in many different ways (from source, PyPI wheels, conda binaries). We want to identify any packaging-related problems immediately in the PR that generates them instead of in a nightly build or worse after the release has been made.
Changes:
This PR includes 2 main changes:

The first is rebranding my existing CI pipeline to python-ci-packaging.yml. The original name was from my initial PR to test the shared object copying behavior (#1937, #2220). However, I had already previously expanded the pipeline to test the pure setuptools installation setup (which we use in tiledbsoma-feedstock) (#2221). With the addition of a 3rd job (below), I wanted to update the CI to better match its purpose

The 1.9.0 release was delayed because the PyPI wheels could not be built (#2337, #2339). While we build wheels in many of the existing CI pipelines, none build the wheel from a source tarball (sdist) as is done in python-packaging.yml, so this error wasn't caught until post release. With this new CI job, we will immediately detect if a crucial file is absent from the source tarball

Notes for Reviewer:
See the wiki page Debugging wheel‐build issues for more details

@jdblischak is this partially duplicating https://github.com/single-cell-data/TileDB-SOMA/blob/main/.github/workflows/python-packaging.yml ?

is this partially duplicating https://github.com/single-cell-data/TileDB-SOMA/blob/main/.github/workflows/python-packaging.yml?

I wouldn't describe it as duplication. I would describe it more as preparation for the official building of the PyPI wheels.
Differences:

Uses transparent python commands instead of the opaque action pypa/cibuildwheel, and therefore easier to debug
Only builds two wheels total (python 3.11 on Ubuntu and macOS), so it is much faster. It's not creating the wheels for distribution, but instead just providing a quick check that all the required files are distributed in the source tarball

In summary, the goal is to identify any potential problems with building the PyPI wheels when a PR is submitted, and not at release time.

@jdblischak can we please get this verbatim into the affected YAML file as a block comment?

Differences:
Uses transparent python commands instead of the opaque action pypa/cibuildwheel, and therefore easier to debug
Only builds two wheels total (python 3.11 on Ubuntu and macOS), so it is much faster. It's not creating the wheels for distribution, but instead just providing a quick check that all the required files are distributed in the source tarball
In summary, the goal is to identify any potential problems with building the PyPI wheels when a PR is submitted, and not at release time.

as long as CI resource consumption on every PR doesn't become excessive

This pipeline does spawn a lot of jobs. Two reasons why I think it avoids being excessive:

Aggressive use of path-based filters. This pipeline is only triggered if a file that could affect the Python installation process is affected (eg setup.py, pyproject.toml, etc). A PR that edits the C++ code, R code, or even the non-installation Python files will never trigger these jobs
The macOS jobs all finish in under 10 minutes. So even if it hogs our parallel macOS jobs, it will be for a brief period of time

If it does start to become excessive, the first macOS job I would drop is the one added in this PR, sdist. It is mainly to catch files missing from the source tarball, and that behavior should be consistent across Linux and macOS.

Cool and thanks @jdblischak ! I indeed just looked for paths: in your affected YAML and we have protection there against over-running so my concern was premature (I should have checked there first). But thanks for looking, and thanks for the prioritization if/when "something has to go" someday -- really appreciate it! :)


UI: Empty license info, link leads to front page

Do you want to request a feature or report a bug?
Bug
What did you do?

Upload package with no License

What did you expect to see?

No license link

What did you see instead?

BaGet UI provides link back to /

Output of git rev-parse HEAD: (What version of BaGet are you using?)
988af77e1d997560527685a3442ac3d236eccb7f
What is your environment & configuration (arguments, platform, ...)?
N/A
If applicable, please paste the log output in DEBUG level
N/A

Thanks for reporting! This should be fixed by #143


fix: saving custom CSS correctly from dashboard editor

SUMMARY

A fix was made to the save as modal that wasn't applied to the method called by the save as button after editing the custom CSS. This fixes the parameter name (which was changed to avoid a collision with Emotion props).
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

TEST PLAN

ADDITIONAL INFORMATION

[x] Has associated issue: Fixes #10102
[ ] Changes UI
[ ] Requires DB Migration.
[ ] Confirm DB Migration upgrade and downgrade tested.
[ ] Introduces new feature or API
[ ] Removes existing feature or API

When editing a dashboard and applying a custom css template, the change is not saved when pressing 'save changes' . You need to  explicitly select 'Save As' + 'Overwrite' to keep the css change. Is this expected behavior?

Hello,
Altough it save the changes, when closing the dashboard and reopening it, it doesn't charge the custom CSS.
It is happening to anyone?

@rusackas @junlincc
Can you check my previous comment?
When I save my changes in the custom CSS, it is stored, but not charged when rendering again the dashboard.
For example:

I refresh the page and:

If I inspect the page, it is like if the css template were overwrited by the default css.

Do you have any clue of what can be happening?

I haven't tried to replicate this exactly, but my guess would be that your CSS selector, and the one built into the column.less file are the same specificity, so they "tie" with the win going to the one that is loaded last by the browser. I might try to find some time to make sure that user-generated styles are loaded last (or feel free to help, if you're so inclined). For an easy way out, though, you probably just need to add to the selector to give it a slightly higher specificity. Even something silly like like adding body, e.g. body .grid-column > ... should do the trick.

@rusackas  I'll try your advice. Also I'll check if I can find a way for loading the custom css first, if I find some solution I'll let you know.


New Project idea : Emotion Detection

Is your feature request related to a problem? Please describe.
The new project idea involves detecting human emotions, these emotions can be used to build a recommender that would recommend songs/movies by detecting the real time emotions of user or maybe used for other purpose similar to this.
Describe the solution you'd like
I would like to work on building the emotion detector for detecting human emotions
Describe alternatives you've considered
Instead of just working on the model, i would also like to turn it into a GUI application using Python and Tkinter.
Approach to be followed (optional)

Model creation using Tensorflow and Keras.
Exporting this model to some format such as .h5 file.
Using opencv for face detection.
Using the model to predict human emotions

hi here you can see what is already implemented till now and let me know what new you want to add https://github.com/akshitagupta15june/Face-X/tree/master/Face-Emotions-Recognition

@akshitagupta15june I went through the content of the folder and i think all of these are implemented well already. I too implemented it using custom CNN.  The performance is as follows -

Training accuracy - 71.73
Testing accuracy - 65..22
One of the models in the folder has an accuracy of 64% on testing set which i think is good given the data we had. So i think there are sufficient models in the repo. So if you wish to close this issue you can, but if you want, i can add my model as well and just enclose it in a GUI with some buttons and instructions.

Also this repository is very useful and informative so thank you for creating it and maintaining it so well!

You can add you your model inside the folder of emotions one and also follow the naming convention as emotion-recognition-with-GUI

Okay! I have started working on it. Thank you.


Compact gate generator is sensitive to number of threads used to execute an IPA query

Gate transitions generated with and without multi-threading feature do not match. https://github.com/private-attribution/ipa/commit/b71b773e39b410cc31cb9123bcc2922dd41dd42e

We use new compact gate engine, so it no longer applies


Monk evasion not working and fireball dealing bludgeoning damage.

The mob should toss a fireball at the monk right after the current turn ends.
before fireball.zip

there's something odd about this save or campaign. I cannot repro when I export your Monk and test in another location.

It was freshly respec'ed, not sure if that would matter.
It's Artyoan's Forsaken Isle fwiw.
Did you see it in my save?
Might just be one of those oddities.

Oh, it happens 100% of the times there. Nothing I can do on this one.

Must be just one of those oddities. I haven't seen it before either. Thanks for looking.


Allow sharing existing terminals

Currently, in order to share a terminal, you have to create an entirely new instance, as opposed to being able to select an existing one. In some circumstances, this might be disruptive, since you’d need to reproduce your terminal context in order to share it (e.g. re-running your build command). To simplify this, we could introduce a way to share an existing terminal, and specifying whether it should be read-only or not for guests.
Additionally, for users that would prefer to always share their terminals (e.g. pair programming scenarios), we could explore adding a setting that allowed controlling the default behavior for terminals, and whether they should be automatically shared or not (default would remain no).

I have another feature request on the same lines ... If there is a cmd or (wsl window) opened outside of vscode then somehow if we can port or open  the same window  inside of vscode we will able to share any terminal window or cmd window opened anywhere on windows ....if the above feature is implemented .

This has now been addressed in the latest Live Share release 🔥 Check out the release notes for more details.


obcs_check with pkg/shelfice raises error for the wrong reason when hFacMin is too small

We have encountered a case where an isomip-like configuration with pkg/shelfice and pkg/obcs raises errors like this:
(PID.TID 0196.0001) *** ERROR *** S/R OBCS_CHECK: Inside Mask and OB locations disagree :
(PID.TID 0196.0001) *** ERROR ***  from insideMask (bi,bj=  1,  1) expects OBE=   27 @ j=   21
(PID.TID 0196.0001) *** ERROR ***  from insideMask (bi,bj=  1,  1) expects OBN=   21 @ i=   27
(PID.TID 0196.0001) *** ERROR ***  from insideMask (bi,bj=  1,  1) expects OBN=   21 @ i=   28

This seems to happen where upper (ice shelf) and lower ("bedrock") boundaries meet and when at least one of the two leads to a minimal layer thickness (Depth=hFacMin*delR). As a consequence, the hFacW/S are wrong (nonzero outside the "wet domain"). A slight modification of hFacMin from 0.1 to 0.11 (both with hFacMinDr = 0., constant delR = 5.,), which then closes grid cells with Depth = 0.5 (but minimal depth is now 0.550000011920929 > 0.55, probably a coincidence), or slight modificatons of the topography remove this error. So does setting useMin4hFacEdges=.TRUE., but then the hFacS/W assume nonzero values outside of the "wet" domain.
I think that this is related to S/R ini_mask_etc, but I cannot understand why this happens at hFacMin=0.1 (or hFacMin*delR).
This happens on two different computers independently.

I can see a bug in the code when the bathymetry is exactly rF(k) - drF(k)*hFacMin/2  and the ice-shelf
depth is deeper than the bathymetry, which turns to be the case in this set-up for the grid point I was looking at. I did not try a fix yet but will try in the coming days.
I might try to add this fix to the presently open PR #312 since it's withing the same routine (ini_masks_etc.F) and also related to ice-shelf draft getting close to the ocean bottom. @mjlosch would you agree ?

I didn't check all points, but it appears to me, that this appears to happen at points (i,j) where the bathymetry at (i-1,j) (for eastern boundaries, but i,j-1 for northern boundaries, etc), is exactly as you say at rF(k) - drF(k)*hFacMin/2 and the ice shelf topography is drF(k)*hFacMin/2 shallower. The depth (Depth.data) at this point is the drF(k)*hFacMin.
@jm-c I cannot see where in ini_masks_etc.F this happens. Can you point me to the lines?

You can try to comment out, in original ini_masks_etc.F, lines 84-85 and 94-95 (which is safe since the same lines are repeated further down, on 340-341 and 350-351). I think this should be enough for this set-up.
But I can also see an other potential problem that I have not tried yet to fix (but will look at this soon); this is the reason I did not distribute a "good" fix for this.

OK, this fixes the problem in my tests. @nsteiger please try @jm-c suggestion, also to see if this has any implications for long term simulations.
I guess we are all fine with including this into PR #312

I also tried the fix in ini_mask_etc.F and it works fine for me! Thanks a lot for finding a solution to this problem.

Problem has been fixed in PR #312 which was merged in a week ago.

@mmazloff SEE THIS.  Looks like we ran into the same issue last week in a different setup


packaging: fixed key-base new env. variable name

Signed-off-by: Miquel Sabaté Solà<EMAIL_ADDRESS>

Merging myself since it's a small fix needed after my previous PR


Dependency between fields of different groups

I'm submitting a ...  (check one with "x")
[ ] bug report => search github for a similar issue or PR before submitting
[ ] feature request
[ x] support request

Current behavior

I have been using idea of formly-repeat-section to group all related fields in groups
Eg:

groupA has field1, field2
group B has field3, field4
The model will be generated corresponding :
formModel = {
"groupA": [ {
"field1": "",
"field2": ""
} ],
"groupB": [ {
"field3": "",
"field4": ""
} ]
}

Everything is working fine
However, if field3 of groupB depends on selected value of field1 in groupA,
the hideExpression of field3 will be: 'formState.originalModel["groupA"][0]["field1"] != "ABC"'
and field3 will never being shown regardless of value changes of field1
with
formOptions = {
formState: { originalModel: formModel}
}
Expected behavior

Value changes of Field1 should trigger hideExpression of Field3 even they are in different groups
Minimal reproduction of the problem with instructions

What is the motivation / use case for changing the behavior?

Please tell us about your environment:

Angular version: 2.0.X

Browser: [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ]

Language: [all | TypeScript X.X | ES6/7 | ES5]

Node (for AoT issues): node --version =

I typically do this type of complex inter-field communication between some combination of services, observables (either part of the service or the form/controls themselves), and lifecycle events.
If you want to put together a minimal plunker to set up the problem I'd be happy to toy with it.

Thanks franzeal, I have decided to go with fieldGroup so that model will be flat as 1 level json data


Weekly summary emails say Saturday to Saturday

e.g. Saturday, August 11, 2018 to Saturday, August 18, 2018
It should show Sunday to Saturday, otherwise it seems like each Saturday will be counted twice (i.e. 11th August will be included in this weeks one and the previous weeks one). I think the counting is fine, just the date printing is wrong.
A bonus point would be to also change the sending time to be timezone specific (at the moment it just sends them at a fixed time in UTC).

Hello, I am willing to pick this up.

Hi! Does this still need to be done? I can if @the-bionic can not get to it.

It's still open :)

If this is still available I'll pick it up!

Please do! Would be interesting to us if you had any problems setting up the backend and how quickly you could find the responsible code!


langchain: Replace lxml and XSLT with BeautifulSoup in HTMLHeaderTextSplitter for Improved Large HTML File Processing

This pull request updates the HTMLHeaderTextSplitter by replacing the split_text_from_file method's implementation. The original method used lxml and XSLT for processing HTML files, which caused lxml.etree.xsltapplyerror maxhead when handling large HTML documents due to limitations in the XSLT processor. Fixes #13149
By switching to BeautifulSoup (bs4), we achieve:

Improved Performance and Reliability: BeautifulSoup efficiently processes large HTML files without the errors associated with lxml and XSLT.
Simplified Dependencies: Removes the dependency on lxml and external XSLT files, relying instead on the widely used beautifulsoup4 library.
Maintained Functionality: The new method replicates the original behavior, ensuring compatibility with existing code and preserving the extraction of content and metadata.

Issue:
This change addresses issues related to processing large HTML files with the existing HTMLHeaderTextSplitter implementation. It resolves problems where users encounter lxml.etree.xsltapplyerror maxhead due to large HTML documents.
Dependencies:

BeautifulSoup (beautifulsoup4): The beautifulsoup4 library is now used for parsing HTML content.

Installation: pip install beautifulsoup4

Code Changes:
Updated the split_text_from_file method in HTMLHeaderTextSplitter as follows:
def split_text_from_file(self, file: Any) -> List[Document]:
    """Split HTML file using BeautifulSoup.

    Args:
        file: HTML file path or file-like object.

    Returns:
        List of Document objects with page_content and metadata.
    """
    from bs4 import BeautifulSoup
    from langchain.docstore.document import Document
    import bs4

    # Read the HTML content from the file or file-like object
    if isinstance(file, str):
        with open(file, 'r', encoding='utf-8') as f:
            html_content = f.read()
    else:
        # Assuming file is a file-like object
        html_content = file.read()

    # Parse the HTML content using BeautifulSoup
    soup = BeautifulSoup(html_content, 'html.parser')

    # Extract the header tags and their corresponding metadata keys
    headers_to_split_on = [tag[0] for tag in self.headers_to_split_on]
    header_mapping = dict(self.headers_to_split_on)

    documents = []

    # Find the body of the document
    body = soup.body if soup.body else soup

    # Find all header tags in the order they appear
    all_headers = body.find_all(headers_to_split_on)

    # If there's content before the first header, collect it
    first_header = all_headers[0] if all_headers else None
    if first_header:
        pre_header_content = ''
        for elem in first_header.find_all_previous():
            if isinstance(elem, bs4.Tag):
                text = elem.get_text(separator=' ', strip=True)
                if text:
                    pre_header_content = text + ' ' + pre_header_content
        if pre_header_content.strip():
            documents.append(Document(
                page_content=pre_header_content.strip(),
                metadata={}  # No metadata since there's no header
            ))
    else:
        # If no headers are found, return the whole content
        full_text = body.get_text(separator=' ', strip=True)
        if full_text.strip():
            documents.append(Document(
                page_content=full_text.strip(),
                metadata={}
            ))
        return documents

    # Process each header and its associated content
    for header in all_headers:
        current_metadata = {}
        header_name = header.name
        header_text = header.get_text(separator=' ', strip=True)
        current_metadata[header_mapping[header_name]] = header_text

        # Collect all sibling elements until the next header of the same or higher level
        content_elements = []
        for sibling in header.find_next_siblings():
            if sibling.name in headers_to_split_on:
                # Stop at the next header
                break
            if isinstance(sibling, bs4.Tag):
                content_elements.append(sibling)

        # Get the text content of the collected elements
        current_content = ''
        for elem in content_elements:
            text = elem.get_text(separator=' ', strip=True)
            if text:
                current_content += text + ' '

        # Create a Document if there is content
        if current_content.strip():
            documents.append(Document(
                page_content=current_content.strip(),
                metadata=current_metadata.copy()
            ))
        else:
            # If there's no content, but we have metadata, still create a Document
            documents.append(Document(
                page_content='',
                metadata=current_metadata.copy()
            ))

    return documents

Hi @eyurtsev
Could you take a look at this, please?

@AhmedTammaa this is a great change -- it'll make it much easier to understand what's going on.
Given that you're already taken a deep dive into this code, would you be able to help define the precise semantics for what the splitter does?
Based on the code:
class HTMLHeaderTextSplitter:
    """
    Splitting HTML files based on specified headers.
    Requires lxml package.
    """
    def __init__(
        self,
        headers_to_split_on: List[Tuple[str, str]],
        return_each_element: bool = False,
    ):
        """Create a new HTMLHeaderTextSplitter.
        Args:
            headers_to_split_on: list of tuples of headers we want to track mapped to
                (arbitrary) keys for metadata. Allowed header values: h1, h2, h3, h4,
                h5, h6 e.g. [("h1", "Header 1"), ("h2", "Header 2)].
            return_each_element: Return each element w/ associated headers.
        """

It's a bit hard to understand from the doc-string, but what's the actual of each document chunk?

What does the content for a given header contain. (Does the h1 header contain the h2 header is we're splitting on h1 and h2)
Can we split only on h2, but not h1?
what metadata does each document contain?

@AhmedTammaa OK this makes sense and will be very happy to merge the code. if we can do the following:

Add a unit test for at least one, ideally two more test cases:

A) split on h1 only (but document contains h2 / h3 tags)
B) split on h1 only (but document does not contain any header tags)
The existing unit tests are here: https://github.com/langchain-ai/langchain/blob/master/libs/text-splitters/tests/unit_tests/test_text_splitters.py#L1638-L1638
You can use pytest.parameterize() and I'd suggest just asking chatgpt (or your favorite chat model) to write it. It'll help make sure that the semantics are well defined.

Address the issue w/ the imports (flagged via a comment)

If you're able improve the doc-string for the API reference (here too you can probably ask your favorite chat model to update the API reference using google style doc-string and the content of your explanation + test cases)

Alright @eyurtsev
I will be working on that. I will do a lot of testing before pushing. I am currently studying the old behaviour deeply, so I can reproduce it (ideally, exactly the same) or with minor changes.
The way I will be testing is asking an llm to generate some sample documents and I compare old output to new output which should be the same (at the moment it isn't).
Or,
There can be more flexibility?

I compare old output to new output which should be the same (at the moment it isn't).

Likely OK if the output isn't the same. Based on how the splitter is supposed to work, it sounds like we can well define what the behavior should be for each of the test cases.
So let's create some simple test cases, and verify that the output we get is as expected.

Hi @eyurtsev,
Thanks for answering my query.
Currently, I have the class stable and it passes all of tests. I am doing code-cleaning and performance optimization.
The current class also, as the former, deals with the document as a "tree" and no recursion so we can avoid future problems like the recursion limit exceeded error.
Here is a summary of the behaviour and the added test cases.
Summary of HTMLHeaderTextSplitter Behavior

Document Chunk Content:

Headers: Each specified header (e.g.,
,
) becomes a separate Document containing the header text.
Content: Text following a header up to the next header of the same or higher level is grouped into a Document. When splitting on multiple headers (e.g.,
 and
), higher-level headers do not contain lower-level ones; instead, metadata reflects the hierarchy.

Splitting Only on Specific Headers:

You can choose to split on any combination of headers. For example, splitting only on
 while ignoring
 is supported by specifying only ("h2", "Header 2") in headers_to_split_on.

Metadata in Each Document:

Structure: Each Document includes metadata mapping the specified headers to their respective texts.
Hierarchy: For nested headers, metadata accumulates to reflect the document structure. For example, a
 under a
 will have both Header 1 and Header 2 in its metadata.

Test Cases Overview

Test Case A:
Splits on
,
, and
 within a nested structure, ensuring each header and its content are correctly segmented with appropriate metadata.

Test Case B:
Splits on
 only in a document that contains no headers, resulting in a single aggregated Document without metadata.

Added Test Cases
I have added edge cases where elements are on different depths, nested structure and etc.
Here is the full test set now:

from typing import List, Tuple

import pytest
from langchain.docstore.document import Document
from loguru import logger

from new_code import HTMLHeaderTextSplitter
from old_code import OldHTMLHeaderTextSplitter  # Imported for potential future use
from typing import Any

@pytest.fixture
def splitter_factory() -> HTMLHeaderTextSplitter:
    """
    Fixture to create an HTMLHeaderTextSplitter instance with given headers.
    This factory allows dynamic creation of splitters with different headers.
    """
    def _create_splitter(headers_to_split_on: List[Tuple[str, str]]) -> HTMLHeaderTextSplitter:
        return HTMLHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
    return _create_splitter

@pytest.mark.parametrize(
    "headers_to_split_on, html_input, expected_documents, test_case",
    [
        (
            # Test Case 1: Split on h1 and h2
            [("h1", "Header 1"), ("h2", "Header 2")],
            """

Introduction

This is the introduction.

Background

Background information.

Conclusion

Final thoughts.

            """,
            [
                Document(
                    page_content="Introduction",
                    metadata={"Header 1": "Introduction"}
                ),
                Document(
                    page_content="This is the introduction.",
                    metadata={"Header 1": "Introduction"}
                ),
                Document(
                    page_content="Background",
                    metadata={
                        "Header 1": "Introduction",
                        "Header 2": "Background"
                    }
                ),
                Document(
                    page_content="Background information.",
                    metadata={
                        "Header 1": "Introduction",
                        "Header 2": "Background"
                    }
                ),
                Document(
                    page_content="Conclusion",
                    metadata={"Header 1": "Conclusion"}
                ),
                Document(
                    page_content="Final thoughts.",
                    metadata={"Header 1": "Conclusion"}
                )
            ],
            "Simple headers and paragraphs"
        ),
        (
            # Test Case 2: Nested headers with h1, h2, and h3
            [("h1", "Header 1"), ("h2", "Header 2"), ("h3", "Header 3")],
            """

Main Title

Subsection

Details of subsection.

Sub-subsection

More details.

Another Main Title

Content under another main title.

            """,
            [
                Document(
                    page_content="Main Title",
                    metadata={"Header 1": "Main Title"}
                ),
                Document(
                    page_content="Subsection",
                    metadata={
                        "Header 1": "Main Title",
                        "Header 2": "Subsection"
                    }
                ),
                Document(
                    page_content="Details of subsection.",
                    metadata={
                        "Header 1": "Main Title",
                        "Header 2": "Subsection"
                    }
                ),
                Document(
                    page_content="Sub-subsection",
                    metadata={
                        "Header 1": "Main Title",
                        "Header 2": "Subsection",
                        "Header 3": "Sub-subsection"
                    }
                ),
                Document(
                    page_content="More details.",
                    metadata={
                        "Header 1": "Main Title",
                        "Header 2": "Subsection",
                        "Header 3": "Sub-subsection"
                    }
                ),
                Document(
                    page_content="Another Main Title",
                    metadata={"Header 1": "Another Main Title"}
                ),
                Document(
                    page_content="Content under another main title.",
                    metadata={"Header 1": "Another Main Title"}
                )
            ],
            "Nested headers with h1, h2, and h3"
        ),
        (
            # Test Case 3: No headers
            [("h1", "Header 1")],
            """

Paragraph one.

Paragraph two.

Paragraph three.

            """,
            [
                Document(
                    page_content="Paragraph one.  \nParagraph two.  \nParagraph three.",
                    metadata={}
                )
            ],
            "No headers present"
        ),
        (
            # Test Case 4: Multiple headers of the same level
            [("h1", "Header 1")],
            """

Chapter 1

Content of chapter 1.

Chapter 2

Content of chapter 2.

Chapter 3

Content of chapter 3.

            """,
            [
                Document(
                    page_content="Chapter 1",
                    metadata={"Header 1": "Chapter 1"}
                ),
                Document(
                    page_content="Content of chapter 1.",
                    metadata={"Header 1": "Chapter 1"}
                ),
                Document(
                    page_content="Chapter 2",
                    metadata={"Header 1": "Chapter 2"}
                ),
                Document(
                    page_content="Content of chapter 2.",
                    metadata={"Header 1": "Chapter 2"}
                ),
                Document(
                    page_content="Chapter 3",
                    metadata={"Header 1": "Chapter 3"}
                ),
                Document(
                    page_content="Content of chapter 3.",
                    metadata={"Header 1": "Chapter 3"}
                )
            ],
            "Multiple headers of the same level"
        ),
        (
            # Test Case 5: Headers with no content
            [("h1", "Header 1"), ("h2", "Header 2")],
            """

Header 1

Header 2

Header 3

            """,
            [
                Document(
                    page_content="Header 1",
                    metadata={"Header 1": "Header 1"}
                ),
                Document(
                    page_content="Header 2",
                    metadata={
                        "Header 1": "Header 1",
                        "Header 2": "Header 2"
                    }
                ),
                Document(
                    page_content="Header 3",
                    metadata={"Header 1": "Header 3"}
                )
            ],
            "Headers with no associated content"
        ),
    ]
)
def test_html_header_text_splitter(
    splitter_factory: Any,
    headers_to_split_on: List[Tuple[str, str]],
    html_input: str,
    expected_documents: List[Document],
    test_case: str
):
    """
    Parametrized test for HTMLHeaderTextSplitter.

    Args:
        splitter_factory (Callable): Fixture to create splitter instances.
        headers_to_split_on (List[Tuple[str, str]]): Headers to split on.
        html_input (str): The HTML content to split.
        expected_documents (List[Document]): The expected list of Documents after splitting.
        test_case (str): Description of the test case.
    """
    logger.info(f"Running Test Case: {test_case}")
    splitter = splitter_factory(headers_to_split_on=headers_to_split_on)
    docs = splitter.split_text(html_input)

    logger.info("Generated Documents:")
    for idx, doc in enumerate(docs, start=1):
        logger.info(f"Document {idx}: {doc}")

    assert len(docs) == len(expected_documents), (
        f"Test Case '{test_case}' Failed: Number of documents mismatch. "
        f"Expected {len(expected_documents)}, got {len(docs)}."
    )
    for idx, (doc, expected) in enumerate(zip(docs, expected_documents), start=1):
        assert doc.page_content == expected.page_content, (
            f"Test Case '{test_case}' Failed at Document {idx}: "
            f"Content mismatch.\nExpected: {expected.page_content}\nGot: {doc.page_content}"
        )
        assert doc.metadata == expected.metadata, (
            f"Test Case '{test_case}' Failed at Document {idx}: "
            f"Metadata mismatch.\nExpected: {expected.metadata}\nGot: {doc.metadata}"
        )
    logger.info(f"Test Case '{test_case}' Passed.")

@pytest.mark.parametrize(
    "headers_to_split_on, html_content, expected_output, test_case",
    [
        (
            # Test Case A: Split on h1 and h2 with h3 in content
            [("h1", "Header 1"), ("h2", "Header 2"), ("h3", "Header 3")],
            """
            <!DOCTYPE html>

Foo

Some intro text about Foo.

Bar main section

Some intro text about Bar.

Bar subsection 1

Some text about the first subtopic of Bar.

Bar subsection 2

Some text about the second subtopic of Bar.

Baz

Some text about Baz

Some concluding text about Foo

            """,
            [
                Document(
                    metadata={'Header 1': 'Foo'},
                    page_content='Foo'
                ),
                Document(
                    metadata={'Header 1': 'Foo'},
                    page_content='Some intro text about Foo.'
                ),
                Document(
                    metadata={'Header 1': 'Foo', 'Header 2': 'Bar main section'},
                    page_content='Bar main section'
                ),
                Document(
                    metadata={'Header 1': 'Foo', 'Header 2': 'Bar main section'},
                    page_content='Some intro text about Bar.'
                ),
                Document(
                    metadata={
                        'Header 1': 'Foo',
                        'Header 2': 'Bar main section',
                        'Header 3': 'Bar subsection 1'
                    },
                    page_content='Bar subsection 1'
                ),
                Document(
                    metadata={
                        'Header 1': 'Foo',
                        'Header 2': 'Bar main section',
                        'Header 3': 'Bar subsection 1'
                    },
                    page_content='Some text about the first subtopic of Bar.'
                ),
                Document(
                    metadata={
                        'Header 1': 'Foo',
                        'Header 2': 'Bar main section',
                        'Header 3': 'Bar subsection 2'
                    },
                    page_content='Bar subsection 2'
                ),
                Document(
                    metadata={
                        'Header 1': 'Foo',
                        'Header 2': 'Bar main section',
                        'Header 3': 'Bar subsection 2'
                    },
                    page_content='Some text about the second subtopic of Bar.'
                ),
                Document(
                    metadata={'Header 1': 'Foo', 'Header 2': 'Baz'},
                    page_content='Baz'
                ),
                Document(
                    metadata={'Header 1': 'Foo'},
                    page_content='Some text about Baz  \nSome concluding text about Foo'
                )
            ],
            "Test Case A: Split on h1, h2, and h3 with nested headers"
        ),
        (
            # Test Case B: Split on h1 only without any headers
            [("h1", "Header 1")],
            """

Paragraph one.

Paragraph two.

Paragraph three.

            """,
            [
                Document(
                    metadata={},
                    page_content='Paragraph one.  \nParagraph two.  \nParagraph three.'
                )
            ],
            "Test Case B: Split on h1 only without any headers"
        )
    ]
)
def test_additional_html_header_text_splitter(
    splitter_factory: Any,
    headers_to_split_on: List[Tuple[str, str]],
    html_content: str,
    expected_output: List[Document],
    test_case: str
):
    """
    Additional parametrized tests for HTMLHeaderTextSplitter.

    Args:
        splitter_factory (Callable): Fixture to create splitter instances.
        headers_to_split_on (List[Tuple[str, str]]): Headers to split on.
        html_content (str): The HTML content to split.
        expected_output (List[Document]): The expected list of Documents after splitting.
        test_case (str): Description of the test case.
    """
    logger.info(f"Running {test_case}")
    splitter = splitter_factory(headers_to_split_on=headers_to_split_on)
    docs = splitter.split_text(html_content)

    logger.info("Generated Documents:")
    for idx, doc in enumerate(docs, start=1):
        logger.info(f"Document {idx}: {doc}")

    assert len(docs) == len(expected_output), (
        f"{test_case} Failed: Number of documents mismatch. "
        f"Expected {len(expected_output)}, got {len(docs)}."
    )
    for idx, (doc, expected) in enumerate(zip(docs, expected_output), start=1):
        assert doc.page_content == expected.page_content, (
            f"{test_case} Failed at Document {idx}: "
            f"Content mismatch.\nExpected: {expected.page_content}\nGot: {doc.page_content}"
        )
        assert doc.metadata == expected.metadata, (
            f"{test_case} Failed at Document {idx}: "
            f"Metadata mismatch.\nExpected: {expected.metadata}\nGot: {doc.metadata}"
        )
    logger.info(f"{test_case} Passed.")

@pytest.mark.parametrize(
    "headers_to_split_on, html_content, expected_output, test_case",
    [
        (
            # Test Case C: Split on h1, h2, and h3 with no headers present
            [("h1", "Header 1"), ("h2", "Header 2"), ("h3", "Header 3")],
            """

Just some random text without headers.

                        More text here.

            """,
            [
                Document(
                    page_content='Just some random text without headers.  \nMore text here.',
                    metadata={}
                )
            ],
            "Test Case C: Split on h1, h2, and h3 without any headers"
        )
    ]
)
def test_no_headers_with_multiple_splitters(
    splitter_factory: Any,
    headers_to_split_on: List[Tuple[str, str]],
    html_content: str,
    expected_output: List[Document],
    test_case: str
):
    """
    Additional test case where headers to split on include h3, but no headers are present in the HTML.

    Args:
        splitter_factory (Callable): Fixture to create splitter instances.
        headers_to_split_on (List[Tuple[str, str]]): Headers to split on.
        html_content (str): The HTML content to split.
        expected_output (List[Document]): The expected list of Documents after splitting.
        test_case (str): Description of the test case.
    """
    logger.info(f"Running {test_case}")
    splitter = splitter_factory(headers_to_split_on=headers_to_split_on)
    docs = splitter.split_text(html_content)

    logger.info("Generated Documents:")
    for idx, doc in enumerate(docs, start=1):
        logger.info(f"Document {idx}: {doc}")

    assert len(docs) == len(expected_output), (
        f"{test_case} Failed: Number of documents mismatch. "
        f"Expected {len(expected_output)}, got {len(docs)}."
    )
    for idx, (doc, expected) in enumerate(zip(docs, expected_output), start=1):
        assert doc.page_content == expected.page_content, (
            f"{test_case} Failed at Document {idx}: "
            f"Content mismatch.\nExpected: {expected.page_content}\nGot: {doc.page_content}"
        )
        assert doc.metadata == expected.metadata, (
            f"{test_case} Failed at Document {idx}: "
            f"Metadata mismatch.\nExpected: {expected.metadata}\nGot: {doc.metadata}"
        )
    logger.info(f"{test_case} Passed.")

Currently, I have the class is stable and passes all of them. I am doing code-cleaning and doing performance optimization.
The current class also deals with the document as a "tree" and no recursion so we can avoid future problems like the recursion limit exceeded.

@eyurtsev So I have committed the new updates. Please let me know if there are further modifications we need to make.

@eyurtsev, I need some help here. I have added bs4 to the poetry .toml file and updated the poetry lock. However, it still fails tests because no module named bs4. I checked this link: https://python.langchain.com/docs/contributing/how_to/code/setup/#testing
the extended_testing_deps.txt in text-splitters already contains bs4, likely because the section splitter class uses it. So, there must be something I have overlooked.

Hi @eyurtsev,
I have committed the required changes from your comments. Please let me know if further modifications are required.

Hi @eyurtsev, I think you can have a look now. I have made the required changes. I figured out how to make the dependency optional by looking at other scripts in the repo. I made the documentation much clearer.
I have learnt a lot from this one. It is my first contribution to a project on such a scale, and I hope it gets merged. I am eager to contribute more in the future with the experience I have gained from this one.
Lastly, if we require any more changes please let me know.

@eyurtsev I have simplified the implementation following your suggestions. Now,

No nodes or data class for them.
No tree building, instead, splitting on the fly.
The overall code is much more maintainable than before.

Please let me know if we need to do further modification.