DNM: Check the service route

This change adds some utility functions to allow to discover health of the running service via external and internal to the cluster route.  It also adds functions to connect to the service using internal to the cluster routing via proxy side container.

/retest

/retest

/hold

@mateusoliveira43 I believe this is ready to review. It solves the problem with connection to the pod service, however it does not fully fix CI issue, where the pod is unhealthy after restore - in such situation the pod won't expose service so it won't be available for connection.
I've traced some error for the above issue (which is separate to this PR) and comes from the test app itself. The sql pod seems to be running just fine:
time="2023-12-22T22:59:31Z" level=info msg="Success: Attached volume and redirected logs to /tmp/log/todoapp/app.log" func=main.main file="/build/todolist.go:179"
time="2023-12-22T22:59:31Z" level=info msg="A running instance of the db: todolist not found, creating" func=main.main file="/build/todolist.go:185"
panic: sql: database is closed

goroutine 1 [running]:
github.com/jinzhu/gorm.mysql.HasTable({{{0x827460, 0xc00025fc70}, {}}}, {0xc00031e1a0, 0x10})
	/go/pkg/mod/github.com/jinzhu/gorm@v1.9.16/dialect_mysql.go:180 +0x296
github.com/jinzhu/gorm.(*DB).HasTable(0xc000310dd0, {0x734440, 0xc00032a100})
	/go/pkg/mod/github.com/jinzhu/gorm@v1.9.16/main.go:680 +0x89
github.com/jinzhu/gorm.(*DB).DropTableIfExists(0xc00025fd40, {0xc0002a3ea0, 0x1, 0x1})
	/go/pkg/mod/github.com/jinzhu/gorm@v1.9.16/main.go:660 +0x8b
main.main()
	/build/todolist.go:186 +0x39c

/unhold

This is the random failure, subsequent runs are PASSING or FAILING, randomly.
Similarly without using this fix, however this fix allowed to at least get to the point where data was retrieved even without external route.
Including test run (with Focus, so only one test is executed) where the route can not be reached and the proxy pod is used.
test_run_with_proxy_pod.txt
What happened here:

During backup operation the route was not yet accessible so the test used proxy pod to access TODOLIST service endpoint and got the data:

2024/01/04 14:21:18 Using Proxy pod container: mysql-f8c8cfdfc-fgxpj
2024/01/04 14:21:18 Provided command: curl -X GET --silent --show-error http://todolist.mysql-persistent.svc.cluster.local:8000/todo-incomplete
[...]

2024/01/04 14:21:19 stdOutput:
[{"Id":1,"Description":"time to make the donuts","Completed":false},{"Id":3,"Description":"2024-01-04 14:21:18.25146434 +0100 CET m=+39.065424202","Completed":false},{"Id":4,"Description":"Thursday","Completed":false}]

After restore the route was accessible:

2024/01/04 14:22:58 Fallback verifying if the service is accessible via: http://todolist-route-mysql-persistent.apps.cluster-mpryc1502ocp412x.mpryc1502ocp412x.mg.dog8code.com
2024/01/04 14:22:58 Data came from backup-file
[{"Id":1,"Description":"time to make the donuts","Completed":false},{"Id":3,"Description":"2024-01-04 14:21:18.25146434 +0100 CET m=+39.065424202","Completed":false},{"Id":4,"Description":"Thursday","Completed":false}]

We are missing some debug information of what the data was after restore, will add that so we know what's going on.

Ok something wrong in the compare function:
2024/01/04 14:57:22 Data came from backup-file
 [{"Id":1,"Description":"time to make the donuts","Completed":false},{"Id":3,"Description":"2024-01-04 14:55:32.099347111 +0100 CET m=+32.691216556","Completed":false},{"Id":4,"Description":"Thursday","Completed":false}]

2024/01/04 14:57:22 Data came from response
 [{"Id":1,"Description":"time to make the donuts","Completed":false},{"Id":3,"Description":"2024-01-04 14:55:32.099347111 +0100 CET m=+32.691216556","Completed":false},{"Id":4,"Description":"Thursday","Completed":false}]

  [FAILED] Unexpected error:
      <*errors.errorString | 0xc0006b04e0>:
      Backup and Restore Data are not the same
      {
          s: "Backup and Restore Data are not the same",
      }
  occurred

Ok something wrong in the compare function:
2024/01/04 14:57:22 Data came from backup-file
 [{"Id":1,"Description":"time to make the donuts","Completed":false},{"Id":3,"Description":"2024-01-04 14:55:32.099347111 +0100 CET m=+32.691216556","Completed":false},{"Id":4,"Description":"Thursday","Completed":false}]

2024/01/04 14:57:22 Data came from response
 [{"Id":1,"Description":"time to make the donuts","Completed":false},{"Id":3,"Description":"2024-01-04 14:55:32.099347111 +0100 CET m=+32.691216556","Completed":false},{"Id":4,"Description":"Thursday","Completed":false}]

  [FAILED] Unexpected error:
      <*errors.errorString | 0xc0006b04e0>:
      Backup and Restore Data are not the same
      {
          s: "Backup and Restore Data are not the same",
      }
  occurred

The error is with the newline character being different, will update the PR. So far I was testing either pod proxy or standard route, so the error was not visible, here I have mix where it's either accessible via pod proxy or standard route, whetever is first.
This of course is not fixing root cause where the race condition happens, but that's something I'll fix in another PR (also adding rediness and liveness probes to the db services).

/retest

/retest

/retest

/retest

/retest

/retest

I would break this PR in at least 3 smaller PRs

liveness, readiness and startup probes
change route to curl tool (I think there is no necessity to try 3 different things, just adds complexity)
refactoring

I would break this PR in at least 3 smaller PRs

liveness, readiness and startup probes
change route to curl tool (I think there is no necessity to try 3 different things, just adds complexity)
refactoring

It's really hard to do so, because one is in conflict with another and only the full set of changes gives some passing rate of CI. Otherwise it's always failing, meaning it will never be green on the CI tests.

/test 4.13-e2e-test-aws

/test 4.13-e2e-test-aws

FYI @shubham-pampattiwar updated PR comment.

/retest

/test all

Thank you ! @mpryc 😊

RE failures:

ci/prow/4.14-e2e-test-azure and ci/prow/4.14-e2e-test-aws

Some new unseen previously flake, which is during PVC attach. The Rediness probe fails then then pod is being restarted and the Liveness probe also fails, but we know now it's during the restore of DB. The DB fails to restore because of timeout. There are logs which causes PVC to be failing to be attached, but issue may be from somewhere else.

ci/prow/4.13-e2e-test-aws

Already known as CI flake during Backup phase. "Failed to check and update snapshot content". This may be our code problem during tests or velero one.

/retest

/test 4.14-e2e-test-azure

I think azure flaked due to
https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_oadp-operator/1253/pull-ci-openshift-oadp-operator-master-4.12-e2e-test-azure/1746908722602446848/artifacts/e2e-test-azure/e2e/artifacts/MySQL application two Vol CSI/openshift-adp/velero-78bbb97cdb-zlq6f/velero.log
error getting storage account properties: DefaultAzureCredential authentication failed\nPOST https://login.microsoftonline.com/6047c7e9-b2ad-488d-a54e-dc3f6be6a7ee/oauth2/v2.0/token\

/retest-required

I tested running e2e locally, and my 2 runs from the PR failed. Running from master I did not have problems. @weshayutin @kaovilai @shubham-pampattiwar have you tested the PR locally?

Starting w/ master is the right thing.  OADP-1.3 would be the only other branch of concern, did you have errors and what were they on that branch?  If you are going to post you had errors, please be more specific.

AGAIN I really think this PR should be break down in smaller ones, starting with one about liveness probe
I like the concern, perhaps we can wait on this for Michal to return.

/hold

I tested running e2e locally, and my 2 runs from the PR failed. Running from master I did not have problems. @weshayutin @kaovilai @shubham-pampattiwar have you tested the PR locally?
AGAIN I really think this PR should be break down in smaller ones, starting with one about liveness probe

@mateusoliveira43 please provide some more logs when you are writing "PR failed". It's hard to check if the failure is caused by this PR or other flake if no data was provided. What are the logs from the failures ?

Logs from my two fails running make test-e2e from the PR branch
  > Enter [It] Mongo application KOPIA - /path/mateus_oadp/tests/e2e/backup_restore_suite_test.go:314 @ 01/15/24 14:41:19.19
2024/01/15 14:41:19 Waiting for velero pod to be running
2024/01/15 14:41:19 velero pods not found
2024/01/15 14:41:24 pod: velero-cf667848b-s6lbf is not yet running: phase is Pending
2024/01/15 14:41:29 velero pods are running
2024/01/15 14:41:29 Waiting for Node Agent pods to be running
2024/01/15 14:41:29 Checking for correct number of running Node Agent pods...
2024/01/15 14:41:29 Installing application for case mongo-kopia-e2e
  ...
2024/01/15 14:41:29 updating resource: security.openshift.io/v1, Kind=SecurityContextConstraints; name: mongo-persistent-scc
2024/01/15 14:41:30 Pod mongo-7664879648-2jv4m not yet succeeded: phase is Pending
2024/01/15 14:41:35 Pod mongo-7664879648-2jv4m not yet succeeded: phase is Pending
2024/01/15 14:41:40 Pod mongo-7664879648-2jv4m not yet succeeded: phase is Pending
2024/01/15 14:41:46 Pod mongo-7664879648-2jv4m not yet succeeded: phase is Pending
2024/01/15 14:41:51 Pod mongo-7664879648-2jv4m not yet succeeded: phase is Pending
2024/01/15 14:41:56 Pod mongo-7664879648-2jv4m not yet succeeded: phase is Pending
2024/01/15 14:42:01 Running pre-backup function for case mongo-kopia-e2e
  [FAILED] Timed out after 600.001s.
  Expected
      <bool>: false
  to be true
  In [It] at: /path/mateus_oadp/tests/e2e/backup_restore_suite_test.go:29 @ 01/15/24 14:52:01.187
  < Exit [It] Mongo application KOPIA - /path/mateus_oadp/tests/e2e/backup_restore_suite_test.go:314 @ 01/15/24 14:52:01.187 (10m41.997s)

# second run

  > Enter [It] MySQL application KOPIA - /path/mateus_oadp/tests/e2e/backup_restore_suite_test.go:322 @ 01/15/24 16:31:33.341
2024/01/15 16:31:33 Waiting for velero pod to be running
2024/01/15 16:31:33 velero pods not found
2024/01/15 16:31:38 pod: node-agent-tscnd is not yet running: phase is Pending
2024/01/15 16:31:43 velero pods are running
2024/01/15 16:31:43 Waiting for Node Agent pods to be running
2024/01/15 16:31:43 Checking for correct number of running Node Agent pods...
2024/01/15 16:31:43 Installing application for case mysql-kopia-e2e
...
2024/01/15 16:31:44 updating resource: security.openshift.io/v1, Kind=SecurityContextConstraints; name: mysql-persistent-scc
2024/01/15 16:31:44 Pod mysql-77c6bb8c9-xtd9k not yet succeeded: phase is Pending
2024/01/15 16:31:50 Pod mysql-77c6bb8c9-xtd9k not yet succeeded: phase is Pending
2024/01/15 16:31:55 Pod mysql-77c6bb8c9-xtd9k not yet succeeded: phase is Pending
2024/01/15 16:32:00 Pod mysql-77c6bb8c9-xtd9k not yet succeeded: phase is Pending
2024/01/15 16:32:05 Pod mysql-77c6bb8c9-xtd9k not yet succeeded: phase is Pending
2024/01/15 16:32:10 Running pre-backup function for case mysql-kopia-e2e
2024/01/15 16:32:10 checking for the NAMESPACE: mysql-persistent
  deployment not available with condition: Deployment does not have minimum availability.
  deployment not available with condition: ReplicaSet "mysql-77c6bb8c9" is progressing.
2024/01/15 16:32:20 Verifying backup/restore data of todolist
2024/01/15 16:32:20 Verifying if the service is accessible: http://todolist.mysql-persistent.svc.cluster.local:8000
2024/01/15 16:32:20 Failed to use Service endpoint for service todolist in namespace mysql-persistent: Failed to connect to the service: Get "http://todolist.mysql-persistent.svc.cluster.local:8000": dial tcp: lookup todolist.mysql-persistent.svc.cluster.local: Temporary failure in name resolution
2024/01/15 16:32:20 Fallback verifying if the service is accessible via route
2024/01/15 16:32:20 Fallback verifying if the service is accessible via: http://todolist-route-mysql-persistent.mateus01022023-br-sao-3626522b15eedb880d7b99992e225c1b-0000.br-sao.containers.appdomain.cloud
2024/01/15 16:32:20 Can not connect to the application endpoint with route or service name: Failed to get both service and route endpoints: Route endpoint not accessible: HTTP request failed with status code: 503
2024/01/15 16:32:20 Trying to get to the service via proxy POD
2024/01/15 16:32:20 Using Proxy pod container: mysql-77c6bb8c9-xtd9k
2024/01/15 16:32:20 Provided command: curl -X GET --silent --show-error http://todolist.mysql-persistent.svc.cluster.local:8000/todo-incomplete
2024/01/15 16:32:20 Command will run in the pod: mysql-77c6bb8c9-xtd9k, container: curl-tool in the namespace: mysql-persistent
2024/01/15 16:32:20 Full command URL: https://c104-e.br-sao.containers.cloud.ibm.com:30014/api/v1/namespaces/mysql-persistent/pods/mysql-77c6bb8c9-xtd9k/exec?command=curl&command=-X&command=GET&command=--silent&command=--show-error&command=http%3A%2F%2Ftodolist.mysql-persistent.svc.cluster.local%3A8000%2Ftodo-incomplete&container=curl-tool&stderr=true&stdout=true&tty=true
2024/01/15 16:32:22 stdOutput: curl: (7) Failed to connect to todolist.mysql-persistent.svc.cluster.local port 8000 after 1038 ms: Couldn't connect to server

2024/01/15 16:32:22 Error while streaming command output: command terminated with exit code 7
  [FAILED] Unexpected error:
      <*errors.errorString | 0xc0006968b0>:
      Error while streaming command output: command terminated with exit code 7
      {
          s: "Error while streaming command output: command terminated with exit code 7",
      }
  occurred
  In [It] at: /path/mateus_oadp/tests/e2e/backup_restore_suite_test.go:141 @ 01/15/24 16:32:22.322
  < Exit [It] MySQL application KOPIA - /path/mateus_oadp/tests/e2e/backup_restore_suite_test.go:322 @ 01/15/24 16:32:22.322 (48.98s)

As a start I've created #1270  #1271 #1273  #1272. Of course that's not the end of split and I am questioning it, but will leave the decision to you, which is better (many small ones, or one covering a bit wider scope) in this case.

@mateusoliveira43 did you observe this randomly/always/one time? I've also seen it randomly in the CI, but that imo is actually proper as we know what exactly caused the failure (DB was not able to come up and the tests failed immediately), but as always I may be wrong. I will increase time in which db is expected to be up. In my opinion we were balancing on the edge and now with side container in a slower systems it may be just over. On a 15 runs on AWS I have experienced 0 errors like this:
$ for i in {1..15}; do make test-e2e > /tmp/run_e2e_$i.txt 2>&1; done

$ grep "Timed out after" /tmp/run_*

can we close this one @mpryc ? some parts were already implemented by your previous PRs
One part that was not implemented yet is the removal BackupRestoreType from PreBackupVerify/PostRestoreVerify in backup/restore/must-gather tests, but I think it is easier to open a new PR for that

@mateusoliveira43 no, please don't close this one. I am doing rebase and will still want to have side container proxy to be in place, so we have much better view of why the test is failing in case the external route is not available.

@mateusoliveira43 here is example of the log where we clearly see how the communication of our application with route service is done:
024/01/26 13:36:14 Verifying if the service is accessible: http://todolist.mysql-persistent.svc.cluster.local:8000
2024/01/26 13:36:14 Failed to use Service endpoint for service todolist in namespace mysql-persistent: Failed to connect to the service: Get "http://todolist.mysql-persistent.svc.cluster.local:8000": dial tcp: lookup todolist.mysql-persistent.svc.cluster.local: Temporary failure in name resolution
2024/01/26 13:36:14 Fallback verifying if the service is accessible via route
2024/01/26 13:36:14 Fallback verifying if the service is accessible via: http://todolist-route-mysql-persistent.apps.cluster-mpryc1502ocp412x.mpryc1502ocp412x.mg.dog8code.com
2024/01/26 13:36:14 Data before the curl request:
 [{"Id":1,"Description":"time to make the donuts","Completed":false}]

2024/01/26 13:36:14 Payload encoded parameters: description=2024-01-26+13%3A36%3A14.703745158+%2B0100+CET+m%3D%2B53.732085706
2024/01/26 13:36:14 Payload encoded parameters: description=Friday

@mpryc still not sold on adding more ways of checking route (I did not see any of the new methods work, direct through service or with side containers), but would be ok with better logs

@mpryc still not sold on adding more ways of checking route (I did not see any of the new methods work, direct through service or with side containers), but would be ok with better logs

More logs - we can get that once we find out if the internal/external route is accessible and actually try to connect to it, so we can tell in the logs what was possible what was not.
If you run from your local box is different then from the CI and the more access to the endpoints makes it more important.
The external route way is cluster type specific an it may be not there if your cluster is misconfigured or configured in a way you do not want to have external dns to it, then our tests still should pass.

/unhold
I am unholding this PR as I believe it's ready and we can discuss now. The PR was reworked and number of changes pulled out from it, so it's smaller, however I think it's important for us.

Few test failures:
3 x Mongo application DATAMOVER is not known yet, but it was also observed in other PR e.g. https://github.com/openshift/oadp-operator/pull/1257#issuecomment-1912728524
1 x MySQL application DATAMOVER, which may be very similar to above. The pods are not yet ready and times out. There are some failures to provision storage and update endpoint for mysql-persistent/mysql.
1 x MySQL application two Vol CSI, which is not known yet, but may be just previous flake with CSI not being able to came up, however the logs are slightly different and test is failing on the try to connect attempt, so flake logic may require update.
1 x MySQL application two Vol CSI, which failed with known flake and retried, then it failed with unknown problem, possible same as above.

/retest

Another round:
2 x Mongo application DATAMOVER, same as previous round
1 x MySQL application two Vol CSI, same as previous round
1 x Mongo application CSI, same as previous round
So all the flakes from the above comes to the error after restore:
Timed out after 540.001s. to have DB pod up and running.

/recheck

/retest

MySQL application two Vol CSI with one restart (found known Flake) and the second attempt was a failure due to another issue which is not known Flake.

/retest

Checked all 6 ci jobs that passed, and none of them used the 2 new ways of checking route (direct through service or curl-tool. search for "Verifying if the service is accessible" in jobs logs)
Also, still missing files renaming

I believe that change to not use git build made this more reliable, but I still think it's worth keeping it as we know exactly that the route was there, if it was accessible. One scenarios where this may be important is misconfigured Ingress controller on the cluster, or the one that does not allow to create external routes.
Below is a broken URL for that Ingress route where our test still works fine:
2024/01/29 13:38:22 Running pre-backup function for case mongo-csi-e2e
2024/01/29 13:38:22 Verifying backup/restore data of todolist
2024/01/29 13:38:22 Verifying if the service is accessible: http://todolist.mongo-persistent.svc.cluster.local:8000
2024/01/29 13:38:22 Failed to use Service endpoint for service todolist in namespace mongo-persistent: Failed to connect to the service: Get "http://todolist.mongo-persistent.svc.cluster.local:8000": dial tcp: lookup todolist.mongo-persistent.svc.cluster.local: Temporary failure in name resolution
2024/01/29 13:38:22 Fallback verifying if the service is accessible via route
2024/01/29 13:38:22 Fallback verifying if the service is accessible via: http://todolist-broken.misconfigureddomain.com
2024/01/29 13:38:22 Can not connect to the application endpoint with route or service name: Failed to get both service and route endpoints: Route endpoint not accessible: Get "http://todolist-broken.misconfigureddomain.com": dial tcp: lookup todolist-broken.misconfigureddomain.com: no such host
2024/01/29 13:38:22 Trying to get to the service via proxy POD
2024/01/29 13:38:22 Using Proxy pod container: mongo-5fb49f6768-j9r8j
2024/01/29 13:38:22 Provided command: curl -X GET --silent --show-error http://todolist.mongo-persistent.svc.cluster.local:8000/todo-incomplete
2024/01/29 13:38:22 Command will run in the pod: mongo-5fb49f6768-j9r8j, container: curl-tool in the namespace: mongo-persistent
2024/01/29 13:38:22 Full command URL: https://api.cluster-mpryc1502ocp412x.mpryc1502ocp412x.mg.dog8code.com:6443/api/v1/namespaces/mongo-persistent/pods/mongo-5fb49f6768-j9r8j/exec?command=curl&command=-X&command=GET&command=--silent&command=--show-error&command=http%3A%2F%2Ftodolist.mongo-persistent.svc.cluster.local%3A8000%2Ftodo-incomplete&container=curl-tool&stderr=true&stdout=true&tty=true
2024/01/29 13:38:23 stdOutput: [{"Id":"65b79c3c2a2b1e6efd0b787d","Description":"time","Completed":false}]

2024/01/29 13:38:23 Data before the curl request:
 [{"Id":"65b79c3c2a2b1e6efd0b787d","Description":"time","Completed":false}]

2024/01/29 13:38:23 Payload encoded parameters: description=2024-01-29+13%3A38%3A23.43816687+%2B0100+CET+m%3D%2B63.756468130
2024/01/29 13:38:23 Provided command: curl -X POST -d description=2024-01-29+13%3A38%3A23.43816687+%2B0100+CET+m%3D%2B63.756468130 --silent --show-error http://todolist.mongo-persistent.svc.cluster.local:8000/todo
2024/01/29 13:38:23 Command will run in the pod: mongo-5fb49f6768-j9r8j, container: curl-tool in the namespace: mongo-persistent
2024/01/29 13:38:23 Full command URL: https://api.cluster-mpryc1502ocp412x.mpryc1502ocp412x.mg.dog8code.com:6443/api/v1/namespaces/mongo-persistent/pods/mongo-5fb49f6768-j9r8j/exec?command=curl&command=-X&command=POST&command=-d&command=description%3D2024-01-29%2B13%253A38%253A23.43816687%2B%252B0100%2BCET%2Bm%253D%252B63.756468130&command=--silent&command=--show-error&command=http%3A%2F%2Ftodolist.mongo-persistent.svc.cluster.local%3A8000%2Ftodo&container=curl-tool&stderr=true&stdout=true&tty=true
2024/01/29 13:38:23 stdOutput: {"Id":"65b79c3f2a2b1e6efd0b787e"}

2024/01/29 13:38:23 Payload encoded parameters: description=Monday
2024/01/29 13:38:23 Provided command: curl -X POST -d description=Monday --silent --show-error http://todolist.mongo-persistent.svc.cluster.local:8000/todo
2024/01/29 13:38:23 Command will run in the pod: mongo-5fb49f6768-j9r8j, container: curl-tool in the namespace: mongo-persistent
2024/01/29 13:38:23 Full command URL: https://api.cluster-mpryc1502ocp412x.mpryc1502ocp412x.mg.dog8code.com:6443/api/v1/namespaces/mongo-persistent/pods/mongo-5fb49f6768-j9r8j/exec?command=curl&command=-X&command=POST&command=-d&command=description%3DMonday&command=--silent&command=--show-error&command=http%3A%2F%2Ftodolist.mongo-persistent.svc.cluster.local%3A8000%2Ftodo&container=curl-tool&stderr=true&stdout=true&tty=true
2024/01/29 13:38:24 stdOutput: {"Id":"65b79c402a2b1e6efd0b787f"}

2024/01/29 13:38:24 Using Proxy pod container: mongo-5fb49f6768-j9r8j
2024/01/29 13:38:24 Provided command: curl -X GET --silent --show-error http://todolist.mongo-persistent.svc.cluster.local:8000/todo-incomplete
2024/01/29 13:38:24 Command will run in the pod: mongo-5fb49f6768-j9r8j, container: curl-tool in the namespace: mongo-persistent
2024/01/29 13:38:24 Full command URL: https://api.cluster-mpryc1502ocp412x.mpryc1502ocp412x.mg.dog8code.com:6443/api/v1/namespaces/mongo-persistent/pods/mongo-5fb49f6768-j9r8j/exec?command=curl&command=-X&command=GET&command=--silent&command=--show-error&command=http%3A%2F%2Ftodolist.mongo-persistent.svc.cluster.local%3A8000%2Ftodo-incomplete&container=curl-tool&stderr=true&stdout=true&tty=true
2024/01/29 13:38:24 stdOutput: [{"Id":"65b79c3c2a2b1e6efd0b787d","Description":"time","Completed":false},{"Id":"65b79c3f2a2b1e6efd0b787e","Description":"2024-01-29 13:38:23.43816687 +0100 CET m=+63.756468130","Completed":false},{"Id":"65b79c402a2b1e6efd0b787f","Description":"Monday","Completed":false}]

The scenario which is used to connect via internal route may and will be really cool once we run gingko in a pod on the same cluster where tests are running. In prow the runner and executor are on other clusters at the moment.

/test all

Today Prow has some outages.

@mateusoliveira43 an ideal log to present failure and issue where the pod did not come up at all, even the proxy pod was not able to help here. In such case we know it's not the route problem:
https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_oadp-operator/1253/pull-ci-openshift-oadp-operator-master-4.14-e2e-test-aws/1751987830927659008/artifacts/e2e-test-aws/e2e/build-log.txt

/retest

@mateusoliveira43 I've removed part which is trying to connect to use  the internal route together with the functions associated with that dead code.
Also attaching diff to what was removed for reference and eventual future use:
diff --git a/tests/e2e/lib/apps.go b/tests/e2e/lib/apps.go
index b10280d..a801c94 100755
--- a/tests/e2e/lib/apps.go
+++ b/tests/e2e/lib/apps.go
@@ -524,10 +524,10 @@ func getRequestParameters(url string, proxyPodParams *ProxyPodParameters, method
 }

 func getAppEndpointURLAndProxyParams(ocClient client.Client, kubeClient *kubernetes.Clientset, kubeConfig *rest.Config, namespace, serviceName, routeName string) (string, *ProxyPodParameters, error) {
-	appEndpointURL, err := GetServiceEndpointURL(ocClient, namespace, serviceName, routeName)
+	appEndpointURL, err := GetRouteEndpointURL(ocClient, namespace, routeName)
 	// Something wrong with standard endpoint, try with proxy pod.
 	if err != nil {
-		log.Println("Can not connect to the application endpoint with route or service name:", err)
+		log.Println("Can not connect to the application endpoint with route:", err)
 		log.Println("Trying to get to the service via proxy POD")

 		pod, podErr := GetFirstPodByLabel(kubeClient, namespace, "curl-tool=true")
diff --git a/tests/e2e/lib/common_helpers.go b/tests/e2e/lib/common_helpers.go
index 1aff04a..2cc91bf 100644
--- a/tests/e2e/lib/common_helpers.go
+++ b/tests/e2e/lib/common_helpers.go
@@ -153,46 +153,6 @@ func GetInternalServiceEndpointURL(namespace, serviceName string, servicePort ..
 	return fmt.Sprintf("http://%s.%s.svc.cluster.local:%d", serviceName, namespace, port)
 }

-// GetReachableInternalServiceEndpointURL verifies the accessibility of a Kubernetes service within the same cluster
-//
-// Parameters:
-//   - namespace:      The Kubernetes namespace in which the service is located.
-//   - serviceName:    The name of the Kubernetes service.
-//   - port:           The port on which service should be accessible (optional)
-//
-// Returns:
-//   - string:         The full service endpoint URL (including the specified or default port) if the service is accessible.
-//   - error:          An error message if the service is not accessible or if there is an issue with the HTTP request.
-//
-// Example Usage:
-//
-//	serviceEndpoint, err := GetReachableInternalServiceEndpointURL("mongo-persistent", "todolist")
-//	if err != nil {
-//	    log.Println("Error:", err)
-//	} else {
-//	    log.Println("Service todolist is accessible at:", serviceEndpoint)
-//	}
-func GetReachableInternalServiceEndpointURL(namespace, serviceName string, port ...int) (string, error) {
-
-	var serviceEndpoint string
-
-	if len(port) > 0 {
-		serviceEndpoint = GetInternalServiceEndpointURL(namespace, serviceName, port[0])
-	} else {
-		serviceEndpoint = GetInternalServiceEndpointURL(namespace, serviceName)
-	}
-
-	log.Printf("Verifying if the service is accessible: %s", serviceEndpoint)
-
-	resp, err := IsURLReachable(serviceEndpoint)
-
-	if err != nil || resp == false {
-		return "", fmt.Errorf("Failed to connect to the service: %v", err)
-	}
-
-	return serviceEndpoint, nil
-}
-
 // ConvertJsonStringToURLParams takes a JSON string as input and converts it to URL-encoded parameters.
 // It returns a string containing the URL-encoded parameters.
 //
diff --git a/tests/e2e/lib/ocp_common_helpers.go b/tests/e2e/lib/ocp_common_helpers.go
index 3ae1c09..e09efdd 100644
--- a/tests/e2e/lib/ocp_common_helpers.go
+++ b/tests/e2e/lib/ocp_common_helpers.go
@@ -10,50 +10,6 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 )

-// GetServiceEndpointURL retrieves and verifies the accessibility of a Kubernetes service or route endpoint.
-//
-// Parameters:
-//   - ocClient:     An instance of the OpenShift client.
-//   - namespace:    The Kubernetes namespace in which the service or route is located.
-//   - serviceName:  The name of the Kubernetes service (optional, routeName, serviceName or both must be provided).
-//   - routeName:    The name of the Kubernetes service route (optional, routeName, serviceName or both must be provided).
-//
-// Returns:
-//   - string:       The full service or route endpoint URL if accessible.
-//   - error:        An error message if both service and route endpoints are not accessible, if neither serviceName nor routeName is provided, or if there is an issue with the HTTP request.
-//
-// Example Usage:
-//
-//	appEndpoint, err := GetServiceEndpointURL(ocClient, "mongo-persistent", "todolist", todolist-route")
-//	if err != nil {
-//	    log.Println("Error:", err)
-//	} else {
-//	    log.Println("URL endpoint is accessible at:", appEndpoint)
-//	}
-func GetServiceEndpointURL(ocClient client.Client, namespace, serviceName, routeName string) (string, error) {
-	if serviceName == "" && routeName == "" {
-		return "", fmt.Errorf("Either serviceName or routeName must be provided")
-	}
-
-	if serviceName != "" {
-		internalServiceEndpoint, err := GetReachableInternalServiceEndpointURL(namespace, serviceName)
-		if err == nil {
-			return internalServiceEndpoint, nil
-		}
-		log.Printf("Failed to use Service endpoint for service %s in namespace %s: %v", serviceName, namespace, err)
-	}
-
-	if routeName != "" {
-		routeEndpoint, err := getRouteEndpointURL(ocClient, namespace, routeName)
-		if err != nil {
-			return "", fmt.Errorf("Failed to get both service and route endpoints: %v", err)
-		}
-		return routeEndpoint, nil
-	}
-
-	return "", fmt.Errorf("serviceName or routeName must be provided")
-}
-
 // getRouteEndpointURL retrieves and verifies the accessibility of a Kubernetes route HOST endpoint
 //
 // Parameters:
@@ -73,8 +29,8 @@ func GetServiceEndpointURL(ocClient client.Client, namespace, serviceName, route
 //	} else {
 //	    log.Println("Service route todolist-route is accessible at:", routeEndpoint)
 //	}
-func getRouteEndpointURL(ocClient client.Client, namespace, routeName string) (string, error) {
-	log.Println("Fallback verifying if the service is accessible via route")
+func GetRouteEndpointURL(ocClient client.Client, namespace, routeName string) (string, error) {
+	log.Println("Verifying if the service is accessible via route")
 	route := &routev1.Route{}
 	routev1.AddToScheme(ocClient.Scheme())
 	err := ocClient.Get(context.Background(), client.ObjectKey{Namespace: namespace, Name: routeName}, route)
@@ -88,7 +44,7 @@ func getRouteEndpointURL(ocClient client.Client, namespace, routeName string) (s
 	routeEndpoint := "http://" + route.Spec.Host

 	// Check if the route is accessible
-	log.Printf("Fallback verifying if the service is accessible via: %s", routeEndpoint)
+	log.Printf("Verifying if the service is accessible via: %s", routeEndpoint)
 	resp, err := IsURLReachable(routeEndpoint)
 	if err != nil || resp == false {
 		return "", fmt.Errorf("Route endpoint not accessible: %v", err)

/retest

/test 4.13-e2e-test-aws

/test 4.13-e2e-test-aws

The failing test is VM backup and restore tests, @mrnold does those tests also require flake:
https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_oadp-operator/1253/pull-ci-openshift-oadp-operator-master-4.13-e2e-test-aws/1752981029745856512/artifacts/e2e-test-aws/e2e/build-log.txt
2024/02/01 11:06:35 HCO health status is: healthy
  [FAILED] Expected
      <*errors.errorString | 0xc0001cff70>:
      timed out waiting for the condition
      {
          s: "timed out waiting for the condition",
      }

/retest

This failure happened on cleanup, when it was waiting to remove the HCO instance. I don't think this should need a flake, since the cleanup is not really the point of the test. Maybe HCO removal can be a best-effort kind of thing that does not cause the whole test to fail? I can take out the Expect that triggered this.

We do remove/cleanup when the backup is done before restore and after the test ran. I agree that cleanup should not fail the test, unless it may introduce issues while restoring (first case just after backup) ?.

I added a new pull request to remove the Expect: https://github.com/openshift/oadp-operator/pull/1303

/retest

/retest

/retest

/retest

/retest

/test 4.14-e2e-test-aws

/lgtm


NPE crash in BaseLifecycleManager

Bug Report
Crash in BaseLifecycleManager.sendRPCMessagePrivate() on line 871. Calling session.sendMessage() when value of session is null.
Reproduction Steps
Unfortunately unable to reproduce at the moment. This crash came from our Crashlytics logs and has only been observed after moving from SDL Android 5.2 to 5.3.
OS & Version Information

Android Version: Seeing this in Android 9, 10, 11, and 12
SDL Android Version: 5.3
Testing Against: No tests as this came from Crashlytics logs.

Test Case, Sample Code, and / or Example App
None currently available.
Crash Log
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.smartdevicelink.session.BaseSdlSession.sendMessage(com.smartdevicelink.protocol.ProtocolMessage)' on a null object reference
       at com.smartdevicelink.managers.lifecycle.BaseLifecycleManager.sendRPCMessagePrivate(BaseLifecycleManager.java:871)
       at com.smartdevicelink.managers.lifecycle.BaseLifecycleManager.access$200(BaseLifecycleManager.java:105)
       at com.smartdevicelink.managers.lifecycle.BaseLifecycleManager$4.onSessionStarted(BaseLifecycleManager.java:987)
       at com.smartdevicelink.session.SdlSession.onServiceStarted(SdlSession.java:162)
       at com.smartdevicelink.protocol.SdlProtocolBase.handleStartServiceACK(SdlProtocolBase.java:1122)
       at com.smartdevicelink.protocol.SdlProtocolBase$MessageFrameAssembler.handleControlFrame(SdlProtocolBase.java:1464)
       at com.smartdevicelink.protocol.SdlProtocolBase$MessageFrameAssembler.handleFrame(SdlProtocolBase.java:1420)
       at com.smartdevicelink.protocol.SdlProtocolBase.handlePacketReceived(SdlProtocolBase.java:715)
       at com.smartdevicelink.protocol.SdlProtocolBase$2.onPacketReceived(SdlProtocolBase.java:1187)
       at com.smartdevicelink.transport.TransportManager$LegacyBluetoothHandler.handleMessage(TransportManager.java:523)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:214)
       at android.app.ActivityThread.main(ActivityThread.java:6981)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

Thanks @spstreckfus, for reporting the issue. I tried to reproduce the issue but I couldn't. It is not easy to know what exactly led to that situation without reproduction steps but my guess is that for some reason SdlManager.dispose() is getting called before the app fully registers. If dispose() is called, it will call BaseLifecycleManager.stop() which sets session to null then if the app tries to send RegisterAppInterface request, that will crash because sendRPCMessagePrivate() will be called on a null session. We can make a PR to wrap the session.sendMessage(pm) with a null check which should prevent the crash from happening.


CPS infinite loops on access-fannkuch

[x] bitops-nsieve-bits
[x] crypto-aes
[x] string-unpack-code

This one seems to infinite loop, it has a while (true) loop

[ ] access-fannkuch

bitops-nsieve-bits relied on var hoisting out of a for loop. This one is fixed.

crypto and string tests both use buitlin HOFs. access-fannkuch is a legitimate issue for CPS.

Fixed


Cannot import name 'itemfreq' from 'scipy.stats'

ImportError: cannot import name 'itemfreq' from 'scipy.stats' (/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/scipy/stats/init.py)
Cannot run the code because of this. Please help. Thanks!

Hi @Loafb
I hope you are doing well,
were you able to fix the issue? if so, what was the solution.
Thank you

Downgrade scipy, 1.9.x breaks this code:
pip install --upgrade scipy==1.8.0


Use namespace for release unicity with helm3 (#1213)

This is for #1213 so that the releases are considered scoped to their namespace and not to tiller namespace.
Note the open question here: https://github.com/roboll/helmfile/issues/1213#issuecomment-621402678

@victornoel Thanks! The change LGTM. Regarding the test failure, it's due to that there is now an extra call to helm(helm.IsHelm3) where it wasn't expected before this change.
This is where you can start:
https://github.com/roboll/helmfile/blob/eeb61e61746a5197e2ed722ff23c980a899ea534/pkg/app/app_test.go#L90
In expectNoCallsToHelm we currently create &noCallHelmExec{}, which panics on any call to helm.
Instead of noCallHelmExec which panics on any helm call, you should create a mock that respond to only IsHelm3, which is what you added in this PR.
You'd create a new struct for that, which would look like:
type versionOnlyHelmExec struct {
   isHelm3 bool
}

func (helm *versionOnlyHelmExec) IsHelm3() bool {
	helm.doPanic()
	return helm.isHelm3
}

So that you can use &versionOnlyHelmExec{isHelm3: false} instead of &noCallHelmExec{} for TestVisitDesiredStatesWithReleasesFiltered_ReleaseOrder.

@mumoshu I think I've managed to do something correct. I also added some tests :)

@mumoshu thanks for the help ^^


size mismatch for layers.2.residual_group.blocks.2.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.2.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.2.residual_group.blocks.2.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.2.residual_group.blocks.2.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.2.residual_group.blocks.2.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.2.residual_group.blocks.2.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.2.residual_group.blocks.2.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.2.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.2.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.2.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.2.residual_group.blocks.2.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.2.residual_group.blocks.2.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.2.residual_group.blocks.2.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.2.residual_group.blocks.3.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.2.residual_group.blocks.3.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.2.residual_group.blocks.3.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.2.residual_group.blocks.3.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.2.residual_group.blocks.3.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.3.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.2.residual_group.blocks.3.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.2.residual_group.blocks.3.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.2.residual_group.blocks.3.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.2.residual_group.blocks.4.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.2.residual_group.blocks.4.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.2.residual_group.blocks.4.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.2.residual_group.blocks.4.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.2.residual_group.blocks.4.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.4.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.2.residual_group.blocks.4.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.2.residual_group.blocks.4.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.2.residual_group.blocks.4.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.2.residual_group.blocks.5.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.2.residual_group.blocks.5.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.2.residual_group.blocks.5.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.2.residual_group.blocks.5.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.2.residual_group.blocks.5.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.blocks.5.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.2.residual_group.blocks.5.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.2.residual_group.blocks.5.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.2.residual_group.blocks.5.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.overlap_attn.relative_position_bias_table: copying a param with shape torch.Size([1521, 6]) from checkpoint, the shape in current model is torch.Size([256, 6]).
size mismatch for layers.2.residual_group.overlap_attn.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.overlap_attn.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.overlap_attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.2.residual_group.overlap_attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.2.residual_group.overlap_attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.2.residual_group.overlap_attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.overlap_attn.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.overlap_attn.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.residual_group.overlap_attn.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.2.residual_group.overlap_attn.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.2.residual_group.overlap_attn.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.2.residual_group.overlap_attn.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.2.conv.weight: copying a param with shape torch.Size([180, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 96, 3, 3]).
size mismatch for layers.2.conv.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.3.residual_group.blocks.0.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.3.residual_group.blocks.0.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.3.residual_group.blocks.0.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.3.residual_group.blocks.0.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.3.residual_group.blocks.0.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.0.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.3.residual_group.blocks.0.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.3.residual_group.blocks.0.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.3.residual_group.blocks.0.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.3.residual_group.blocks.1.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.3.residual_group.blocks.1.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.3.residual_group.blocks.1.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.3.residual_group.blocks.1.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.3.residual_group.blocks.1.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.1.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.3.residual_group.blocks.1.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.3.residual_group.blocks.1.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.3.residual_group.blocks.1.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.3.residual_group.blocks.2.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.3.residual_group.blocks.2.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.3.residual_group.blocks.2.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.3.residual_group.blocks.2.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.3.residual_group.blocks.2.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.2.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.3.residual_group.blocks.2.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.3.residual_group.blocks.2.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.3.residual_group.blocks.2.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.3.residual_group.blocks.3.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.3.residual_group.blocks.3.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.3.residual_group.blocks.3.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.3.residual_group.blocks.3.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.3.residual_group.blocks.3.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.3.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.3.residual_group.blocks.3.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.3.residual_group.blocks.3.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.3.residual_group.blocks.3.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.3.residual_group.blocks.4.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.3.residual_group.blocks.4.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.3.residual_group.blocks.4.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.3.residual_group.blocks.4.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.3.residual_group.blocks.4.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.4.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.3.residual_group.blocks.4.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.3.residual_group.blocks.4.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.3.residual_group.blocks.4.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.attn.relative_position_bias_table: copying a param with shape torch.Size([961, 6]) from checkpoint, the shape in current model is torch.Size([169, 6]).
size mismatch for layers.3.residual_group.blocks.5.attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.3.residual_group.blocks.5.attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.3.residual_group.blocks.5.attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.3.residual_group.blocks.5.attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.0.weight: copying a param with shape torch.Size([60, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([32, 96, 3, 3]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.0.bias: copying a param with shape torch.Size([60]) from checkpoint, the shape in current model is torch.Size([32]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.2.weight: copying a param with shape torch.Size([180, 60, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 32, 3, 3]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.3.attention.1.weight: copying a param with shape torch.Size([6, 180, 1, 1]) from checkpoint, the shape in current model is torch.Size([3, 96, 1, 1]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.3.attention.1.bias: copying a param with shape torch.Size([6]) from checkpoint, the shape in current model is torch.Size([3]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.3.attention.3.weight: copying a param with shape torch.Size([180, 6, 1, 1]) from checkpoint, the shape in current model is torch.Size([96, 3, 1, 1]).
size mismatch for layers.3.residual_group.blocks.5.conv_block.cab.3.attention.3.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.blocks.5.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.3.residual_group.blocks.5.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.3.residual_group.blocks.5.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.3.residual_group.blocks.5.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.overlap_attn.relative_position_bias_table: copying a param with shape torch.Size([1521, 6]) from checkpoint, the shape in current model is torch.Size([256, 6]).
size mismatch for layers.3.residual_group.overlap_attn.norm1.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.overlap_attn.norm1.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.overlap_attn.qkv.weight: copying a param with shape torch.Size([540, 180]) from checkpoint, the shape in current model is torch.Size([288, 96]).
size mismatch for layers.3.residual_group.overlap_attn.qkv.bias: copying a param with shape torch.Size([540]) from checkpoint, the shape in current model is torch.Size([288]).
size mismatch for layers.3.residual_group.overlap_attn.proj.weight: copying a param with shape torch.Size([180, 180]) from checkpoint, the shape in current model is torch.Size([96, 96]).
size mismatch for layers.3.residual_group.overlap_attn.proj.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.overlap_attn.norm2.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.overlap_attn.norm2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.residual_group.overlap_attn.mlp.fc1.weight: copying a param with shape torch.Size([360, 180]) from checkpoint, the shape in current model is torch.Size([384, 96]).
size mismatch for layers.3.residual_group.overlap_attn.mlp.fc1.bias: copying a param with shape torch.Size([360]) from checkpoint, the shape in current model is torch.Size([384]).
size mismatch for layers.3.residual_group.overlap_attn.mlp.fc2.weight: copying a param with shape torch.Size([180, 360]) from checkpoint, the shape in current model is torch.Size([96, 384]).
size mismatch for layers.3.residual_group.overlap_attn.mlp.fc2.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for layers.3.conv.weight: copying a param with shape torch.Size([180, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 96, 3, 3]).
size mismatch for layers.3.conv.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for norm.weight: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for norm.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for conv_after_body.weight: copying a param with shape torch.Size([180, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([96, 96, 3, 3]).
size mismatch for conv_after_body.bias: copying a param with shape torch.Size([180]) from checkpoint, the shape in current model is torch.Size([96]).
size mismatch for conv_before_upsample.0.weight: copying a param with shape torch.Size([64, 180, 3, 3]) from checkpoint, the shape in current model is torch.Size([64, 96, 3, 3]).

Can't I use that model, or do I have to adjust some of the HATConfig parameters?
Cu Selur

https://github.com/TensoRaws/ccrestoration/blob/main/ccrestoration/config/hat_config.py#L215

@routineLife1

Thanks.


Fix #2569: Custom Pipeline Service defenition

Describe your changes :
See #2569

Type of change :

[x] Improvement

Frontend Preview (Screenshots) :
For frontend related change, please link screenshots of your changes preview! Optional for backend related changes.

Checklist:

[x] I have read the CONTRIBUTING document.
[ ] I have performed a self-review of my own.
[ ] I have tagged my reviewers below.
[ ] I have commented on my code, particularly in hard-to-understand areas.
[ ] My changes generate no new warnings.
[ ] I have added tests that prove my fix is effective or that my feature works.
[x] All new and existing tests passed.

Reviewers

@darth-coder00 can you add UI support for this pipeline service. Its a generic service that is intended to map user's custom pipeline service. So use an icon that indicates a generic pipeline service


refactor: update FundingForm->DurationInputAndSelect->Select to use JuiceListbox

What does this PR do and why?
Provide a description of what this PR does. Link to any relevant GitHub issues, Notion tasks or Discord discussions.
Screenshots or screen recordings
If applicable, provide screenshots or screen recordings to demonstrate the changes.
Acceptance checklist

[ ] I have evaluated the Approval Guidelines for this PR.
[ ] (if relevant) I have tested this PR in all supported browsers.
[ ] (if relevant) I have tested this PR in dark mode and light mode (if applicable).

Current dependencies on/for this PR:

main

PR #3553

PR #3554

PR #3555

PR #3556

PR #3557   👈

This comment was auto-generated by Graphite.

@wraeth-eth queued this pull request to merge with Graphite.

@wraeth-eth merged this pull request with Graphite.


ENH : add reweightedL1 solver with CV

It's a hanging PR so far in celer (https://github.com/mathurinm/celer/pull/169, not merged due to speed regression and it does not handle 0 weights). I think it would be very useful for non convex penalties too.

I was wondering if we could do a generic l1 reweighting for an penalty with weights arguments, this way could think of reweighted Huber or reweighted lad lasso


Automated Testing: Proposal/Query.

I'm particularly interested in using Godot for cross-platform application development using the Control nodes but I can't find any information on automated testing. Is there any support for driver type applications for automated UI testing? I know that it doesn't make sense for games, but it's invaluable for normal types of application (could probably be useful for testing the Godot editor as well).
The basic idea is to expose some kind of interface that an external driver process can attach to and a way to find individual UI elements and invoke properties/events on them and then get the application state afterwards.

Related to / duplicate of #2641

Related to / duplicate of #2641

This isn't the same as unit testing (although being able to unit test scripts would also be very useful).

Feature and improvement proposals for the Godot Engine are now being discussed and reviewed in a dedicated Godot Improvement Proposals (GIP) (godotengine/godot-proposals) issue tracker. The GIP tracker has a detailed issue template designed so that proposals include all the relevant information to start a productive discussion and help the community assess the validity of the proposal for the engine.
The main (godotengine/godot) tracker is now solely dedicated to bug reports and Pull Requests, enabling contributors to have a better focus on bug fixing work. Therefore, we are now closing all older feature proposals on the main issue tracker.
If you are interested in this feature proposal, please open a new proposal on the GIP tracker following the given issue template (after checking that it doesn't exist already). Be sure to reference this closed issue if it includes any relevant discussion (which you are also encouraged to summarize in the new proposal). Thanks in advance!


[QUESTION] Asyncronous loops to perform SSE

I'm refactoring from Flask with flask-socketIO and threads to use fastapi with asyncio. The basics are excellent, but I have the need for server side event initiation. I'm trying to avoid websockets and want to make it purely http.
A good example is a simple heartbeat signal as a 1/0 that is sent each second to all connected. I can't seem to figure out how to make that happen.
Is this kind of thing possible without the need for websockets?

I am working on something similar.
My approach now is after accepting the connection I am storing the websocket object in an dict (user_id) as key. By this I can grab them from any other point in my app and send messages

Yep... although I'm trying not to use websockets just pure server-sent-events.

I managed to get nice behavior using Flask with the following:
#flask app
import flask, time
from flask import Response, render_template

def get_message():
  '''this could be any function that blocks until data is ready'''

  time.sleep(1)
  s = time.ctime(time.time())
  return s

@app.route('/stream', methods=["GET"])
def stream():
  def eventStream():
    while True:
      # wait for source data to be available, then push it
      yield 'data: {}\n\n'.format(get_message())
  return Response(eventStream(), mimetype="text/event-stream")

and the following on the client side (React)
const timestamp = new EventSource("http://localhost/stream", {method: "get", mode: 'cors'})
timestamp.onmessage = (data) => {
  console.log(data.data)
}

But I can't implement the same with FastAPI. It does the whole loop then sends it all in one chunk rather than in 1s intervals

Have you looked if https://github.com/sysid/sse-starlette would help?

Oooo... I had stupidly thought it was for websockets, but I'm happily mistaken! Thanks @euri10

what are pure server-sent-events? If you think about HTTP2.0 pushes, that is not the right thing here.
websockets are definitely a working solution here, and you can do repeated tasks with FastAPI utils
https://fastapi-utils.davidmontague.xyz/user-guide/repeated-tasks/
(I myself haven't that feature tho)

@transfluxus, what a nice solution. It will work well now that I've also been pointed to the inbuilt websocket option. I was wanting to avoid websockets to avoid using another package, but this looks neat and simple as an always on timed event generator.

Both are good solutions, so I can close this now.

Thanks for the help here @euri10 and @transfluxus ! :cake: :bowing_man:
@fonty422 I suspect the equivalent to what you were using would be a StreamingResponse, maybe you can check that too: https://fastapi.tiangolo.com/advanced/custom-response/#streamingresponse
Anyway, thanks for reporting back and closing the issue :+1:

sse-starlette handles some issues when reloading/closing the application.


Migrate to Nunavut v2

Is there a list of remaining tasks to move to Nunavut v2?
I would be happy to help if I can, as my build system would be greatly simplified without two different versions of Nunavut to wrangle.

List of tasks to move to Nunavut v2:
Remove the DSDL templates completely and instead invoke the default Python generator available in Nunavut v2. These directories need to go: pycyphal/dsdl/_templates, pycyphal/dsdl/_serialized_representation. _builtin_form.py, _composite_object.py are not needed either because the respective functionality has been moved into the Nunavut-generated support module.
Upgrade _compiler.py to invoke the new Nunavut API correctly.
Remove all DSDL-related tests affected by the removal of the modules mentioned above. They have already been migrated to Nunavut.


Implement Initial Host-Based Spawns for Animals and Ignore Other Player Spawns

Preliminary Issue(s): #2

I would love to see this happen 🤩


Use feature flags rather than optional resources

Following the discussion in https://github.com/bevyengine/bevy/issues/5302#issuecomment-1187501766, I think the correct pattern here is actually to expose feature flags, rather than optional resources (and eventreaders).
This allows us to fully cut down compile times / sizes, and correctly panic (rather than failing silently) when the app is misconfigured.
Planned split:

Gamepad
Keyboard
Mouse
Touch

All of these will be enabled by default.

Removing from the milestone; the ROI really isn't there. See the linked issue.


COALESCE: returns int|null even if one argument is not nullable

I am not quite sure if or how this is fixable but if COALESCE is called with multiple arguments and one of them is not nullable then the value should also not be nullable.
Example:
Table:
CREATE TABLE ak (
    akid int NOT NULL DEFAULT 0,
    eladaid int DEFAULT NULL,
    eadavk decimal(12,2) NOT NULL
);

Query:
SELECT COALESCE(eladaid, akid) as id FROM ak

I would expect that the value for id is always int

This requires an sql-AST which we don't yet have .. but who knows ;-)

@glaubinix please try the latest release. SQL Ast type narrowing is a opt-in feature right now, enabled via RuntimeConfiguration.
Please give it a try

Thanks, will give this a try next week!

Apologies for not getting back to you earlier. I just tried this in our code base. Unfortunately, we are using PostgreSQL and it looks like sqlftw/sqlftw only supports MySQL so far. This currently fails with several internal errors like Internal error: Unable to resolve column TIME in file in ParserInference::narrowResultType line 91.

thanks for the feedback. I added a new todo item for supporting AST in postgres.
https://github.com/staabm/phpstan-dba/issues/538
for now we will explore the AST features in mysql only, until sqlftw/sqlftw stabilizes and natively supports postgres.


Cannot work on Iwara

youtube-dl.exe http://ecchi.iwara.tv/videos/mwweqhblyds8k181n -v
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['http://ecchi.iwara.tv/videos/mwweqhblyds8k181n', '-v']
[debug] Encodings: locale cp932, fs mbcs, out cp932, pref cp932
[debug] youtube-dl version 2017.01.18
[debug] Python version 3.4.4 - Windows-10-10.0.14393
[debug] exe versions: none
[debug] Proxy map: {}
[Iwara] mwweqhblyds8k181n: Downloading webpage
ERROR: Unable to extract iframe URL; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpkdk_72bb\build\youtube_dl\YoutubeDL.py", line 694, in extract_info
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpkdk_72bb\build\youtube_dl\extractor\common.py", line 359, in extract
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpkdk_72bb\build\youtube_dl\extractor\iwara.py", line 60, in _real_extract
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpkdk_72bb\build\youtube_dl\extractor\common.py", line 671, in _html_search_regex
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpkdk_72bb\build\youtube_dl\extractor\common.py", line 662, in _search_regex
youtube_dl.utils.RegexNotFoundError: Unable to extract iframe URL; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

It stopped working on iwara.
It was working on January 4th.
It seems that the specification change of the site was around 11th.
I would like it to work if possible.
Please.
This sentence is machine translation.

iwara.tv (Iwara) is listed @ https://github.com/rg3/youtube-dl/blob/master/docs/supportedsites.md
youtube-dl worked in 2016 to download from http://www.iwara.tv but in 2017 in early January the videos began reporting this error:
$ youtube-dl http://www.iwara.tv/videos/jkrq0cj9jie1elyl
[debug] System config: []
[debug] User config: [u'--no-overwrites', u'--continue', u'--verbose', u'-f', u'best']
[debug] Custom config: []
[debug] Command-line args: [u'http://www.iwara.tv/videos/jkrq0cj9jie1elyl']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2017.01.25
[debug] Python version 2.7.9 - Linux-3.16.0-4-686-pae-i686-with-debian-8.7
[debug] exe versions: avconv 11.8-6, avprobe 11.8-6
[debug] Proxy map: {}
[Iwara] jkrq0cj9jie1elyl: Downloading webpage
ERROR: Unable to extract iframe URL; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 694, in extract_info
ie_result = ie.extract(url)
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 359, in extract
return self._real_extract(url)
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/iwara.py", line 60, in _real_extract
webpage, 'iframe URL', group='url')
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 671, in _html_search_regex
res = self._search_regex(pattern, string, name, default, fatal, flags, group)
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 662, in _search_regex
raise RegexNotFoundError('Unable to extract %s' % _name)
RegexNotFoundError: Unable to extract iframe URL; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
$ youtube-dl --version
2017.01.25
If someone could re-add compatibility for extracting from this website that would be greatly appreciated.

Thanks for the reports. Iwara support will be fixed in the next version.


FID

I could ask how do you use FID for evaluation?
I run the code that the author of cyclegan provide，using the official FID of pytorch version ，did not change their source code,The default is pool3， the resulting FID for generating zebra  in total 120 and real zebra is 130.5. The result in your the paper is 151.52.
I want to know  the number of generating zebra image for evaluation in your test?
I want to know whether the pool3 of  Inception network is different from the last hidden layer of the Inception architecture ?

In our work, we want to measure the ability to perform image to image translation only on the foreground of the input image without altering its background. Consequently, we wish the foreground of our generated image to share visual properties of the target domain, while its background should share visual properties of the source domain.
As such, the FID value we report is the mean value between --the generated image compared to the source domain-- and --the generated image compared to the target domain--.
In the case of horse => zebra for example, we will calculate the FID value between generated zebra images (120 images) and real zebra images (140 images) (using test inputs for both), then we will calculate the FID value between generated zebra images (120) and real horse images (120) (using test inputs for both), Finally we take the mean of these two values.
N.B: We use the tensorflow FID implementation in https://github.com/bioinf-jku/TTUR

I know your meaning.You wish the foreground of our generated image to share visual properties of the target domain, while its background should share visual properties of the source domain.Therefore, you did so. whether this methor is good for your with,and what is the the theoretical basis ?

Thank you