2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Дурацкий вопрос касательно кода
Сообщение28.09.2024, 17:38 


27/09/14
12
Доброго времени суток.
Возникла необходимость использования кода на Python, написанного примерно пол года назад, и, посвященного обработке файлов-микрофотографий, сделанных трансмиссионным электронным микроскопом, с помощью возможностей искусственного интеллекта.
Ранее для открытия файла использовалась строка:
Код:
micrograph = Micrograph('file.dm3')

Отмечу, с данной строки начинается все обработка реальных фото, выше нее только библиотеки задаются.
Сегодня мне вместо ответной фразы "Fibrils_Example.dm3 opened as a Micrograph object" было выдано:
Код:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-30-03733b51cf35> in <cell line: 2>()
      1 #initialise micrograph object and open file
----> 2 micrograph = Micrograph('0003.dm3')

TypeError: Micrograph.__init__() takes 1 positional argument but 2 were given

Во-первых, я не понимаю в чем проблема, во-вторых, все, что удалось за день перечитать в сети не помогло ни понять, ни решить данную проблему. Может кто сталкивался или по крайней мере может помочь разобраться? Отмечу, что то же самое получается и при использования tif-файлов.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 19:17 
Заслуженный участник
Аватара пользователя


01/09/13
4646
Novichock в сообщении #1656478 писал(а):
я не понимаю в чем проблема

Ну как можно что-то подсказать, не зная откуда этот Micrograph берётся?...
Видимо, изменилась соответствующая библиотека.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 19:27 


27/09/14
12
Спасибо за Ваш ответ.
Да, библиотека называется SimpliPyTEM.
В прошлый раз была версия 1.0.10, теперь с большим трудом удалось заставить заработать только версию 1.0.0. Почему не знаю. Просто версия 1.0.10 не работает и все. Пыталась ее заставить работать через "виртуально окружение", но, во-первых, я новичок и не слишком сильно разбираюсь, во-вторых, видимо где-то накосячила. В итоге, максимальная версия, которая заработала в "виртуальном окружении" это 1.0.1 и с ней та же проблема, что описана выше.
Но, как я понимаю это должно быть не принципиально, потому, что изначально у авторов методики все работало именно на 1.0.0 версии, несколько лет назад.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 20:11 


12/07/15
01/11/24
3276
г. Чехов
Может вы где-то в коде заняли указатель Micrograph? Я забыл, имеет ли значение разница micrograph и Micrograph. Поосторожнее тут. Python позволяет переопределять ключевые слова типа list, set, после этого соответствующие встроенные функции не работают.
ИМХО еще: попробуйте двойные кавычки вместо одинарных.

-- 28.09.2024, 20:20 --

А так да, ошибка парадоксальная. Ведь мы видим, что передан один позиционный аргумент (как положено), а пишет, что два. У меня такое бывало много раз, забыл как именно это решалось, но явно требуется перезагрузка ядра.

-- 28.09.2024, 20:34 --

Посмотрел код на гитхабе, когда-то нельзя было имя файла передать при создании объекта Micrograph.
Попробуйте после создания объекта использовать функцию open_dm(filename) или open_mrc(filename).

-- 28.09.2024, 20:52 --

Блин, извините за блуждающие мысли)
Короче, в старых версиях библиотеки имя файла при создании объекта передавать не следует.
Просто добавьте после создания:
Используется синтаксис Python
micrograph.open_file('0003.dm3')

или более конкретно
Используется синтаксис Python
micrograph.open_dm('0003.dm3')

(разницы вообще нет)

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:12 
Заслуженный участник
Аватара пользователя


01/09/13
4646
Mihaylo в сообщении #1656508 писал(а):
что передан один позиционный аргумент

Нет, два. Ещё self.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:19 


12/07/15
01/11/24
3276
г. Чехов
Geen в сообщении #1656522 писал(а):
Нет, два. Ещё self.

Да! Очень плохая подсказка, ведь тот, кто использует библиотеку в душе не ведает про self. Надо так писать:
Код:
TypeError: Micrograph.__init__() takes self-argument and 0 positional arguments but 1 were given

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:27 


01/09/14
491
Novichock в сообщении #1656478 писал(а):
с помощью возможностей искусственного интеллекта.

Novichock, а у ИИ не спрашивали? Бесплатные уже неплохо разбираются в программировании. Ответ от o1(платный)
Цитата:
Думал на протяжении 13 секунд
Здравствуйте!

Ошибка, которую вы получаете:

```
TypeError: Micrograph.__init__() takes 1 positional argument but 2 were given
```

указывает на то, что метод `__init__` класса `Micrograph` теперь принимает только один позиционный аргумент (обычно это `self`), но при создании объекта вы передаете ему два аргумента: неявный `self` и строку с именем файла `'0003.dm3'`.

**Возможные причины и решения:**

1. **Изменения в библиотеке или классе `Micrograph`:**

- **Причина:** Если вы используете стороннюю библиотеку для работы с микрофотографиями, возможно, за прошедшие полгода она обновилась, и сигнатура метода `__init__` изменилась. Теперь загрузка файла может выполняться другим способом.

- **Решение:** Ознакомьтесь с текущей документацией библиотеки. Возможно, теперь нужно сначала создать объект `Micrograph` без аргументов, а затем вызвать метод для открытия файла. Например:

```python
micrograph = Micrograph()
micrograph.open('0003.dm3')
```

Или использовать альтернативный конструктор, если такой имеется.

2. **Конфликт имен или импорт не той версии класса:**

- **Причина:** Возможно, у вас в коде или окружении появился другой класс с именем `Micrograph`, который не соответствует тому, который вы использовали ранее.

- **Решение:**

- Проверьте, откуда импортируется класс `Micrograph`. Убедитесь, что вы импортируете правильный класс из нужного модуля.

- Например, если ранее вы использовали:

```python
from your_library import Micrograph
```

Убедитесь, что `your_library` правильно установлена и импортируется.

3. **Изменения в окружении или зависимостях:**

- **Причина:** За время, прошедшее с момента последнего запуска кода, могли обновиться зависимости, версии Python или пакетов.

- **Решение:**

- Проверьте версии всех используемых библиотек и сравните их с теми, которые были при написании кода.

- Если вы использовали виртуальное окружение, попробуйте восстановить его или создать новое с нужными версиями пакетов.

4. **Просмотр исходного кода класса `Micrograph`:**

- **Действие:** Откройте исходный код класса `Micrograph` или воспользуйтесь функцией `help(Micrograph)` в Python, чтобы увидеть текущую сигнатуру метода `__init__` и другие доступные методы.

- **Цель:** Это поможет понять, какие параметры ожидает класс и как его правильно использовать в текущей версии.

**Рекомендации для решения проблемы:**

- **Проверьте документацию:** Ознакомьтесь с официальной документацией библиотеки или модуля, из которого импортируется `Micrograph`, чтобы узнать о возможных изменениях в API.

- **Используйте актуальный способ загрузки файлов:** Если метод загрузки микрофотографий изменился, адаптируйте свой код согласно новым требованиям. Например:

```python
micrograph = Micrograph()
micrograph.load('0003.dm3')
```

Или

```python
micrograph = Micrograph.from_file('0003.dm3')
```

- **Обратитесь к предыдущей версии библиотеки:** Если обновления в библиотеке являются причиной проблемы, и вы не можете изменить код, попробуйте установить предыдущую версию библиотеки, с которой ваш код работал корректно.

```bash
pip install your_library==версия
```

- **Проверка на конфликт имен:** Убедитесь, что в вашем коде нет другого класса или функции с именем `Micrograph`, который может перекрывать нужный вам класс.

**Заключение:**

Ошибка возникает из-за несоответствия ожидаемых аргументов в конструкторе класса `Micrograph`. Вероятнее всего, это связано с изменениями в библиотеке или окружении. Рекомендую проверить документацию и актуальный способ использования класса для загрузки микрофотографий. Если у вас есть дополнительная информация о том, из какой библиотеки импортируется `Micrograph`, я могу помочь более конкретно.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:35 


12/07/15
01/11/24
3276
г. Чехов
talash
Прикольно :appl:
Правда среди угадываемых ответов нет правильного. Лично я на Гитхабе всё узнал более точно.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 21:41 


01/09/14
491
Mihaylo в сообщении #1656528 писал(а):
talash
Прикольно :appl:
Правда среди угадываемых ответов нет правильного. Лично я на Гитхабе всё узнал более точно.

Нам на работе выдали доступ к платному чат-GPT, чтобы помогал программировать)
Какой правильный ответ?

-- 28.09.2024, 20:53 --

Mihaylo в сообщении #1656508 писал(а):
micrograph.open_file('0003.dm3')

Это правильный ответ? Название функции это детали, по сути же бот правильно написал.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 22:00 
Заслуженный участник
Аватара пользователя


01/09/13
4646
talash в сообщении #1656530 писал(а):
Название функции это детали, по сути же бот правильно написал.

А сколько денег он содрал за эту банальность?

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение28.09.2024, 23:14 


01/09/14
491
Geen в сообщении #1656534 писал(а):
А сколько денег он содрал за эту банальность?

Там вроде месячная подписка 25-30$.

-- 28.09.2024, 22:15 --

Банальность, если сам в теме, а если ламер, то помогает здорово.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 08:19 


15/11/15
03/11/24
1061
talash в сообщении #1656527 писал(а):
Ответ от o1(платный)

А что за o1(платный)?
Ответ GPT-4o мне показался вполне внятным и решение случайно угадал )):

GPT-4o писал(а):
Ошибка, которую ты видишь, означает, что ты передаёшь два аргумента в конструктор класса Micrograph, а конструктор ожидает только один аргумент (как указано в сообщении об ошибке: "1 positional argument but 2 were given").

Разбор ошибки:
    - Micrograph('0003.dm3'): Ты передаёшь строку '0003.dm3' как аргумент.
    - Ошибка говорит о том, что конструктор класса Micrograph принимает только один аргумент (обычно это ссылка на сам объект self), и ты пытаешься передать второй аргумент, который он не ожидает.

Возможные причины и решения:
1. Неправильная реализация конструктора: Возможно, конструктор класса Micrograph был объявлен так, что он не принимает никаких дополнительных аргументов, кроме стандартного аргумента self. Например, вот как может выглядеть неправильная реализация:

Код:
class Micrograph:
    def __init__(self):  # Нет параметров, кроме self
        pass

2. Использование метода для открытия файла: Возможно, вместо передачи файла в конструктор, нужно использовать отдельный метод для загрузки файла после инициализации объекта.

Код:
micrograph = Micrograph()
micrograph.open_file('0003.dm3')

3. Использование библиотеки неправильно: Если Micrograph — это класс из библиотеки, то возможно, он был задуман для работы другим способом. Проверь документацию к библиотеке или классу Micrograph, чтобы убедиться, что ты передаёшь аргументы правильно.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 09:02 


01/09/14
491
gevaraweb в сообщении #1656613 писал(а):
А что за o1(платный)?

Следующая версия после 4o. Они обе доступны только по подписке, то есть платные.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 10:17 


01/09/14
491
gevaraweb
у вас подписка на чат гпт? Значит o1-preview должен быть доступен.

 Профиль  
                  
 
 Re: Дурацкий вопрос касательно кода
Сообщение29.09.2024, 11:02 


15/11/15
03/11/24
1061
talash
Да, точно, есть :). Как нибудь сравню ) Я подписался на ChatGPT 4o из интереса на месяц, обошлось с посредниками в 3000 руб.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group