File: search_statement.py

package info (click to toggle)
python-mcstasscript 0.0.46%2Bgit20250402111921.bfa5a26-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,440 kB
  • sloc: python: 13,421; makefile: 14
file content (102 lines) | stat: -rw-r--r-- 2,602 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
class SearchStatement:
    def __init__(self, statement, SHELL=False):
        """
        A McStas search statement, used either in instrument before component
        """

        self.statement = str(statement)
        self.SHELL = SHELL

    def make_string(self):
        """
        Generates the search string
        """
        if self.SHELL:
            shell_part = "SHELL "
        else:
            shell_part = ""

        if self.statement[0] != '"' and self.statement[-1] != '"':
            self.statement = '"' + self.statement + '"'

        return f'SEARCH {shell_part}{self.statement}'

    def write(self, fo):
        """
        Writes search string to file
        """
        fo.write(self.make_string() + "\n")

    def __repr__(self):
        """
        Prints search string
        """
        return self.make_string()

    def __EQ__(self, other):
        if self.statement == other.statement and self.SHELL == other.SHELL:
            return True


class SearchStatementList:
    def __init__(self):
        """
        Keeps a number of search statements together
        """
        self.statements = []

    def add_statement(self, statement):
        """
        Add new search statement
        """
        if not isinstance(statement, SearchStatement):
            raise ValueError("SearchStatementList only supports adding SearchStatement objects.")

        self.statements.append(statement)

    def clear(self):
        """
        Clear all search statements
        """
        self.statements = []

    def write(self, fo):
        """
        Write search statements to a file
        """
        for statement in self.statements:
            statement.write(fo)

    def make_string(self):
        """
        Makes string with all search statements
        """
        string = ""
        for statement in self.statements:
            string += statement.make_string() + "\n"

        return string

    def __EQ__(self, other):
        print("in list EQ")
        if len(self.statements) != len(other.statements):
            return False

        for index, statement in enumerate(self.statements):
            if statement != other.statements[index]:
                return False

        return True

    def __repr__(self):
        """
        Show search statements with print
        """
        if len(self.statements) == 0:
            return "No Search statements yet"

        string = "List of SEARCH statements: \n"
        for statement in self.statements:
            string += "  " + statement.make_string() + "\n"

        return string