mirror of
				https://github.com/pytorch/pytorch.git
				synced 2025-10-31 20:34:54 +08:00 
			
		
		
		
	Summary: Some machines don't have a versionless `python` on their PATH, which breaks these existing shebangs. I'm assuming that all the existing versionless `python` shebangs are meant to be `python3` and not `python2`; please let me know if my assumption was incorrect for any of these. Pull Request resolved: https://github.com/pytorch/pytorch/pull/58275 Test Plan: CI. Reviewed By: zhouzhuojie Differential Revision: D28428143 Pulled By: samestep fbshipit-source-id: 6562be3d12924db72a92a0207b060ef740f61ebf
		
			
				
	
	
		
			52 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| '''
 | |
| Verify that it is possible to round-trip native_functions.yaml via ruamel under some
 | |
| configuration.  Keeping native_functions.yaml consistent in this way allows us to
 | |
| run codemods on the file using ruamel without introducing line noise.  Note that we don't
 | |
| want to normalize the YAML file, as that would to lots of spurious lint failures.  Anything
 | |
| that ruamel understands how to roundtrip, e.g., whitespace and comments, is OK!
 | |
| 
 | |
| ruamel is a bit picky about inconsistent indentation, so you will have to indent your
 | |
| file properly.  Also, if you are working on changing the syntax of native_functions.yaml,
 | |
| you may find that you want to use some format that is not what ruamel prefers.  If so,
 | |
| it is OK to modify this script (instead of reformatting native_functions.yaml)--the point
 | |
| is simply to make sure that there is *some* configuration of ruamel that can round trip
 | |
| the YAML, not to be prescriptive about it.
 | |
| '''
 | |
| 
 | |
| import ruamel.yaml
 | |
| import difflib
 | |
| import sys
 | |
| from pathlib import Path
 | |
| from io import StringIO
 | |
| 
 | |
| def fn(base):
 | |
|     return str(base / Path("aten/src/ATen/native/native_functions.yaml"))
 | |
| 
 | |
| with open(Path(__file__).parent.parent.parent / fn('.'), "r") as f:
 | |
|     contents = f.read()
 | |
| 
 | |
| yaml = ruamel.yaml.YAML()
 | |
| yaml.preserve_quotes = True
 | |
| yaml.width = 1000
 | |
| yaml.boolean_representation = ['False', 'True']
 | |
| r = yaml.load(contents)
 | |
| 
 | |
| # Cuz ruamel's author intentionally didn't include conversion to string
 | |
| # https://stackoverflow.com/questions/47614862/best-way-to-use-ruamel-yaml-to-dump-to-string-not-to-stream
 | |
| string_stream = StringIO()
 | |
| yaml.dump(r, string_stream)
 | |
| new_contents = string_stream.getvalue()
 | |
| string_stream.close()
 | |
| 
 | |
| if contents != new_contents:
 | |
|     print("""\
 | |
| 
 | |
| ## LINT FAILURE: native_functions.yaml ##
 | |
| 
 | |
| native_functions.yaml failed lint; please apply the diff below to fix lint.
 | |
| If you think this is in error, please see .github/scripts/lint_native_functions.py
 | |
| """, file=sys.stderr)
 | |
|     sys.stdout.writelines(difflib.unified_diff(contents.splitlines(True), new_contents.splitlines(True), fn('a'), fn('b')))
 | |
|     sys.exit(1)
 |