code: def test_recursive_loop_filter(self, test_env_async):
      t = test_env_async.from_string(
          """
          <?xml version="1.0" encoding="UTF-8"?>
          <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
            {%- for page in [site.root] if page.url != this recursive %}
            <url><loc>{{ page.url }}</loc></url>
            {{- loop(page.children) }}
            {%- endfor %}
          </urlset>
          """
      )
      sm = t.render(
          this="/foo",
          site={
              "root": {
                  "url": "/",
                  "children": [{"url": "/foo"}, {"url": "/bar"}],
              }
          },
      )
      lines = [x.strip() for x in sm.splitlines() if x.strip()]
      assert lines == [
          '<?xml version="1.0" encoding="UTF-8"?>',
          '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
          "<url><loc>/</loc></url>",
          "<url><loc>/bar</loc></url>",
          "</urlset>",
      ]
  
imports: import asyncio
  import pytest
  from jinja2 import DictLoader
  from jinja2 import Environment
  from jinja2 import Template
  from jinja2.asyncsupport import auto_aiter
  from jinja2.exceptions import TemplateNotFound
  from jinja2.exceptions import TemplatesNotFound
  from jinja2.exceptions import UndefinedError
label_desc: Use image node_id 25 for calling the TestAsyncForLoop obj's underlying member method code with example usage: obj.test_recursive_loop_filter(test_env_async) without return types