text:
Lint/SafeNavigationChain recursively produces incorrect code until failing with SystemStackError

Expected behavior
I expected Rubocop to turn this:
result = context[:current_user]&.calendar_instances&.kept.includes(:account)

Into this:
result = context[:current_user]&.calendar_instances&.kept&.includes(:account)

Actual behavior
2022-12-16 12:10:18 exit=1 ~/fb/rubocop_test % rubocop --debug --autocorrect test.rb
For /Users/jonathonfrisby/fb/rubocop_test: Default configuration from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-1.40.0/config/default.yml
Use parallel by default.
Skipping parallel inspection: only a single file needs inspection
Inspecting 1 file
Scanning /Users/jonathonfrisby/fb/rubocop_test/test.rb
Loading cache from /Users/jonathonfrisby/.cache/rubocop_cache/d1855ea902ef23f202b230bf95bd1902f182507d/6d7a3b621ca1730e04accd938619e4bdab66cfb1/af044475be15d2b963799800a50b64362c622fdc
.

0 files inspected, no offenses detected
/Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node.rb:134:in `complete!': stack level too deep (SystemStackError)
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node/mixin/descendence.rb:28:in `block in each_child_node'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node/mixin/descendence.rb:25:in `each'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node/mixin/descendence.rb:25:in `each_child_node'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node.rb:134:in `complete!'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node/mixin/descendence.rb:28:in `block in each_child_node'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node/mixin/descendence.rb:25:in `each'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node/mixin/descendence.rb:25:in `each_child_node'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-ast-1.24.0/lib/rubocop/ast/node.rb:134:in `complete!'
	 ... 10679 levels...
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/lib/ruby/3.1.0/benchmark.rb:311:in `realtime'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/gems/rubocop-1.40.0/exe/rubocop:19:in `<top (required)>'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/bin/rubocop:25:in `load'
	from /Users/jonathonfrisby/.rbenv/versions/3.1.3/gemsets/rubocop-test/bin/rubocop:25:in `<main>'

Additionally, the line gets changed to:
result = context[:current_user]&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept&.[](:current_user)&.calendar_instances&.kept.includes(:account)

Steps to reproduce the problem
Creating a file with just that line, and running rubocop --autocorrect on it will reliably reproduce the issue on my machine.
Notably, the problem is very clearly triggered by context[:current_user], as changing that to something that does not involve subscripting produces no issues.
This, for example, is handled properly:
result = current_user&.calendar_instances&.kept.includes(:account)

Notably, subscripting in any form causes the issue, so this also fails:
result = context.[](:current_user)&.calendar_instances&.kept.includes(:account)

RuboCop version
1.40.0 (using Parser 3.1.3.0, rubocop-ast 1.24.0, running on ruby 3.1.3) [arm64-darwin21]

Fascinatingly, while it is dying with a stack overflow, it's apparently finished writing the modified statement before doing so, as you can see .includes(:account) at the end of that replacement line.  And, it hasn't actually fixed the safe navigation issue.

TY!

repo: rubocop/rubocop


text:
Rubygems and bundler

Hello again - I had some success running Ruby code in an online page,
as you can see on ://ruby.assembled.app.
This is good progress, and I'm now curious if there is an approach
for requiring ruby gem libraries inside the .wasm package,
so my code can use helpers such as 1.second and "hello".titlecase,
among others.
I recognize some libraries including C extensions, such as Nokogiri,
are unlikely to be runnable inside .wasm unless specially compiled.
For non-C gems, I'm curious if there is a non-compilation approach,
though if compiling a new .wasm binary is necessary, I'd be glad for directions.

I've been working on a couple of different approaches to this, if you'd like to talk about it more, feel free to dm me (on twitter, in bio).
Basically, I've made it (kind of) work by building from source after adding gems to the default gems in 'ruby-wasm32-wasi/usr' as mounted to '/usr' which is kind of clunky 🙈 , and that's why I am also trying to find a more elegant solution.
I would guess the maintainers here have some better thoughts on how to approach this 😄 .

It still needs some hacks, but here is how to use bundler and rubygems on Wasm.
https://gist.github.com/kateinoigakukun/5caf3b83b2732b1653e91b0e75ce3390
The main important points are:

Tell the location of Gemfile by BUNDLE_GEMFILE
Call Bundler.setup instead of bundle exec

@kateinoigakukun - can you also lend some direccions on running C-compiled libraries?
Nokogiri especially could be really usable in online pages.

And looks like your branch #15 merged;
does your approach change much?

I'm not well familiar with nokogiri, but it seems using mkmf. So what needs to be done to support wasm target are:

Support cross-compilation with mkmf and RubyGems builder
Figure out a way to link the compiled extension library with pre-compiled ruby.wasm (wasm doesn't support dynamic linking, so it would be difficult). Or provide an easy way to link 3rd party ext libraries while building. It would be done by generalizing how ruby.wasm links js interop library.

And looks like your branch https://github.com/ruby/ruby.wasm/pull/15 merged;
does your approach change much?

I updated the instruction, but not much changed 👍

I began running your recipe using a couple changes:
I cloned today's release of 3.2.0-dev:
curl -LO https://github.com/ruby/ruby.wasm/releases/download/2022-07-05-a/ruby-head-wasm32-unknown-wasi-full.tar.gz
tar xfz ruby-head-wasm32-unknown-wasi-full.tar.gz
rbenv local 3.2.0-dev

I prepared an example running a simpler rubygem,
ox xml parser.
bundle init
bundle add ox

I added a simple program:
require 'bundler/setup'
require 'net/http'
require 'ox'

Ox.default_options = { mode: :generic, effort: tolerant, smart: true, }

page = Ox.parse Net::HTTP.get URI.parse 'http://example.com'
puts page.locate('*/a')[0].attributes['href']

And some helper code in ./run.sh:
#!/bin/bash

run() {
  wasmtime run \
    --mapdir /usr::./head-wasm32-unknown-wasi-full/usr \
    --mapdir /root::./ \
    --mapdir /dev::/dev \
    --env BUNDLE_GEMFILE=/root/Gemfile \
    head-wasm32-unknown-wasi-full/usr/local/bin/ruby -- \
    "$@"
}

run --version
run '-e' 'puts Dir.glob("/root/vendor/bundle/ruby/3.2.0+1/gems/*")'
run /root/ox.rb

I seemed prepared enough, only by some quirk my rubygems had gone missing.
[grace@chesapeake ruby]$ ./run.sh
ruby 3.2.0dev (2022-07-06) [wasm32-wasi]
/root/vendor/bundle/ruby/3.2.0+1/gems/ox-2.14.11
Could not find ox-2.14.11 in any of the sources
Run `bundle install` to install missing gems.

Perhaps in a side discussion, can you explain the socket error I see
as I load net/http inside wasmtime?
[grace@chesapeake ruby]$ run -e "require 'net/http'"
Ignoring debug-1.5.0 because its extensions are not built. Try: gem pristine debug --version 1.5.0
Ignoring rbs-2.6.0 because its extensions are not built. Try: gem pristine rbs --version 2.6.0
<internal:/usr/local/lib/ruby/3.2.0+1/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- socket (LoadError)
        from <internal:/usr/local/lib/ruby/3.2.0+1/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from /usr/local/lib/ruby/3.2.0+1/net/protocol.rb:22:in `<top (required)>'
        from <internal:/usr/local/lib/ruby/3.2.0+1/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from <internal:/usr/local/lib/ruby/3.2.0+1/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from /usr/local/lib/ruby/3.2.0+1/net/http.rb:23:in `<top (required)>'
        from <internal:/usr/local/lib/ruby/3.2.0+1/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from <internal:/usr/local/lib/ruby/3.2.0+1/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from -e:1:in `<main>'

@c4lliope It looks like ox gem has a native extension. You need to manage to build extensions as wasm object files and link  them with CRuby statically.

I had been guessing my problem is misaligned ruby version numbers;
e.g. the rubygems path /root/vendor/bundle/ruby/3.2.0+1/gems/*
is unrecognized by the 2022-07-05a release of ruby.wasm?

@c4lliope You can see which paths are in the search path by:
wasmtime run \
  --mapdir /usr::./head-wasm32-unknown-wasi-full/usr \
  --mapdir /root::./ --mapdir /dev::/dev \
  --env BUNDLE_GEMFILE=/root/Gemfile \
  head-wasm32-unknown-wasi-full/usr/local/bin/ruby -- -e 'require "bundler/setup"; puts $:'

And you will see /root/vendor/bundle/ruby/3.2.0+1/gems/* is recognized well.
Also you can see more verbose log by replacing require "bundler/setup" by require "bundler"; Bundler.setup and add --env DEBUG=1, then you will see:
$ wasmtime run \
  --mapdir /usr::./head-wasm32-unknown-wasi-full/usr \
  --mapdir /root::./ --mapdir /dev::/dev \
  --env BUNDLE_GEMFILE=/root/Gemfile --env DEBUG=1 \
  head-wasm32-unknown-wasi-full/usr/local/bin/ruby -- /root/my_app.rb

Found no changes, using resolution from the lockfile
Source locally installed gems is ignoring #<Bundler::StubSpecification name=ox version=2.14.11 platform=ruby> because it is missing extensions
/usr/local/lib/ruby/3.2.0+1/bundler/definition.rb:486:in `materialize': Could not find ox-2.14.11 in any of the sources (Bundler::GemNotFound)
        from /usr/local/lib/ruby/3.2.0+1/bundler/definition.rb:191:in `specs'
        from /usr/local/lib/ruby/3.2.0+1/bundler/definition.rb:239:in `specs_for'
        from /usr/local/lib/ruby/3.2.0+1/bundler/runtime.rb:18:in `setup'
        from /usr/local/lib/ruby/3.2.0+1/bundler.rb:151:in `setup'
        from /root/my_app.rb:2:in `<main>'

Please note that Source locally installed gems is ignoring #<Bundler::StubSpecification name=ox version=2.14.11 platform=ruby> because it is missing extensions
Again, ox has C extension library and it's not compiled in your build script. That's why it fails.

Hello! I'm seeing some progress, and some remaining errors.
I had an example going with the simple and dependency-less colorize gem.
The approach described in @kateinoigakukun 's gist had been good background.
I began seeing an odd error with the gem he chose as an example, though - syntax_tree.
$ wasmtime run \
  --mapdir /usr::3_2-wasm32-unknown-wasi-full/usr \
  --mapdir /src::./src \
  --env BUNDLE_GEMFILE=/src/Gemfile \
  ruby.wasm -- /src/tree.rb
Could not find fiddle-1.1.1 in locally installed gems
Run `bundle install` to install missing gems.

Looking closer, the fiddle gem appears to be a "default" gem,
and is therefore packaged inside the 3.2.0 ruby installation.
$ bundle install
Using bundler 2.4.1
Using colorize 0.8.1
Using fiddle 1.1.1
Using prettier_print 1.2.0
Using syntax_tree 5.3.0
Bundle complete! 3 Gemfile dependencies, 5 gems now installed.
Bundled gems are installed into `./bundle`
$ bundle show syntax_tree
/home/grace/src/ruby-wasm/src/bundle/ruby/3.2.0/gems/syntax_tree-5.3.0
$ bundle show fiddle
/home/grace/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/fiddle-1.1.1

Since my Ruby versions are the same, I'd imagine fiddle should be a "default" gem in ruby.wasm also:
$ ruby -v
ruby 3.2.0 (2022-12-25 revision a528908271) [x86_64-linux]
$ wasmtime ruby.wasm -- -v
ruby 3.2.0 (2022-12-25 revision a528908271) [wasm32-wasi]

Sadly, no fiddle in ruby.wasm:
$ ls 3_2-wasm32-unknown-wasi-full/usr/local/lib/ruby/gems/3.2.0/gems/
abbrev-0.1.1           etc-1.4.2          net-pop-0.1.2       psych-5.0.1           singleton-0.1.1
base64-0.1.1           fcntl-1.0.2        net-protocol-0.2.1  racc-1.6.2            stringio-3.0.4
benchmark-0.2.1        fileutils-1.7.0    net-smtp-0.3.3      rake-13.0.6           strscan-3.0.5
bigdecimal-3.1.3       find-0.1.1         nkf-0.1.2           rbs-2.8.2             syntax_suggest-1.0.2
bundler-2.4.1          forwardable-1.3.3  observer-0.1.1      rdoc-6.5.0            tempfile-0.1.3
cgi-0.3.6              getoptlong-0.2.0   open3-0.1.2         readline-0.0.3        test-unit-3.5.7
csv-3.2.6              ipaddr-1.2.5       openssl-3.1.0       reline-0.3.2          time-0.2.1
date-3.3.3             irb-1.6.2          open-uri-0.3.0      resolv-0.2.2          timeout-0.3.1
debug-1.7.1            json-2.6.3         optparse-0.3.1      resolv-replace-0.1.1  tmpdir-0.1.3
delegate-0.3.0         logger-1.5.3       ostruct-0.5.5       rexml-3.2.5           tsort-0.1.1
did_you_mean-1.6.3     matrix-0.4.2       pathname-0.2.1      rinda-0.1.1           typeprof-0.21.3
digest-3.1.1           minitest-5.16.3    power_assert-2.0.3  rss-0.2.9             un-0.2.1
drb-2.1.1              mutex_m-0.1.2      pp-0.4.0            ruby2_keywords-0.0.5  uri-0.12.0
english-0.7.2          net-ftp-0.2.0      prettyprint-0.1.1   securerandom-0.2.2    weakref-0.1.2
erb-4.0.2              net-http-0.3.2     prime-0.1.2         set-1.0.3             yaml-0.2.1
error_highlight-0.5.1  net-imap-0.3.4     pstore-0.1.2        shellwords-0.1.0      zlib-3.0.0

Here are the gems in my normal Ruby 3.2.0:
$ ls ~/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/gems/
abbrev-0.1.1           getoptlong-0.2.0              ostruct-0.5.5         ruby2_keywords-0.0.5
addressable-2.8.1      io-console-0.6.0              pathname-0.2.1        rubygems-update-3.4.5
base64-0.1.1           io-nonblock-0.2.0             power_assert-2.0.3    securerandom-0.2.2
benchmark-0.2.1        io-wait-0.3.0                 pp-0.4.0              set-1.0.3
bigdecimal-3.1.3       ipaddr-1.2.5                  prettyprint-0.1.1     shellwords-0.1.0
bundler-2.4.1          irb-1.6.2                     prime-0.1.2           singleton-0.1.1
bundler-2.4.5          json-2.6.3                    pry-0.14.2            stringio-3.0.4
capybara-3.38.0        logger-1.5.3                  pstore-0.1.2          strscan-3.0.5
cgi-0.3.6              matrix-0.4.2                  psych-5.0.1           syntax_suggest-1.0.2
coderay-1.1.3          method_source-1.0.0           public_suffix-5.0.1   syslog-0.1.1
csv-3.2.6              mini_mime-1.1.2               racc-1.6.2            tempfile-0.1.3
date-3.3.3             minitest-5.16.3               rack-3.0.4.1          test-unit-3.5.7
debug-1.7.1            mutex_m-0.1.2                 rack-test-2.0.2       time-0.2.1
delegate-0.3.0         net-ftp-0.2.0                 rake-13.0.6           timeout-0.3.1
did_you_mean-1.6.3     net-http-0.3.2                rbs-2.8.2             tmpdir-0.1.3
digest-3.1.1           net-imap-0.3.4                rdoc-6.5.0            torch-rb-0.12.0
drb-2.1.1              net-pop-0.1.2                 readline-0.0.3        torch-rb-0.12.1
english-0.7.2          net-protocol-0.2.1            readline-ext-0.1.5    tsort-0.1.1
erb-4.0.2              net-smtp-0.3.3                regexp_parser-2.6.2   typeprof-0.21.3
error_highlight-0.5.1  nkf-0.1.2                     reline-0.3.2          un-0.2.1
etc-1.4.2              nokogiri-1.14.0-x86_64-linux  resolv-0.2.2          uri-0.12.0
fcntl-1.0.2            observer-0.1.1                resolv-replace-0.1.1  weakref-0.1.2
fiddle-1.1.1           open3-0.1.2                   rexml-3.2.5           xpath-3.2.0
fileutils-1.7.0        openssl-3.1.0                 rice-4.0.4            yaml-0.2.1
find-0.1.1             open-uri-0.3.0                rinda-0.1.1           zlib-3.0.0
forwardable-1.3.3      optparse-0.3.1                rss-0.2.9

There's much ruby.wasm can do alone, though real adoption can only happen
once people can add and use gems as easily as on their base machine.
If we can agree on these 'default' gems included in each distribution,
this could be a good launchpad for more gem access on wasm.

In short, fiddle is unavailable on the WASI platform due to a lack of runtime dynamic linking. I know it's one of the most crucial library to get real-world adoption, so we should have a way to mitigate this situation. But I think it will be happened after supporting extension libraries in RubyGems

I tried the example in your gist without success, in fact I'm not sure I even understand it (shouldn't it need to build with the vfs first?). Anyway, I attached my experience to that. Has anyone actually managed to do this at all, or should I just inline code (pure ruby only, obviously) to add additional libraries?
FYI the lib I was trying with was a pure-ruby msgpack gem.

I added a simple CLI tool to package gems into .wasm https://github.com/ruby/ruby.wasm/pull/358. It supports pure Ruby gems and very simple extension libraries at this moment.
We can support more complex extension libraries like nokogiri after dynamic linking support.

I just wrote a FAQ entry query, for gem support. I did not know this thread exists before.

I added an experimental CLI tool to package gems into .wasm https://github.com/ruby/ruby.wasm/pull/358. It supports pure Ruby gems and very simple extension libraries at this moment.

Hey there kateinoigakukun - could you add a FAQ entry perhaps, and simple usage example, at the least for a simple gem? Perhaps one day more complex gems work but for me I'd be happy to just have small gems that do things be supported. I want to find out how many of my gems I can make work via wasm.ruby, and that includes super-simple gems like hello world or perhaps a bit more complicated ones. Also, if anyone has time, it would be nice to show limitations; I assume we can not create directories or files via a .html file that has ruby.wasm? If so it would be GREAT, but if not then I understand it, the browser is a limited environment. The FAQ could mention this though - I desperately need documentation. I am really bad at figuring out things on my own (except for a bit of trial and error, and reading other people's examples; that would also be nice to have for ruby.wasm, examples by other people so we can learn from that).

source: gharchive/issue

authors: c4lliope dphilla jtippett kateinoigakukun rubyFeedback

license: MIT

license_type: permissive

license_source: github-api


text:
[FAQ] Primary authors and / or maintainers

Would it be possible to add to the FAQ the primary authors and / or current maintainers?
Just so people know who they could correspond with, if a need arises to do so. Right now
I do not know who created the project and/or maintains it. Thus a FAQ entry may be
useful for that.

You can find such information in the .gemspec and I think it's very common convention to check the file

authors: kateinoigakukun rubyFeedback


text:
Should be able to select items for audit that have 0 inventory.

Summary
You can only select items for auditing that already have inventory in the chosen storage location.  You should be able to select any active item.
Why?
If someone is doing an audit, and has stock of items that have not been entered into system for that storage location, they should be able to add them in at audit time.   Also,  this bug effectively precludes someone using the audit feature to set up their stock levels.
Details
Sign in as org_admin1@example.com.  Choose Inventory,  Items & Inventory.  Enter a new item.  Then,  Choose Audit,  pick a storage location, then try to pick the item you just entered.  You can't.   You should be able to.
Criteria for completion

[ ] Audit item drop downs include all active items, even if the storage location has no inventory of them
[ ] Tests to confirm that.

I'd like to give this issue a try :)

Please do -- fair warning,  I think this is going to be quite a bit more challenging than the first one.

thankyou for reminding, i'll back to you once found something challenging :)

hi @cielf  I’m following the instructions to add a new item and then audit it, but I’m a bit confused. There are several tabs on the "Items & Inventory" page (screenshot). Could you let me know which tab I should use to add the item? Thanks!

hi @cielf I’m following the instructions to add a new item and then audit it, but I’m a bit confused. There are several tabs on the "Items & Inventory" page (screenshot). Could you let me know which tab I should use to add the item? Thanks!

Click the "New Item" button on the Item list to bring up the New Item form.

Ok -- so we found out that a new item in the above case actually works.  But this sequence doesn't
log in as org_Admin2@example.com  -- this is a brand new organization
add a storage location
Then  Audit, new Audit, choose a storage location and try to add an item.

The desired result is that when we do an audit,  we can add entries for any active items, whenever they were added.
We want to enable using the audit as a valid way to set up the initial inventory levels — which they can’t yet.
When the bank is set up as a brand new bank,  we initialize a  list of items, which are standard sizes of diapers, etc.  They might use that list of items as is,  or add to it before setting up their initial inventory...
I think (without delving into the code)  that what may be happening now is that the list of items available in the audit is the list of items that have some association with the storage location.   We don’t add all the items to each storage location initially because not everyone actually uses the entire list — but if they are adding a new item,  they are probably going to be using it!
However, for audit purposes, we want them to be able to select any active item.
Hope that helps!

I'm reading up on Audits to understand the workflow. The docs say:

When you do an inventory count, you’ll want to set the inventory in each Storage Location to the physical count. That’s what the Audits function is for.

Does this mean that the person doing the audit is physically present at the storage location, and going over each Item in the location, counting up how many there are, and then entering that number into the system?
But based on the description of this issue: Is it possible that the person conducting the audit, has possession of some items, but they're not yet in a storage location? If so, where are these items? Is the person planning to place them in the storage location soon after audit/counting them?
I'm trying to match up my intuition of what an audit is with what the actual process might be. I'm picturing someone in a warehouse with their mobile browser at the Audit screen, going over all the items on the shelves, counting them, then entering this number into the system.
But if its possible for items to be counted but not yet in a storage location, could this cause confusion with someone looking at the audit numbers and assuming this means those items are available in storage?

@danielabar I could be wrong, but I think of the audit as a way to get the actual current quantity of items in a storage location, not necessarily what is supposed to be there based on previous donations/distributions/etc. Because who knows if things have come or gone either due to an accounting mistakes or something.

Btw I have been working on a PR related to these item dropdown options so I'm familiar with this part of the codebase. I think the fix for this could be as simple as applying this patch:
diff --git a/app/views/audits/_form.html.erb b/app/views/audits/_form.html.erb
index d9014cae..8cb798a5 100644
--- a/app/views/audits/_form.html.erb
+++ b/app/views/audits/_form.html.erb
@@ -14,7 +14,7 @@

                 <%= simple_form_for @audit, data: { controller: "form-input" }, html: {class: "storage-location-required"} do |f| %>
-                  <%= render partial: "storage_locations/source", object: f, locals: { label: "Storage location", error: "What storage location are you auditing?" } %>
+                  <%= render partial: "storage_locations/source", object: f, locals: { label: "Storage location", error: "What storage location are you auditing?", include_omitted_items: true } %>
                   <fieldset style="margin-bottom: 2rem;">
                     <legend>Items in this audit</legend>

@danielabar -- @coalest is right -- the purpose of entering an audit, in this system,  is to record the actual  current physical count of items in a storage location.     It sort of corresponds to "doing inventory" in a retail setting.
In an ideal world, it would match up to the sum of the donations and purchases minus the distributions.  But that's not how reality works g.
The current version of the audit only allows you to pick items that have already been added to the storage location (i.e. that have had purchases, donations, transfers to, or inventory adjustments).
We want the users to be able to pick any of the bank's active items.   (If they find inventory of inactive items, then they'd need to make them active again to enter them in the audit.)   This will let new banks use the audit to record an initial physical count of what is in a storage item to set things up --- rather than using the workaround of recording a donation of their current inventory.    Which will make for better reporting.

"Is it possible that the person conducting the audit, has possession of some items, but they're not yet in a storage location? If so, where are these items? Is the person planning to place them in the storage location soon after audit/counting them?"
To answer this question specifically -- nope,  it's a record of the physical count of what is in the location.  Which, due to human factors may be different than the sum of all the inventory-based transactions.    For instance, someone may neglect to enter a distribution,  or a donation.    The audit brings the numbers back in line.

@coalest Thanks for the tip on include_omitted_items: true in the audit form partial.
That does allow the user to select items for audit that have no current inventory, but they still don't show up in the Save Progress/View screen or in any view after audit is finalized.
I think the issue is not so much that inventory is 0 (although that's how it shows in UI) but rather that inventory_item records (and association to a storage location) don't exist at all.
Will continue investigating...

I think that if they are still zero, then not showing up in the save progress screen would be ok,  but if you have entered a value, then they need to.
It  might be ok, and probably simpler,  to just have all the organization's active items show up in that screen, the same as the drop down.   We can change it if we get complaints.
I'm not sure (haven't looked) if the "include_omitted" includes inactive -- I expect it does, so we might need something else for that selection.

@danielabar just to confirm - inventory_items themselves no longer exist at all. We've replaced them with inventory calculated via events.

@dorner Good to know, thanks! In the code there's still InventoryItem model, table, and Item model has_many :inventory_items, but maybe that's for a future task to cleanup if unused.

@cielf I have something that appears to be working as per description, although not sure about active vs inactive items: https://github.com/danielabar/human-essentials/tree/4594-audit-items-zero-inventory
Could you try it out if you have a chance?

Thanks, Daniela
I took a partial audit of a brand new item  through to the end of the audit process.
It is showing inactive items in the dropdown (and shouldn't).
It isn't showing them in the views after you save progress, confirm audit, or finalize audit,  which is right.
For convenience, In the seed,  Active Briefs (Large/XL)  is an inactive item.  Conveniently, it's also the first item alphabetically.

@cielf Confirmed that the inactive product is Adult Briefs (Large/X-Large):
items = Item.select(:id, :name, :active).where(active: false)
# two items returned, its the same named item but for different organizations
[
  #<Item:0x000000011ff958d8 id: 48, name: "Adult Briefs (Large/X-Large)", active: false>,
  #<Item:0x000000011ff95798 id: 1, name: "Adult Briefs (Large/X-Large)", active: false>
]

Here's the interaction I observed when trying to select an inactive item for audit:
The inactive item(s) only shows in the dropdown when no Storage location has been selected:

But then it won't allow adding any more items:

Trying to save progress at that point results in an error "Storage location must exist":

Then when user selects a storage location, the inactive item(s) disappear from the dropdown:

So user won't be able to actually audit an inactive item, and if they fill out the form in sequence, first selecting a storage location, they'll never see inactive items in the dropdown.
Is that ok?
OR
Should it be modified such that the dropdown doesn't populate until after a storage location is selected? (maybe there are other forms that work that way).

I think that filtering out the inactive items before the initial rendering is the right way to go -- principle of least surprise.

authors: auliafaizahr cielf coalest danielabar dorner

repo: rubyforgood/human-essentials


text:
Cannot provide a defaultTool to Agent chat()

Describe the bug
The python version of LlamaIndex allows you to force an agent to always use a tool (https://github.com/run-llama/llama_index/issues/13957)
# Forced function call
response = agent.chat("What is 5 * 2?", tool_choice="useless_tool")

There appears to be no such way to do this with Typescript.

OS: [e.g. macOS, Linux]
JS Runtime / Framework / Bundler (select all applicable)
[x] Node.js

we don't support that in LITS for now, PR are welcome

For now, you can pass additionalChatOptions.tool_choice

repo: run-llama/LlamaIndexTS


text:
[Question]: How to get nodes from ES ？

Question Validation

[X] I have searched both the documentation and discord for an answer.

Question
我实现创建了index到ES中，现在按照LLamaindex的官网指导
https://docs.llamaindex.ai/en/stable/examples/retrievers/bm25_retriever/
创建自定义的检索器(结合矢量检索器和 BM25 检索器),实现 Hybrid Retriever ：
class HybridRetriever(BaseRetriever):
def init(self, vector_retriever, bm25_retriever):
self.vector_retriever = vector_retriever
self.bm25_retriever = bm25_retriever
super().init()
def _retrieve(self, query, **kwargs):
    bm25_nodes = self.bm25_retriever.retrieve(query, **kwargs)
    vector_nodes = self.vector_retriever.retrieve(query, **kwargs)

    # combine the two lists of nodes
    all_nodes = []
    node_ids = set()
    for n in bm25_nodes + vector_nodes:
        if n.node.node_id not in node_ids:
            all_nodes.append(n)
            node_ids.add(n.node.node_id)
    return all_nodes

但是我遇到一个问题，我需要实例化两个检索器。其中：vector_retriever 是这样实例化：
vector_store = ElasticsearchStore(
index_name=es_index_name, es_url=CONS_ELASTIC_SEARCH_URL
)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_vector_store(embed_model=Settings.embed_model, vector_store=vector_store,
storage_context=storage_context)
vector_retriever = index.as_retriever(similarity_top_k=10) 。这个是ok的。
但是：在实例化bm25_retriever时候：、
bm25_retriever = BM25Retriever.from_defaults(nodes=nodes, similarity_top_k=10)出错，请问大家，如何从已保存index的ES中得到nodes ，然后实例化bm25_retriever
我在保存index的代码是这样的：存储index是ok的。
def load_nodes(file_dir: str) -> List[BaseNode]:
documents = read_file(input_dir=file_dir, required_exts=[".csv"], recursive=False)
parser = SentenceSplitter(chunk_size=CHUNK_SIZE, chunk_overlap=CHUNK_OVERLAP)
nodes = parser.get_nodes_from_documents(documents)
logging.info("node的数量：{num}".format(num=len(nodes)))
return nodes
def save_es_index(nodes: List[BaseNode], index_name: str, es_url: str):
vector_store = ElasticsearchStore(
index_name=index_name, es_url=es_url
)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
storage_context.docstore.add_documents(nodes)
index = VectorStoreIndex(nodes, storage_context=storage_context,
show_progress=True)
return index
def load_csv_data_to_es(file_path: str, index_name: str = "hr_nodes"):
nodes = load_nodes(file_dir=file_path)
save_es_index(nodes=nodes, index_name=index_name, es_url=CONS_ELASTIC_SEARCH_URL)
感谢感谢。

@yzgrfsy  You should create elasticsearch bm25 retriever like this:
from llama_index.vector_stores.elasticsearch import AsyncBM25Strategy
from llama_index.core import Settings

text_store = ElasticsearchStore(
    index_name="avengers",
    es_url="http://localhost:9200",
    retrieval_strategy=AsyncBM25Strategy(),
)
Settings.embed_model = embed_model
text_index = VectorStoreIndex.from_vector_store(
    vector_store=text_store,
)
text_retriever = text_index.as_retriever(similarity_top_k=2)

authors: yzgrfsy zhaozhiming


text:
The Destination service should indicate, for each destination, whether the service supports TLS

Along with the destination IP address and port, the destination service should indicate whether the service supports TLS using the conduit CA. I propose that this indicator be an enumeration something like this:
enum TLSSupport {
    // Assume it doesn't support TLS.
    Unknown = 0;

    // Assume it supports TLS using the default mesh settings.
    MeshDefault = 1;
}

Initially the Destination service should use TLSSupport::MeshDefault for any endpoint that has the conduit proxy injected into it (as determined from the EndPoints API), and TLSSupport::Unknown for destinations that aren't discovered by the EndPoints service.
This would make the Destinations service will be part of the TCB for the mesh. Later when routing is added we will revisit this, hopefully by fully moving the TLS decision making to routing.

Initially the Destination service should use TLSSupport::MeshDefault for any endpoint that has the conduit proxy injected into it (as determined from the EndPoints API)

Note: this should be _any endpoint that has the conduit proxy injected into AND is controlled by the same controller.

Related: https://github.com/runconduit/conduit/issues/951

Based on discussion yesterday the current plan is to use TLS when the destination's controller namespace is equal to the current pod's controller namespace.
In the immediate term, the plan described yesterday is fine. We should encapsulate this logic in a single place that turns a destination endpoint pair (SocketAddr, labels) into a (SocketAddr, bool) where that boolean flag indicates whether the labels indicate that TLS will work. We should write some tests that take responses from the Destination service and verify that we're setting this flag correctly.
Later we'll need to support pods using different controllers communicating with each other, e.g. to handle the case where the user is trying to upgrade Conduit by creating a new namespace for the new version of the controller and then migrating pods incrementally to the new controller. In that scenerio, we don't want to lose TLS protections when such a migration happens. We will need to change how we handle the distribution of the the Conduit CA bundle and how we determine whether or not to use TLS (and what CA bundle to use, when we do) to account for this. However, we can do that separately, and it should be straightforward to do so if we encapsulate and isolate this logic as described in the preceding paragraph.

in a single place

Note that the flag needs to be available, ultimately, as an argument to Connection::connect().

It's fine for it to be a boolean for now. Definitely we're going to change it later to address the longer-term issues, which will require more than a single enum can express anyway. The important thing for now is to to abstract away the labels and to test that our short-term namespace matching works as we expect.

Based on our conversation today, here is my proposal for the changes we intend to make to how we determine whether to use TLS for a given connection:

Add a new field tls_verification_strategy (name not final) to the Destination service's WeightedAddrSet protobuf message:

message WeightedAddr {
  common.TcpAddress addr = 1;
  uint32 weight = 3;
  map<string, string> metric_labels = 4;

  message NameAndNamespace {
    string controller_namespace = 1;
    string pod_name = 2;
  }

  oneof tls_verification_strategy {
     NameAndNamespace name_and_namespace = 5;
  }
}

This is a oneof field to allow additional  verification strategies to be added in the future.
2. If TLS is enabled for a given pod as determined by the control plane, the Destination service will send the name and controller namespace of that pod in the tls_verification_strategy field. Otherwise, the  field will not be set (nil/None).
3. PR  #1008 will be changed so that rather than providing the Connect function with a tls_enabled boolean, it will be provided with an Option<TlsVerificatonStrategy>.
4. For a given endpoint, the TLS code in the proxy will determine whether to use TLS based on the following logic:
if the endpoint has a tls_verification_strategy and the controller namespace is the same as that proxy's controller namespace:
then the connection will use TLS
else the connection will not use TLS
5. If the proxy used TLS, it will set a tls="true" label, otherwise, it will set a tls="false" label.
6. The UI will be changed to use the value of the tls label, rather than the meshed label, to determine if a connection was secured.
Does this sound correct?
/cc @olix0r, @briansmith. @klingerf

if the endpoint's tls_verification_strategy is Some(TlsVerificationStrategy::NameAndNamespace), then the proxy will set the meshed="true" label, ...
else, the proxy will set the meshed="false" and tls="false" labels

This is surprising. What does the meshed flag have to do with TlsVerificationStrategy? I would expect this decision to be entirely unrelated to this field; and only the tls field should be impacted.

Also, let me suggest some minor changes to your proposed protobuf:
message WeightedAddr {
  common.TcpAddress addr = 1;
  uint32 weight = 3;
  map<string, string> metric_labels = 4;
  tls_verification_strategy = 5;
}

message TlsVerificationStrategy  {
  NameAndNamespace name_and_namespace = 1;

  message NameAndNamespace {
    string controller_namespace = 1;
    string pod_name = 2;
  }
}

The main benefit of this is that TlsVerificationStrategy messages need not be scoped under WeightedAddr -- there's nothing about the message type that needs to be scoped onto an individual address.  Furthermore, oneofs need not be introduced early -- they can be introduced later once there are more variants.
Also, what does pod_name mean in this context? Is it specific to a kubernetes resource? If so, we should change the name to be KubernestesPodValidation or something.  If it's not kubernetes-specific, we should avoid using pod_ prefixes

@olix0r

if the endpoint's tls_verification_strategy is Some(TlsVerificationStrategy::NameAndNamespace), then the proxy will set the meshed="true" label, ...
else, the proxy will set the meshed="false" and tls="false" labels

This is surprising. What does the meshed flag have to do with TlsVerificationStrategy? I would expect this decision to be entirely unrelated to this field; and only the tls field should be impacted.

This is a good point. That field should still be set based on the presence of a controller namespace label (if we still care about having a meshed label in addition to the tls label?).

Also, what does pod_name mean in this context? Is it specific to a kubernetes resource? If so, we should change the name to be KubernestesPodValidation or something. If it's not kubernetes-specific, we should avoid using pod_ prefixes

Also a good point. This strategy would be kubernetes-specific, as it uses the pod namespace. Will change the name to make that clear. 👍

Oh, also @olix0r:

Furthermore, oneofs need not be introduced early -- they can be introduced later once there are more variants.

I thought it was worth making this a oneof to begin with so that prost will generate a Rust enum with one variant, in the hopes of minimizing the necessary proxy changes if we want to add more variants later. WDYT?

@hawkw i think it's fine to make it a oneof to start, just noting that protobuf allows you to make a single field a oneof later without breaking wire compat

@briansmith, if possible, I'd like to get your approval on this proposal before going too much farther on this.

@hawkw Thanks for writing this up. I've added issues for the controller work in #1039 and #1040. I also just wanted to verify my understanding of how we're handling metric labels. Specifically:

The proxy will not set a meshed label
The proxy will only set a tls label if the connection uses TLS; the value of the label will be tls="true"
The proxy will not set a tls label if the connection does not use TLS

Is that consistent with your understanding?

It's my expectation that the meshed label is still useful (and distinct from the tls label), but that we may not have a use case for consuming this label yet. Unless it's costly to maintain it, I have a slight preference for leaving the meshed label unchanged and only introducing a new label.

@olix0r

Unless it's costly to maintain it, I have a slight preference for leaving the _meshed _label unchanged and only introducing a new label.

Currently, there is no code for setting a meshed label in the proxy. By "leaving it unchanged", do you mean that we should not add this label, or that we should add code to add that label?
@klingerf

The proxy will not set a meshed label
The proxy will only set a tls label if the connection uses TLS; the value of the label will be tls="true"
The proxy will not set a tls label if the connection does not use TLS

Modulo any decision regarding whether or not we set a meshed label, this is correct. Regardless of whether or not we eventually add such a label, it should not indicate that a connection used TLS.

By "leaving it unchanged", do you mean that we should not add this label, or that we should add code to add that label?

My mistake. It's fine to omit for now and we can introduce this label if we need it later.

@olix0r Okay, thanks for clearing that up! 👍

I've renamed this issue, as the actual changes to the Destination service should now be tracked by #1040.

I believe this was completed a fairly long time ago. :)

authors: briansmith hawkw klingerf olix0r

repo: runconduit/conduit


text:
compiled files missing in release

Maybe you want use:
https://github.com/FriendsOfShopware/platform-plugin-dev-docker
Or commit compiled files :thinking:

Ah that's what I was looking for. I knew I had seen a docker image to build plugins in CI somewhere, but was unable to find it when I was setting up the Github Actions.
Thanks! I'll be looking into this!

It looks like my test release went through perfectly 🥳
I'll be looking at the PR later and will then create a new release with the correct builds.

Woops, referenced the wrong issue in my commit. But the action is running, and this should be fixed now :D

authors: runelaenen tinect


text:
Update fashionscape to v1.1.1

Fixes a rather annoying bug where the player's body parts would disappear when turning the plugin off. Turns out I was always debugging with items equipped in-game and never noticed, heh.

Think this fixes it now. It was a threading issue turns out

source: gharchive/pull-request

repo: runelite/plugin-hub


text:
update discord-rare-drop-notificater

Updates the notificater to get rid of spam. Also adds a new option to send 'unique' loot only.
Besides that, some refactoring, optimisation, thread safety & applying RL's coding conventions toke place.
https://github.com/BossHuso/discord-rare-drop-notificater/commit/5eca8793cad2d3c87af99215ba6cdc5dc4c68f81

Oh might mention here as well as it might speed up the process.
I'm one of the maintainers on the repo and talked with @BossHuso about these changes, perhaps he can confirm.


text:
Update Collection log plugin to v2.0

Remove old configs that cluttered runelite config file
Save collection log data to file on logout
Add new directory for collection log data exports
Add config to upload collection log data to collectionlog.net
Remove buggy collection log updating on new drop

collectionlog.net site repo
collection log api api repo

We don't have a way to add warnings to to existing plugins without renaming the plugin. However since your network io is locked behind a default-off config option, you can add a warning to the config instead, and explicitly check it before doing any requests (ideally in apiRequest, since that makes it trivial for us to verify its working as intended)

Updated

authors: abextm evansloan


text:
Add combo-runes-only v1.0

This plugin removes the Craft-rune option from the fire altar, so that users don't accidentally make fire runes instead of lava/steam/whatever

essence-running already does this btw

I tried Essence Running and it wasn't for me. It's not an exact-match feature wise, since it opens the right click menu on click, instead of just ignoring it, and I didn't want to bring in all the other unwanted pieces of Essence Running.

Originally I also wasn't planning to submit this since it's really small, but another user in the discord mentioned they would like to have it as well.

authors: abextm llamositopia


text:
Exiting Diablo II casts the game into a white screen

Describe the bug
Opening Diablo II and then closing it while RuneLite is open turns the game client into a white screen.
This can be remedied by doing something that causes a screen update (e.g changing resolution, low detail mode, etc.)
To Reproduce

Open RuneLite and Diablo II concurrently.
Close Diablo II.
The game client is now a white screen

Expected behavior
The game should continue as normal, with nothing unusual happening.
Screenshots

Environment (please complete the following information):

OS: Arch Linux (X, icewm, no compositor)
RuneLite version: 1.6.18.1
Launcher version: 2.1.0
Diablo II version: 1.13c

Does disabling hardware acceleration fix this for you? Also, can you upload your client.log and launcher.log files from when this occurs?

fixed in f072c82973d58889abcb3df064ac3efb2eee4deb

authors: AcridBrimistic Adam- Nightfirecat

repo: runelite/runelite


text:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) Runelite Client Crash

Type
Crash or hang
Operating System
Windows
OS Version
Windows 11
Bug description
At Random intervals and without warning/known trigger the Runelite client shuts off/crashes. Can be within 3 minutes, can be after an hour. Can be without even doing anything when client is up. Always the same errors: EXCEPTION_ACCESS_VIOLATION (0xc0000005).
What have I tried?

Reinstalling Java
Reinstalling c++ visual studio
Reinstalling Runelite
Updating Motherboard bios
Updating Motherboard chipset
Updating Nvidia Drivers, multiple tested
Disabling XMP in bios
Removing all runescape and Runelite related files/folders/programs
No 3rd party plugins

Screenshots or videos
Client info:
2022-08-25 10:51:15 [Client] WARN  n.runelite.client.eventbus.EventBus - Uncaught exception in event subscriber java.lang.NullPointerException: null 	at net.runelite.client.plugins.crowdsourcing.movement.CrowdsourcingMovement.onGameTick(CrowdsourcingMovement.java:73) 	at net.runelite.client.eventbus.EventBus$Subscriber.invoke(EventBus.java:70) 	at net.runelite.client.eventbus.EventBus.post(EventBus.java:223) 	at net.runelite.client.callback.Hooks.tick(Hooks.java:197) 	at client.of(client.java:17085) 	at client.g(client.java) 	at ab.ya(ab.java:362) 	at ab.run(ab.java:341) 	at java.base/java.lang.Thread.run(Unknown Source)
RuneLite version
Runelite version 1.8.32
Launcher version 2.4.5
Logs
client.log
launcher.log
jvm_crash_pid_14388.log

Duplicate of #10628, we don't know what causes this crash.

authors: Nightfirecat problemsproblemsyes


text:
timestamp not working

Type
Incorrect behavior
Operating System
Windows
OS Version
win 11
Bug description
timestamps not showing up today has been working for long time just fine
Screenshots or videos

RuneLite version
2.6.7
Logs
No response

you have to restart the client to receive updates

authors: Alexsuperfly gtoilet


text:
Are we still allowed to Fork?

Are we still allowed to Fork?

All whom see this, please know. This account is not with the Jagex Moderation team. Please ignore all messages until this user is banned.

authors: Mod-Archie Mod-MattK


text:
Precompile the split regex in RaidsPlugin

Performance enhancement, prevents Pattern.compile(regex) being run more than necessary.

Updated to use Text.fromCSV

@deathbeam changes look good to me!

authors: WilliamCollishaw deathbeam


text:
Why am I getting overflows?

Hi! I don't know why I'm getting overflows training a NeuralNet. Actually I don't know if the problem is related to this project or to autograd. I think @mattjj could help, too.
With this sample data I'm getting overflows in exp and power, getting NaN as predictions. I can't understand where the problem is.
With Python3 you can execute this:
from io import StringIO

import pandas as pd

from mla.neuralnet import NeuralNet
from mla.neuralnet.layers import Activation, Dense
from mla.neuralnet.optimizers import Adam
from mla.neuralnet.parameters import Parameters

X_train_string = '-0.10410  6.106   6.232   97.50 -0.17490  0.16960 -0.4665  0.4242  289.4  723.8  2.6  2.6\n0.51340  5.517  12.160   90.83 -0.07771  0.07383 -0.2153  0.2133  361.6  706.9  2.6  2.6\n0.40280  5.359   9.403   79.45 -0.05685  0.06042 -0.2095  0.1873  331.9  676.0  2.6  2.6\n-0.02972  5.821   8.682   70.49 -0.05592  0.04690 -0.2113  0.2078  323.2  649.6  2.6  2.6\n-1.06600  6.893   3.798  132.00 -0.11060  0.10940 -0.3516  0.3494  245.4  800.6  2.6  2.6\n-0.66730  5.795   4.824   63.08 -0.04957  0.05160 -0.1446  0.1654  265.7  626.0  2.6  2.6\n0.11930  8.804  18.630  253.90 -0.17100  0.17270 -0.3759  0.3657  416.9  995.8  2.6  2.6'

y_train_string = '164.0\n156.5\n134.5\n142.5\n195.6\n134.2\n272.0'

X_test_string = '-0.1041  6.106   6.232  97.50 -0.17490  0.16960 -0.4665  0.4242  289.4  723.8  2.6  2.6\n0.5134  5.517  12.160  90.83 -0.07771  0.07383 -0.2153  0.2133  361.6  706.9  2.6  2.6\n0.4028  5.359   9.403  79.45 -0.05685  0.06042 -0.2095  0.1873  331.9  676.0  2.6  2.6'

y_test_string = '164.0\n156.5\n134.5'

X_train = pd.read_csv(StringIO(X_train_string), header=None, delim_whitespace=True)
y_train = pd.read_csv(StringIO(y_train_string), header=None, delim_whitespace=True)
X_test = pd.read_csv(StringIO(X_test_string), header=None, delim_whitespace=True)
y_test = pd.read_csv(StringIO(y_test_string), header=None, delim_whitespace=True)

net = NeuralNet(layers=[                    Dense(20, Parameters(init='normal')),
                                            Activation('sigmoid'),
                                            Dense(1),
                                        ],
                                        loss='mse',
                                        optimizer=Adam(),
                                        metric='mse',
                                        batch_size=256,
                                        max_epochs=200)

net.fit(X_train,y_train)

predictions = net.predict(X_test)

I'm getting this
/home/antonio/.conda/envs/intervalML/lib/python3.6/site-packages/autograd/core.py:81: RuntimeWarning: overflow encountered in exp
  result_value = self.fun(*argvals, **kwargs)
/home/antonio/.conda/envs/intervalML/lib/python3.6/site-packages/autograd/core.py:81: RuntimeWarning: overflow encountered in power
  result_value = self.fun(*argvals, **kwargs)
/home/antonio/.conda/envs/intervalML/lib/python3.6/site-packages/autograd/core.py:81: RuntimeWarning: invalid value encountered in multiply
  result_value = self.fun(*argvals, **kwargs)

So predictions is full NaN...
In [2]: predictions
Out[2]:
array([[ nan],
       [ nan],
       [ nan]])

Where's the problem?
Thank you! Your projects are really useful :)

Hi,  your weights are exploding. That's because your dataset is too small and you are using a sigmoid layer for such a small regression task. Thus gradient descent algorithm moves towards very big values.
My recommendation:

Normalize your data

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

Change Activation('sigmoid') to Activation('linear')

repo: rushter/MLAlgorithms

license: mit

license_source: bigquery


text:
Add Region us-east-2 and eu-west-2

Fixes #482

Oops, thanks. Should be good now.

Great, thanks for the PR.  Looks good to me.

authors: adimarco mattico

repo: rusoto/rusoto